<?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>69620</bug_id>
          
          <creation_ts>2011-10-07 06:03:21 -0700</creation_ts>
          <short_desc>IndexedDB: Remove SQLite backing store</short_desc>
          <delta_ts>2011-11-11 04:19:41 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>fishd</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>479958</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-07 06:03:21 -0700</bug_when>
    <thetext>IndexedDB: Remove SQLite backing store</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479959</commentid>
    <comment_count>1</comment_count>
      <attachid>110133</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-07 06:07:04 -0700</bug_when>
    <thetext>Created attachment 110133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479960</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 06:09:49 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481276</commentid>
    <comment_count>3</comment_count>
      <attachid>110133</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-10 16:31:32 -0700</bug_when>
    <thetext>Comment on attachment 110133
Patch

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

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:47
&gt; +    return securityOrigin-&gt;databaseIdentifier();

Won&apos;t this mean the user will lose existing LevelDB-backed IndexedDBs, since the file identifier will change? (i.e. should we use a &quot;@1&quot; suffix until we intentionally break LevelDB store compatibility?)

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:102
&gt; +    const String fileIdentifier = computeFileIdentifier(securityOrigin.get());

This instance of fileIdentifier is unused and can be removed. (Leftover from a previous refactor, my fault)

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:132
&gt;  #if USE(LEVELDB)

Planning on a follow-up CL for eliminating USE(LEVELDB) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481435</commentid>
    <comment_count>4</comment_count>
      <attachid>110133</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-10 21:52:57 -0700</bug_when>
    <thetext>Comment on attachment 110133
Patch

R- based on jsbell&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481558</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-11 03:55:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:47
&gt; &gt; +    return securityOrigin-&gt;databaseIdentifier();
&gt; 
&gt; Won&apos;t this mean the user will lose existing LevelDB-backed IndexedDBs, since the file identifier will change? (i.e. should we use a &quot;@1&quot; suffix until we intentionally break LevelDB store compatibility?)

You&apos;re right! I wasn&apos;t thinking. Good catch.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:102
&gt; &gt; +    const String fileIdentifier = computeFileIdentifier(securityOrigin.get());
&gt; 
&gt; This instance of fileIdentifier is unused and can be removed. (Leftover from a previous refactor, my fault)

Removed.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:132
&gt; &gt;  #if USE(LEVELDB)
&gt; 
&gt; Planning on a follow-up CL for eliminating USE(LEVELDB) ?

Yes. Not decided on the details yet, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481560</commentid>
    <comment_count>6</comment_count>
      <attachid>110494</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-11 03:58:06 -0700</bug_when>
    <thetext>Created attachment 110494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481694</commentid>
    <comment_count>7</comment_count>
      <attachid>110494</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-11 10:01:09 -0700</bug_when>
    <thetext>Comment on attachment 110494
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481850</commentid>
    <comment_count>8</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-11 13:12:43 -0700</bug_when>
    <thetext>Should we plan on keeping the @1 in perpetuity?  If so we should abstract it out instead of leaving the magic constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481851</commentid>
    <comment_count>9</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-11 13:13:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Should we plan on keeping the @1 in perpetuity?  If so we should abstract it out instead of leaving the magic constant.

+1 - At the very least, a comment explaining what it means and when to touch it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482314</commentid>
    <comment_count>10</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-12 02:33:17 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Should we plan on keeping the @1 in perpetuity?  If so we should abstract it out instead of leaving the magic constant.

Right. Sticking it in a carefully named variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482315</commentid>
    <comment_count>11</comment_count>
      <attachid>110656</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-12 02:34:56 -0700</bug_when>
    <thetext>Created attachment 110656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482479</commentid>
    <comment_count>12</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-10-12 10:00:13 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483058</commentid>
    <comment_count>13</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-13 01:45:05 -0700</bug_when>
    <thetext>Darin: would you like to take another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483842</commentid>
    <comment_count>14</comment_count>
      <attachid>110656</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-14 01:36:07 -0700</bug_when>
    <thetext>Comment on attachment 110656
Patch

R=me

Apologies for the delay!  Please feel free to send me direct email in the future when you are stuck waiting on me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483864</commentid>
    <comment_count>15</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-14 02:14:48 -0700</bug_when>
    <thetext>Committed r97453: &lt;http://trac.webkit.org/changeset/97453&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500469</commentid>
    <comment_count>16</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-11-10 18:40:42 -0800</bug_when>
    <thetext>I have a question about this patch. I&apos;m developing IndexedDB implementation for JSC using SQLiteBackingStore. is there any reason for removing SQLiteBackingStore?
is that discussed in webkit dev community? If so, i&apos;ve missed it. please let me know about this patch history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500657</commentid>
    <comment_count>17</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-11-11 04:19:41 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I have a question about this patch. I&apos;m developing IndexedDB implementation for JSC using SQLiteBackingStore. is there any reason for removing SQLiteBackingStore?

It was removed because it was unused. We did not want to maintain an unused back-end, and there were features in IndexedDB (such as compound keys), for which we did not have a plan for how to implement using SQLite.

Can you switch to using the LevelDB backing store instead?

&gt; is that discussed in webkit dev community? If so, i&apos;ve missed it. please let me know about this patch history.

I apologize for not raising this on the mailing list. We don&apos;t generally hear much about the IndexedDB implementation, so it was my impression that no-one was dependent on this code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110133</attachid>
            <date>2011-10-07 06:07:04 -0700</date>
            <delta_ts>2011-10-11 03:57:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69620-20111007140701.patch</filename>
            <type>text/plain</type>
            <size>76202</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY5MTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYzU3OTRlMTdlN2M3ZWVi
OGY3Mzc2NmI5MzA0YzViYTkwOWZmMmVkLi40NjJlOTU4NTNlYjQ4ODY5ZTUzMjhjODc0ZTI5YmE5
ZjVhNzRkZDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTAtMDcgIEhhbnMg
V2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFJlbW92
ZSBTUUxpdGUgYmFja2luZyBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njk2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgdGhlIFNRTGl0ZSBiYWNraW5nIHN0b3JlIGltcGxlbWVudGF0
aW9uOyBpdCBpcyBub3QgdXNlZCBhbnltb3JlLgorICAgICAgICBBbHNvIHJlbW92ZSB0aGUgbWF4
aW11bVNpemUgcGFyYW1ldGVyLCBpdCBpcyBub3QgdXNlZCBlaXRoZXIuCisKKyAgICAgICAgTm8g
bmV3IGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUZpbGVJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6Cisg
ICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6IFJlbW92ZWQuCisKIDIwMTEt
MTAtMDcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogYWRkIEVsZW1lbnRzIGFuZCBOZXR3b3JrIHBhbmVscyB0byB0aGUgY29t
cGlsYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGYxMzQ0OTU0MDFiNWZl
NWIzNjUyNGFkZWI0YWYyOGVmYWM5OGM1MzUuLjc2NGU5MjYzM2M1YzgyN2JiNGIwZDkwMWEyMmQx
N2FmMjMzM2NkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzM4Miw4ICsz
MzgyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWRiMDAxMjBiODg4MDgz
ZjM3ZTQyOWJhYzU3MDRmZTkwNmIwNTcyNS4uNWIzZGM4YzhlYjJjZDE5MTc1ODFkMjM2ZmYxMDY0
MjZiMzhiZWYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDgxMSw4ICs0ODExLDYgQEAKICAgICAg
ICAgICAgICdzdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJS
ZXF1ZXN0LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNw
cCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaCcsCiAgICAg
ICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUu
aAppbmRleCAwMjdkNTVmZjI5OTM0MGY0MzMzYmFhNTM1YTdmZDNkOTBkY2FkNWU5Li42ZTEzZjRm
YTYxYzRhMjFkNDJjM2ZmZGU1YmRjNzNkOTFkZGIzYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTEwOCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCByb2xsYmFjaygpID0gMDsKICAgICB9OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKSA9IDA7Ci0gICAgdmlydHVhbCBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVU
eXBlKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5kZXggZjU4NzIyYmFjZjk1ZmRkZTlkOTEyNGE3Nzhm
MWY0MjFkYjkyYjVlYS4uOWYyMzMzZTBmYTg1NDJjNGQ0NGFkNGRmYThiZDE5NzE3MTI0ZTA5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCkBAIC03MSw3ICs3MSw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwog
ICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91
cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBtX2ZhY3RvcnlCYWNrZW5kLT5nZXREYXRhYmFzZU5h
bWVzKHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUo
KSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCksIGdyb3VwU2V0dGluZ3Mt
PmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkRlZmF1
bHRCYWNraW5nU3RvcmUpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMo
cmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBn
cm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CiAgICAgcmV0dXJuIHJlcXVl
c3Q7CiB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0
b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKIAogICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CiAgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0
aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOwotICAgIG1f
ZmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFz
ZVBhdGgoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCUXVvdGFCeXRlcygpLCBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZTo6RGVmYXVsdEJhY2tpbmdTdG9yZSk7CisgICAgbV9mYWN0b3J5QmFj
a2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9j
dW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsK
ICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDUxYzUwYzQ1OTAyODQ0M2I3NjZmNjkwMjc5
ZmNiMDBiZjQzZGY5N2UuLmM0YTkyMmU3NDk5MzQwZWM0ZTYyNGZhMTU5ZTkzNjY2MDczMjhkODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJMZXZlbERC
QmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCU1FMaXRlQmFja2luZ1N0b3JlLmgiCiAjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtNDMsMTQgKzQyLDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFN0cmluZyBjb21wdXRlRmlsZUlkZW50aWZp
ZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6QmFja2luZ1N0b3JlVHlwZSB0eXBlKQorc3RhdGljIFN0cmluZyBjb21wdXRlRmlsZUlk
ZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewotICAgIHJldHVybiBz
ZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyBTdHJpbmc6OmZvcm1hdCgiQCVk
IiwgdHlwZSk7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KTsKIH0KIAotc3RhdGljIFN0cmluZyBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGUgdHlwZSkKK3N0YXRpYyBTdHJpbmcgY29tcHV0
ZVVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4pCiB7Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0
eU9yaWdpbiwgdHlwZSkgKyBuYW1lOworICAgIHJldHVybiBjb21wdXRlRmlsZUlkZW50aWZpZXIo
c2VjdXJpdHlPcmlnaW4pICsgIkAiICsgbmFtZTsKIH0KIAogSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpJREJGYWN0b3J5QmFja2VuZEltcGwoKQpAQCAtODAsMTEgKzc5LDkgQEAgdm9pZCBJREJGYWN0
b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJ
ZGVudGlmaWVyKQogICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92ZShmaWxlSWRlbnRpZmllcik7
CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBt
YXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQordm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewotICAgIEFTU0VSVChiYWNraW5nU3Rv
cmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0
YURpciwgbWF4aW11bVNpemUsIGJhY2tpbmdTdG9yZVR5cGUpOworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4s
IGRhdGFEaXIpOwogICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVO
S05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwogICAgICAgICByZXR1cm47CkBAIC0xMDAs
MTIgKzk3LDEwIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVz
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsCiAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNlKCkpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2lu
Z1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7Ci0gICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0g
RGVmYXVsdEJhY2tpbmdTdG9yZSk7Ci0KLSAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIg
PSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdTdG9y
ZVR5cGUpOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1
ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdTdG9yZVR5cGUp
OworICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmll
cihzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZp
ZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7
CiAKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJh
Y2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuZW5kKCkpIHsKQEAgLTExNCw3ICsxMDksNyBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYQogICAgIH0KIAogICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNo
b3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIsIG1heGltdW1TaXplLCBiYWNraW5nU3RvcmVUeXBlKTsKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBk
YXRhRGlyKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDIy
ICsxMjAsMTkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKIH0KIAot
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJh
Y2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
IGJhY2tpbmdTdG9yZVR5cGUpCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7Ci0gICAgQVNTRVJUKGJh
Y2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7Ci0KLSAgICBjb25zdCBTdHJp
bmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4u
Z2V0KCksIGJhY2tpbmdTdG9yZVR5cGUpOworICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmll
ciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAKICAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CiAgICAgSURCQmFja2luZ1N0b3Jl
TWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVy
KTsKLSAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICYmIChiYWNraW5nU3Rv
cmVUeXBlID09IGl0Mi0+c2Vjb25kLT5iYWNraW5nU3RvcmVUeXBlKCkpKQorICAgIGlmIChpdDIg
IT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpCiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+
c2Vjb25kOwogICAgIGVsc2UgewotICAgICAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBTUUxp
dGVCYWNraW5nU3RvcmUpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1TaXpl
LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CiAjaWYgVVNFKExFVkVMREIpCi0gICAgICAgIGVsc2Ug
aWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tpbmdTdG9yZSkKLSAgICAgICAgICAg
IGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmln
aW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7Cisg
ICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJp
dHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyNlbHNlCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCBiODJkYmI2ZDQ2
ODY4OWFlMGM2ZDU2MGJmY2M1OGIwZjBiZmUyZTAxLi42ZWU5YmIyNDMwMzMwMWZhYzQxNWFhMDY5
MGM2MWJhNGYxMmQ4ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmgKQEAgLTU1LDEyICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRJ
REJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCQmFja2luZ1N0
b3JlKik7CiAgICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxl
SWRlbnRpZmllcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlw
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7
CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5k
SW1wbCgpOwotICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3Jl
KFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0
X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOworICAgIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRh
YmFzZUJhY2tlbmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYTg3NjFjODA5
ZjJiZTcwOGNhOWVkMzQ2YzQ1MDQ0MzgzYjFjNTJiMS4uYzQwMThlZmY5ZGQ2NGRiYzliNzk0MmU1
MGMzYjAyNTUyNDI3NzkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTEsMTUgKzUxLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoKTsK
ICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQogCi0gICAgZW51
bSBCYWNraW5nU3RvcmVUeXBlIHsKLSAgICAgICAgRGVmYXVsdEJhY2tpbmdTdG9yZSwKLSAgICAg
ICAgTGV2ZWxEQkJhY2tpbmdTdG9yZSwKLSAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCi0gICAg
fTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1l
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAppbmRleCBkN2UzYzlkNDcyYTIzZjQ1NjU0NDFjYWIxMmJlOTIwMjVjOTRhMTE4Li5mYTRl
NWIzNDgyNmIxZDk1OWQ1NjkyNWRiZjg0NmU1YTQyMDAxZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTEzMiw3ICsxMzIs
NyBAQCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpCiAg
ICAgbV9jb21wYXJhdG9yLmNsZWFyKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29u
c3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5
KQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNl
QXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwq
IGZhY3RvcnkpCiB7CiAgICAgU3RyaW5nIHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggMjMx
MGM3ZjlhNDcxYmEwZjdhZTZhMWE2MTVhOWFmZTBhMjFiYjc1ZS4uYzFkM2FjNGRiZjk4ZmJmZWQ1
NDg5MjQ4NTc4ZWM4ZDJmM2I4NGUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJMZXZlbERCQmFja2luZ1N0b3JlIDogcHVibGljIElE
QkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50
NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9y
eUJhY2tlbmRJbXBsKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBv
cGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5n
JiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgdmlydHVhbCB+
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNl
TmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwpAQCAtNzUsNyArNzUsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwotICAgIHZpcnR1YWwg
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3Jl
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpMZXZlbERC
QmFja2luZ1N0b3JlOyB9CiAKICAgICBzdGF0aWMgYm9vbCBiYWNraW5nU3RvcmVFeGlzdHMoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2Up
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNmRjODJmNzg2ODcwNzFiNzJiNjE0
OTMxMjFmY2VkZmZmOTYwZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTA1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIklEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oIgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURC
S2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJTUUxpdGVCYWNr
aW5nU3RvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKLSAgICA6IG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi17Ci0gICAgbV9mYWN0b3J5LT5hZGRJ
REJCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgdGhpcyk7Ci19Ci0KLUlEQlNRTGl0ZUJhY2tpbmdT
dG9yZTo6fklEQlNRTGl0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJ
REJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVyKTsKLX0KLQotc3RhdGljIGJvb2wgcnVuQ29tbWFu
ZHMoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlLCBjb25zdCBjaGFyKiogY29tbWFuZHMs
IHNpemVfdCBudW1iZXJPZkNvbW1hbmRzKQotewotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKHNxbGl0ZURhdGFiYXNlLCBmYWxzZSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ29tbWFuZHM7ICsraSkgewotICAg
ICAgICBpZiAoIXNxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmRzW2ldKSkgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFu
ZCBmb3IgSW5kZXhlZERCOiAlcyIsIGNvbW1hbmRzW2ldKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRlVGFibGVzKFNRTGl0ZURhdGFiYXNl
JiBzcWxpdGVEYXRhYmFzZSkKLXsKLSAgICBpZiAoc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMo
IkRhdGFiYXNlcyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29tbWFuZHNbXSA9IHsKLSAgICAgICAgIkNSRUFURSBUQUJMRSBEYXRhYmFzZXMgKGlkIElO
VEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVYVCBOT1QgTlVMTCwgZGVzY3JpcHRpb24gVEVYVCBO
T1QgTlVMTCwgdmVyc2lvbiBURVhUIE5PVCBOVUxMKSIsCi0gICAgICAgICJDUkVBVEUgVU5JUVVF
IElOREVYIERhdGFiYXNlc19uYW1lIE9OIERhdGFiYXNlcyhuYW1lKSIsCi0KLSAgICAgICAgIkNS
RUFURSBUQUJMRSBPYmplY3RTdG9yZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVY
VCBOT1QgTlVMTCwga2V5UGF0aCBURVhULCBkb0F1dG9JbmNyZW1lbnQgSU5URUdFUiBOT1QgTlVM
TCwgZGF0YWJhc2VJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgRGF0YWJhc2VzKGlkKSki
LAotICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZXNfY29tcG9zaXQgT04g
T2JqZWN0U3RvcmVzKGRhdGFiYXNlSWQsIG5hbWUpIiwKLQotICAgICAgICAiQ1JFQVRFIFRBQkxF
IEluZGV4ZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBO
T1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwgbmFtZSBURVhUIE5PVCBOVUxMLCBr
ZXlQYXRoIFRFWFQsIGlzVW5pcXVlIElOVEVHRVIgTk9UIE5VTEwpIiwKLSAgICAgICAgIkNSRUFU
RSBVTklRVUUgSU5ERVggSW5kZXhlc19jb21wb3NpdCBPTiBJbmRleGVzKG9iamVjdFN0b3JlSWQs
IG5hbWUpIiwKLQotICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0b3JlRGF0YSAoaWQgSU5U
RUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5D
RVMgT2JqZWN0U3RvcmUoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBJTlRFR0VSLCBrZXlO
dW1iZXIgSU5URUdFUiwgdmFsdWUgVEVYVCBOT1QgTlVMTCkiLAotICAgICAgICAiQ1JFQVRFIFVO
SVFVRSBJTkRFWCBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0U3RvcmVEYXRhKGtl
eVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIsCi0KLSAgICAgICAg
IkNSRUFURSBUQUJMRSBJbmRleERhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGluZGV4SWQg
SU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIEluZGV4ZXMoaWQpLCBrZXlTdHJpbmcgVEVYVCwg
a2V5RGF0ZSBJTlRFR0VSLCBrZXlOdW1iZXIgSU5URUdFUiwgb2JqZWN0U3RvcmVEYXRhSWQgSU5U
RUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlRGF0YShpZCkpIiwKLSAgICAgICAg
IkNSRUFURSBJTkRFWCBJbmRleERhdGFfY29tcG9zaXQgT04gSW5kZXhEYXRhKGtleVN0cmluZywg
a2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkKSIsCi0gICAgICAgICJDUkVBVEUgSU5ERVggSW5k
ZXhEYXRhX29iamVjdFN0b3JlRGF0YUlkIE9OIEluZGV4RGF0YShvYmplY3RTdG9yZURhdGFJZCki
LAotICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9pbmRleElkIE9OIEluZGV4RGF0YShp
bmRleElkKSIsCi0gICAgICAgIH07Ci0KLSAgICByZXR1cm4gcnVuQ29tbWFuZHMoc3FsaXRlRGF0
YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSk7
Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZU1ldGFEYXRhVGFibGUoU1FMaXRlRGF0YWJhc2UmIHNx
bGl0ZURhdGFiYXNlKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kc1tdID0gewot
ICAgICAgICAiQ1JFQVRFIFRBQkxFIE1ldGFEYXRhIChuYW1lIFRFWFQgUFJJTUFSWSBLRVksIHZh
bHVlIE5PTkUpIiwKLSAgICAgICAgIklOU0VSVCBJTlRPIE1ldGFEYXRhIFZBTFVFUyAoJ3ZlcnNp
b24nLCAxKSIsCi0gICAgfTsKLQotICAgIHJldHVybiBydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFz
ZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKTsKLX0K
LQotc3RhdGljIGJvb2wgZ2V0RGF0YWJhc2VTY2hlbWFWZXJzaW9uKFNRTGl0ZURhdGFiYXNlJiBz
cWxpdGVEYXRhYmFzZSwgaW50KiBkYXRhYmFzZVZlcnNpb24pCi17Ci0gICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00gTWV0YURhdGEgV0hF
UkUgbmFtZSA9ICd2ZXJzaW9uJyIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVz
dWx0T2sgfHwgcXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgKmRhdGFiYXNlVmVyc2lvbiA9IHF1ZXJ5LmdldENvbHVtbkludCgwKTsKLSAg
ICByZXR1cm4gcXVlcnkuZmluYWxpemUoKSA9PSBTUUxSZXN1bHRPazsKLX0KLQotc3RhdGljIGJv
b2wgbWlncmF0ZURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSkKLXsKLSAg
ICBpZiAoIXNxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKCJNZXRhRGF0YSIpKSB7Ci0gICAgICAg
IGlmICghY3JlYXRlTWV0YURhdGFUYWJsZShzcWxpdGVEYXRhYmFzZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGRhdGFiYXNlVmVyc2lvbjsKLSAgICBpZiAo
IWdldERhdGFiYXNlU2NoZW1hVmVyc2lvbihzcWxpdGVEYXRhYmFzZSwgJmRhdGFiYXNlVmVyc2lv
bikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChkYXRhYmFzZVZlcnNpb24gPT0g
MSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKLSAgICAgICAg
ICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RTdG9yZURhdGEyIiwKLSAgICAgICAgICAg
ICJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVEYXRhMiAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwg
b2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQp
LCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBSRUFMLCBrZXlOdW1iZXIgUkVBTCwgdmFsdWUgVEVY
VCBOT1QgTlVMTCkiLAotICAgICAgICAgICAgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlRGF0YTIg
U0VMRUNUICogRlJPTSBPYmplY3RTdG9yZURhdGEiLAotICAgICAgICAgICAgIkRST1AgVEFCTEUg
T2JqZWN0U3RvcmVEYXRhIiwgLy8gVGhpcyBkZXBlbmRzIG9uIFNRTGl0ZSBub3QgZW5mb3JjaW5n
IHJlZmVyZW50aWFsIGNvbnNpc3RlbmN5LgotICAgICAgICAgICAgIkFMVEVSIFRBQkxFIE9iamVj
dFN0b3JlRGF0YTIgUkVOQU1FIFRPIE9iamVjdFN0b3JlRGF0YSIsCi0gICAgICAgICAgICAiQ1JF
QVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0U3RvcmVE
YXRhKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIsCi0gICAg
ICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5kZXhEYXRhMiIsIC8vIFRoaXMgZGVwZW5k
cyBvbiBTUUxpdGUgbm90IGVuZm9yY2luZyByZWZlcmVudGlhbCBjb25zaXN0ZW5jeS4KLSAgICAg
ICAgICAgICJDUkVBVEUgVEFCTEUgSW5kZXhEYXRhMiAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwg
aW5kZXhJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgSW5kZXhlcyhpZCksIGtleVN0cmlu
ZyBURVhULCBrZXlEYXRlIFJFQUwsIGtleU51bWJlciBSRUFMLCBvYmplY3RTdG9yZURhdGFJZCBJ
TlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmVEYXRhKGlkKSkiLAotICAgICAg
ICAgICAgIklOU0VSVCBJTlRPIEluZGV4RGF0YTIgU0VMRUNUICogRlJPTSBJbmRleERhdGEiLAot
ICAgICAgICAgICAgIkRST1AgVEFCTEUgSW5kZXhEYXRhIiwKLSAgICAgICAgICAgICJBTFRFUiBU
QUJMRSBJbmRleERhdGEyIFJFTkFNRSBUTyBJbmRleERhdGEiLAotICAgICAgICAgICAgIkNSRUFU
RSBJTkRFWCBJbmRleERhdGFfY29tcG9zaXQgT04gSW5kZXhEYXRhKGtleVN0cmluZywga2V5RGF0
ZSwga2V5TnVtYmVyLCBpbmRleElkKSIsCi0gICAgICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4
RGF0YV9vYmplY3RTdG9yZURhdGFJZCBPTiBJbmRleERhdGEob2JqZWN0U3RvcmVEYXRhSWQpIiwK
LSAgICAgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2luZGV4SWQgT04gSW5kZXhEYXRh
KGluZGV4SWQpIiwKLSAgICAgICAgICAgICJVUERBVEUgTWV0YURhdGEgU0VUIHZhbHVlID0gMiBX
SEVSRSBuYW1lID0gJ3ZlcnNpb24nIiwKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIXJ1bkNv
bW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBjb21tYW5kcywgc2l6ZW9mKGNvbW1hbmRzKSAvIHNpemVv
Zihjb21tYW5kc1swXSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGRh
dGFiYXNlVmVyc2lvbiA9IDI7Ci0gICAgfQotCi0gICAgaWYgKGRhdGFiYXNlVmVyc2lvbiA9PSAy
KSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSB0aGUgT2JqZWN0U3RvcmVEYXRhLnZhbHVl
IGJlIGEgQkxPQiBpbnN0ZWFkIG9mIFRFWFQuCi0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b21tYW5kc1tdID0gewotICAgICAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIE9iamVjdFN0
b3JlRGF0YSIsIC8vIFRoaXMgZHJvcHMgYXNzb2NpYXRlZCBpbmRpY2VzLgotICAgICAgICAgICAg
IkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9i
amVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwg
a2V5U3RyaW5nIFRFWFQsIGtleURhdGUgUkVBTCwga2V5TnVtYmVyIFJFQUwsIHZhbHVlIEJMT0Ig
Tk9UIE5VTEwpIiwKLSAgICAgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIE9iamVjdFN0b3Jl
RGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlO
dW1iZXIsIG9iamVjdFN0b3JlSWQpIiwKLSAgICAgICAgICAgICJVUERBVEUgTWV0YURhdGEgU0VU
IHZhbHVlID0gMyBXSEVSRSBuYW1lID0gJ3ZlcnNpb24nIiwKLSAgICAgICAgfTsKLQotICAgICAg
ICBpZiAoIXJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBjb21tYW5kcywgc2l6ZW9mKGNvbW1h
bmRzKSAvIHNpemVvZihjb21tYW5kc1swXSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGRhdGFiYXNlVmVyc2lvbiA9IDM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6
Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhC
YXNlLCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJ
REJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCi17Ci0gICAgUmVmUHRyPElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJTUUxpdGVCYWNraW5nU3Rv
cmUoZmlsZUlkZW50aWZpZXIsIGZhY3RvcnkpKSk7Ci0KLSAgICBTdHJpbmcgcGF0aCA9ICI6bWVt
b3J5OiI7IC8vIGluLW1lbW9yeSBTUUxpdGUgZGF0YWJhc2UuCi0gICAgaWYgKCFwYXRoQmFzZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMocGF0aEJhc2UpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYW55IG90aGVyIHRoaW5nIHdlIGNvdWxk
IHBvc3NpYmx5IGRvIHRvIHJlY292ZXIgYXQgdGhpcyBwb2ludD8gSWYgc28sIGRvIGl0IHJhdGhl
ciB0aGFuIGp1c3QgZXJyb3Jpbmcgb3V0LgotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gY3JlYXRlIEluZGV4ZWQgREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBhdGhCYXNlLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgcGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIiKTsKLSAgICB9Ci0KLSAgICBpZiAoIWJhY2tp
bmdTdG9yZS0+bV9kYi5vcGVuKHBhdGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBh
bnkgb3RoZXIgdGhpbmcgd2UgY291bGQgcG9zc2libHkgZG8gdG8gcmVjb3ZlciBhdCB0aGlzIHBv
aW50PyBJZiBzbywgZG8gaXQgcmF0aGVyIHRoYW4ganVzdCBlcnJvcmluZyBvdXQuCi0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgSW5kZXhlZERC
IiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6IEVycm9yIGNoZWNraW5nPwotICAgIGJhY2tpbmdTdG9yZS0+bV9kYi5zZXRNYXhp
bXVtU2l6ZShtYXhpbXVtU2l6ZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5tX2RiLnR1cm5PbkluY3Jl
bWVudGFsQXV0b1ZhY3V1bSgpOwotCi0gICAgaWYgKCFjcmVhdGVUYWJsZXMoYmFja2luZ1N0b3Jl
LT5tX2RiKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtaWdyYXRlRGF0YWJhc2UoYmFj
a2luZ1N0b3JlLT5tX2RiKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2lu
Z1N0b3JlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldERh
dGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpCi17Ci0gICAgQVNTRVJUKGZv
dW5kTmFtZXMuaXNFbXB0eSgpKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAi
U0VMRUNUIG5hbWUgRlJPTSBEYXRhYmFzZXMiKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgd2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cp
Ci0gICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKHF1ZXJ5LmdldENvbHVtblRleHQoMCkpOwotfQot
Ci1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJ
ZCkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YWJhc2VRdWVyeShtX2RiLCAiU0VMRUNUIGlk
LCB2ZXJzaW9uIEZST00gRGF0YWJhc2VzIFdIRVJFIG5hbWUgPSA/Iik7Ci0gICAgaWYgKGRhdGFi
YXNlUXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGRhdGFiYXNlUXVl
cnkuYmluZFRleHQoMSwgbmFtZSk7Ci0gICAgaWYgKGRhdGFiYXNlUXVlcnkuc3RlcCgpICE9IFNR
TFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91bmRJZCA9IGRhdGFi
YXNlUXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgZm91bmRWZXJzaW9uID0gZGF0YWJhc2VR
dWVyeS5nZXRDb2x1bW5UZXh0KDEpOwotCi0gICAgaWYgKGRhdGFiYXNlUXVlcnkuc3RlcCgpID09
IFNRTFJlc3VsdFJvdykKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpCi17Ci0gICAgQVNTRVJUKCFuYW1lLmlzTnVsbCgp
KTsKLSAgICBBU1NFUlQoIXZlcnNpb24uaXNOdWxsKCkpOwotCi0gICAgU3RyaW5nIHNxbCA9IGlu
dmFsaWRSb3dJZCA/ICJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG5hbWUsIGRlc2NyaXB0aW9uLCB2
ZXJzaW9uKSBWQUxVRVMgKD8sICcnLCA/KSIgOiAiVVBEQVRFIERhdGFiYXNlcyBTRVQgbmFtZSA9
ID8sIHZlcnNpb24gPSA/IFdIRVJFIGlkID0gPyI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGIsIHNxbCk7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOwotICAgIHF1ZXJ5LmJpbmRUZXh0KDIs
IHZlcnNpb24pOwotICAgIGlmICghaW52YWxpZFJvd0lkKQotICAgICAgICBxdWVyeS5iaW5kSW50
NjQoMywgcm93SWQpOwotCi0gICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaW52YWxpZFJvd0lkKQotICAgICAgICBy
b3dJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5h
bWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1
dG9JbmNyZW1lbnRGbGFncykKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNF
TEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50IEZST00gT2JqZWN0U3RvcmVz
IFdIRVJFIGRhdGFiYXNlSWQgPSA/Iik7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQoZm91bmROYW1lcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZEtleVBhdGhz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5kQXV0b0luY3JlbWVudEZsYWdzLmlzRW1wdHko
KSk7Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgZGF0YWJhc2VJZCk7Ci0KLSAgICB3aGlsZSAo
cXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBmb3VuZElkcy5hcHBlbmQo
cXVlcnkuZ2V0Q29sdW1uSW50NjQoMCkpOwotICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChxdWVy
eS5nZXRDb2x1bW5UZXh0KDEpKTsKLSAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQocXVlcnku
Z2V0Q29sdW1uVGV4dCgyKSk7Ci0gICAgICAgIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzLmFwcGVu
ZCghIXF1ZXJ5LmdldENvbHVtbkludCgzKSk7Ci0gICAgfQotfQotCi1ib29sIElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBp
bnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZXMgKG5hbWUsIGtleVBhdGgsIGRvQXV0
b0luY3JlbWVudCwgZGF0YWJhc2VJZCkgVkFMVUVTICg/LCA/LCA/LCA/KSIpOwotICAgIGlmIChx
dWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOwotICAgIHF1ZXJ5LmJpbmRUZXh0KDIsIGtleVBh
dGgpOwotICAgIHF1ZXJ5LmJpbmRJbnQoMywgc3RhdGljX2Nhc3Q8aW50PihhdXRvSW5jcmVtZW50
KSk7Ci0gICAgcXVlcnkuYmluZEludDY0KDQsIGRhdGFiYXNlSWQpOwotCi0gICAgaWYgKHF1ZXJ5
LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
c3NpZ25lZE9iamVjdFN0b3JlSWQgPSBtX2RiLmxhc3RJbnNlcnRSb3dJRCgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNv
bnN0IGNoYXIqIHNxbCwgaW50NjRfdCBpZCkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRl
UXVlcnkoZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IGRlbGV0ZVF1ZXJ5LnByZXBhcmUoKSA9PSBT
UUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIg
ZXJyb3IgaGFuZGxpbmcuCi0gICAgZGVsZXRlUXVlcnkuYmluZEludDY0KDEsIGlkKTsKLSAgICBv
ayA9IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVT
RUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KLX0KLQotdm9pZCBJ
REJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKLXsKLSAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhE
YXRhIFdIRVJFIGluZGV4SWQgSU4gKFNFTEVDVCBpZCBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0
U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgZG9EZWxldGUobV9kYiwgIkRFTEVU
RSBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsK
LSAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9i
amVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgZG9EZWxldGUobV9kYiwgIkRF
TEVURSBGUk9NIE9iamVjdFN0b3JlcyBXSEVSRSBpZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsKLX0K
LQotbmFtZXNwYWNlIHsKLWNsYXNzIFNRTGl0ZVJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgSURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNRTGl0ZVJlY29yZElkZW50aWZpZXI+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKCkpOyB9Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1FMaXRlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKGludDY0X3QgaWQpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKGlkKSk7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0gLTE7IH0KLSAgICBp
bnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHZvaWQgc2V0SWQoaW50NjRf
dCBpZCkgeyBtX2lkID0gaWQ7IH0KLXByaXZhdGU6Ci0gICAgU1FMaXRlUmVjb3JkSWRlbnRpZmll
cigpIDogbV9pZCgtMSkgeyB9Ci0gICAgU1FMaXRlUmVjb3JkSWRlbnRpZmllcihpbnQ2NF90IGlk
KSA6IG1faWQoaWQpIHsgfQotICAgIGludDY0X3QgbV9pZDsKLX07Ci19Ci0KLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQotewotICAgIHJldHVy
biBTUUxpdGVSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKLX0KLQotc3RhdGljIFN0cmluZyB3
aGVyZVN5bnRheEZvcktleShjb25zdCBJREJLZXkmIGtleSwgU3RyaW5nIHF1YWxpZmllZFRhYmxl
TmFtZSA9ICIiKQotewotICAgIHN3aXRjaCAoa2V5LnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5
OjpTdHJpbmdUeXBlOgotICAgICAgICByZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0
cmluZyA9ID8gIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwg
IEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCAgIjsKLSAg
ICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKLSAgICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxl
TmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsg
ImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJl
ciA9ID8gICI7Ci0gICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgotICAgICAgICByZXR1cm4gcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRU
YWJsZU5hbWUgKyAia2V5RGF0ZSA9ID8gIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJr
ZXlOdW1iZXIgSVMgTlVMTCAgIjsKLSAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6Ci0gICAgICAg
IHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiAr
IHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmll
ZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCAgIjsKLSAgICB9Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG51bWJl
ciBvZiBpdGVtcyBib3VuZC4KLXN0YXRpYyBpbnQgYmluZEtleVRvUXVlcnkoU1FMaXRlU3RhdGVt
ZW50JiBxdWVyeSwgaW50IGNvbHVtbiwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgc3dpdGNo
IChrZXkudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIHF1
ZXJ5LmJpbmRUZXh0KGNvbHVtbiwga2V5LnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgotICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGNvbHVt
biwga2V5LmRhdGUoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgSURCS2V5OjpOdW1i
ZXJUeXBlOgotICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGNvbHVtbiwga2V5Lm51bWJlcigpKTsK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotc3RhdGljIFN0cmluZyBsb3dlckN1cnNvcldoZXJlRnJhZ21lbnQoY29uc3QgSURC
S2V5JiBrZXksIFN0cmluZyBjb21wYXJpc29uT3BlcmF0b3IsIFN0cmluZyBxdWFsaWZpZWRUYWJs
ZU5hbWUgPSAiIikKLXsKLSAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKLSAgICBjYXNlIElEQktl
eTo6U3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuICI/ICIgKyBjb21wYXJpc29uT3BlcmF0b3Ig
KyAiICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nICBBTkQgICI7Ci0gICAgY2Fz
ZSBJREJLZXk6OkRhdGVUeXBlOgotICAgICAgICByZXR1cm4gIig/ICIgKyBjb21wYXJpc29uT3Bl
cmF0b3IgKyAiICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSAgT1IgTk9UICIgKyBx
dWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwpICBBTkQgICI7Ci0gICAgY2Fz
ZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIHJldHVybiAiKD8gIiArIGNvbXBhcmlzb25P
cGVyYXRvciArICIgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgIE9SICBOT1Qg
IiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgT1IgIE5PVCAiICsg
cXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCkgIEFORCAgIjsKLSAgICBjYXNl
IElEQktleTo6TnVsbFR5cGU6Ci0gICAgICAgIGlmIChjb21wYXJpc29uT3BlcmF0b3IgPT0gIjwi
KQotICAgICAgICAgICAgcmV0dXJuICJOT1QoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlT
dHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMg
TlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMKSAg
QU5EICAiOwotICAgICAgICByZXR1cm4gIiI7IC8vIElmIGl0J3MgPSwgdGhlIHVwcGVyIGJvdW5k
IGhhbGYgd2lsbCBkbyB0aGUgY29uc3RyYWluaW5nLiBJZiBpdCdzIDw9LCB0aGVuIHRoYXQncyBh
IG5vLW9wLgotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7
Ci19Ci0KLXN0YXRpYyBTdHJpbmcgdXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KGNvbnN0IElEQktl
eSYga2V5LCBTdHJpbmcgY29tcGFyaXNvbk9wZXJhdG9yLCBTdHJpbmcgcXVhbGlmaWVkVGFibGVO
YW1lID0gIiIpCi17Ci0gICAgc3dpdGNoIChrZXkudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXk6
OlN0cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiAiKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAi
a2V5U3RyaW5nICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiID8gIE9SICAiICsgcXVhbGlmaWVk
VGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMKSAgQU5EICAiOwotICAgIGNhc2UgSURCS2V5
OjpEYXRlVHlwZToKLSAgICAgICAgcmV0dXJuICIoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJr
ZXlEYXRlICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiID8gT1IgIiArIHF1YWxpZmllZFRhYmxl
TmFtZSArICJrZXlEYXRlIElTIE5VTEwpICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAi
a2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIjsKLSAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToK
LSAgICAgICAgcmV0dXJuICIoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgIiAr
IGNvbXBhcmlzb25PcGVyYXRvciArICIgPyBPUiAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eU51bWJlciBJUyBOVUxMKSAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmlu
ZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxM
ICBBTkQgICI7Ci0gICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAgICBpZiAoY29tcGFy
aXNvbk9wZXJhdG9yID09ICI8IikKLSAgICAgICAgICAgIHJldHVybiAiMCAhPSAwICBBTkQgICI7
Ci0gICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwg
IEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwgIEFORCAgIiAr
IHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCAgQU5EICAiOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIiI7Ci19Ci0KLVN0cmluZyBJ
REJTUUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1Qga2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZh
bHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCAiICsg
d2hlcmVTeW50YXhGb3JLZXkoa2V5KSk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgYmluZEtleVRvUXVlcnkocXVlcnksIDIsIGtleSk7Ci0gICAgaWYgKHF1ZXJ5LnN0
ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgLy8gTnVsbCBT
dHJpbmcgbWVhbnMgcmVjb3JkIG5vdCBmb3VuZC4KLQotICAgIEFTU0VSVCgoa2V5LnR5cGUoKSA9
PSBJREJLZXk6OlN0cmluZ1R5cGUpICE9IHF1ZXJ5LmlzQ29sdW1uTnVsbCgwKSk7Ci0gICAgQVNT
RVJUKChrZXkudHlwZSgpID09IElEQktleTo6RGF0ZVR5cGUpICE9IHF1ZXJ5LmlzQ29sdW1uTnVs
bCgxKSk7Ci0gICAgQVNTRVJUKChrZXkudHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgIT0g
cXVlcnkuaXNDb2x1bW5OdWxsKDIpKTsKLQotICAgIFN0cmluZyByZWNvcmQgPSBxdWVyeS5nZXRD
b2x1bW5CbG9iQXNTdHJpbmcoMyk7Ci0gICAgQVNTRVJUKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1
bHRSb3cpOwotCi0gICAgcmV0dXJuIHJlY29yZDsKLX0KLQotc3RhdGljIHZvaWQgYmluZEtleVRv
UXVlcnlXaXRoTnVsbHMoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGJhc2VDb2x1bW4sIGNv
bnN0IElEQktleSYga2V5KQotewotICAgIHN3aXRjaCAoa2V5LnR5cGUoKSkgewotICAgIGNhc2Ug
SURCS2V5OjpTdHJpbmdUeXBlOgotICAgICAgICBxdWVyeS5iaW5kVGV4dChiYXNlQ29sdW1uICsg
MCwga2V5LnN0cmluZygpKTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDEp
OwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURCS2V5OjpEYXRlVHlwZToKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFz
ZUNvbHVtbiArIDApOwotICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGJhc2VDb2x1bW4gKyAxLCBr
ZXkuZGF0ZSgpKTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKLSAgICAgICAgcXVlcnku
YmluZE51bGwoYmFzZUNvbHVtbiArIDApOwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29s
dW1uICsgMSk7Ci0gICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoYmFzZUNvbHVtbiArIDIsIGtleS5u
dW1iZXIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAg
ICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDApOwotICAgICAgICBxdWVyeS5iaW5k
TnVsbChiYXNlQ29sdW1uICsgMSk7Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4g
KyAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotfQotCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0T2Jq
ZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIFNRTGl0ZVJlY29yZElkZW50aWZpZXIqIHNxbGl0
ZVJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxTUUxpdGVSZWNvcmRJZGVudGlmaWVyKj4o
cmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICBTdHJpbmcgc3FsID0gc3FsaXRlUmVjb3JkSWRlbnRp
Zmllci0+aXNWYWxpZCgpID8gIlVQREFURSBPYmplY3RTdG9yZURhdGEgU0VUIGtleVN0cmluZyA9
ID8sIGtleURhdGUgPSA/LCBrZXlOdW1iZXIgPSA/LCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/Igot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiSU5T
RVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhIChrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwg
dmFsdWUsIG9iamVjdFN0b3JlSWQpIFZBTFVFUyAoPywgPywgPywgPywgPykiOwotICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBzcWwpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJpbmRLZXlUb1F1ZXJ5
V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOwotICAgIHF1ZXJ5LmJpbmRCbG9iKDQsIHZhbHVlKTsK
LSAgICBpZiAoc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aXNWYWxpZCgpKQotICAgICAgICBxdWVy
eS5iaW5kSW50NjQoNSwgc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aWQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBpZiAocXVl
cnkuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aXNWYWxpZCgpKQotICAgICAgICBzcWxpdGVS
ZWNvcmRJZGVudGlmaWVyLT5zZXRJZChtX2RiLmxhc3RJbnNlcnRSb3dJRCgpKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RT
dG9yZShpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAgZG9EZWxldGUobV9k
YiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURhdGFJZCBJTiAoU0VM
RUNUIGlkIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/KSIsIG9i
amVjdFN0b3JlSWQpOwotICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBPYmplY3RTdG9y
ZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9p
ZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIGNvbnN0IFNRTGl0ZVJlY29yZElkZW50aWZpZXIq
IHNxbGl0ZVJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBTUUxpdGVSZWNvcmRJ
ZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKHNxbGl0ZVJlY29yZElk
ZW50aWZpZXItPmlzVmFsaWQoKSk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgb3NRdWVyeShtX2Ri
LCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIGlkID0gPyIpOwotICAgIGJvb2wg
b2sgPSBvc1F1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBvc1F1ZXJ5
LmJpbmRJbnQ2NCgxLCBzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pZCgpKTsKLQotICAgIG9rID0g
b3NRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7Ci19Ci0KLWRvdWJsZSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50
TnVtYmVyKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVDVCBtYXgoa2V5TnVtYmVyKSArIDEgRlJPTSBPYmplY3RT
dG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5EIGtleVN0cmluZyBJUyBOVUxMIEFO
RCBrZXlEYXRlIElTIE5VTEwiKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIHF1ZXJ5LmJpbmRJ
bnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsKLQotICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVz
dWx0Um93IHx8IHF1ZXJ5LmlzQ29sdW1uTnVsbCgwKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAg
ICByZXR1cm4gcXVlcnkuZ2V0Q29sdW1uRG91YmxlKDApOwotfQotCi1ib29sIElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90LCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
IGZvdW5kUmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBz
cWxpdGVSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8U1FMaXRlUmVjb3JkSWRlbnRpZmll
cio+KGZvdW5kUmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJT
RUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5E
ICIpICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYiwgc3FsKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9r
OwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5k
bGluZz8KLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsKLSAgICBiaW5k
S2V5VG9RdWVyeShxdWVyeSwgMiwga2V5KTsKLQotICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FM
UmVzdWx0Um93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzcWxpdGVSZWNvcmRJZGVu
dGlmaWVyLT5zZXRJZChxdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNv
cmQoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxi
YWNrJiBjYWxsYmFjaykKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVD
VCBpZCwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8i
KTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJZCk7Ci0KLSAg
ICB3aGlsZSAocXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBpbnQ2NF90
IG9iamVjdFN0b3JlRGF0YUlkID0gcXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgIFN0
cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JBc1N0cmluZygxKTsKLSAgICAgICAgUmVm
UHRyPFNRTGl0ZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBTUUxpdGVSZWNv
cmRJZGVudGlmaWVyOjpjcmVhdGUob2JqZWN0U3RvcmVEYXRhSWQpOwotICAgICAgICBpZiAoIWNh
bGxiYWNrLmNhbGxiYWNrKHJlY29yZElkZW50aWZpZXIuZ2V0KCksIHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJ
REJTUUxpdGVCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRV
bmlxdWVGbGFncykKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVDVCBp
ZCwgbmFtZSwga2V5UGF0aCwgaXNVbmlxdWUgRlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0b3Jl
SWQgPSA/Iik7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsK
LSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxp
bmc/Ci0KLSAgICBBU1NFUlQoZm91bmRJZHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRO
YW1lcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZEtleVBhdGhzLmlzRW1wdHkoKSk7Ci0g
ICAgQVNTRVJUKGZvdW5kVW5pcXVlRmxhZ3MuaXNFbXB0eSgpKTsKLQotICAgIHF1ZXJ5LmJpbmRJ
bnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsKLQotICAgIHdoaWxlIChxdWVyeS5zdGVwKCkgPT0gU1FM
UmVzdWx0Um93KSB7Ci0gICAgICAgIGZvdW5kSWRzLmFwcGVuZChxdWVyeS5nZXRDb2x1bW5JbnQ2
NCgwKSk7Ci0gICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKHF1ZXJ5LmdldENvbHVtblRleHQoMSkp
OwotICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChxdWVyeS5nZXRDb2x1bW5UZXh0KDIpKTsK
LSAgICAgICAgZm91bmRVbmlxdWVGbGFncy5hcHBlbmQoISFxdWVyeS5nZXRDb2x1bW5JbnQoMykp
OwotICAgIH0KLX0KLQotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGlu
dDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpCi17Ci0gICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBJbmRleGVzIChvYmplY3RT
dG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSkgVkFMVUVTICg/LCA/LCA/LCA/KSIpOwot
ICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsKLSAgICBxdWVy
eS5iaW5kVGV4dCgyLCBuYW1lKTsKLSAgICBxdWVyeS5iaW5kVGV4dCgzLCBrZXlQYXRoKTsKLSAg
ICBxdWVyeS5iaW5kSW50KDQsIHN0YXRpY19jYXN0PGludD4oaXNVbmlxdWUpKTsKLQotICAgIGlm
IChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaW5kZXhJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90LCBp
bnQ2NF90LCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBG
Uk9NIEluZGV4ZXMgV0hFUkUgaWQgPSA/IiwgaW5kZXhJZCk7Ci0gICAgZG9EZWxldGUobV9kYiwg
IkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkID0gPyIsIGluZGV4SWQpOwotfQot
Ci1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0
X3QsIGludDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBjb25z
dCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBzcWxpdGVSZWNvcmRJZGVudGlmaWVyID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwot
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBJbmRleERhdGEg
KGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkLCBvYmplY3RTdG9yZURhdGFJ
ZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJpbmRLZXlUb1F1ZXJ5
V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOwotICAgIHF1ZXJ5LmJpbmRJbnQ2NCg0LCBpbmRleElk
KTsKLSAgICBxdWVyeS5iaW5kSW50NjQoNSwgc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aWQoKSk7
Ci0KLSAgICByZXR1cm4gcXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7Ci19Ci0KLWJvb2wg
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwg
aW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgY29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmll
ciogc3FsaXRlUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IFNRTGl0ZVJlY29y
ZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBx
dWVyeShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0b3JlRGF0YUlk
ID0gPyBBTkQgaW5kZXhJZCA9ID8iKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJl
c3VsdE9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwg
c3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aWQoKSk7Ci0gICAgcXVlcnkuYmluZEludDY0KDIsIGlu
ZGV4SWQpOwotICAgIHJldHVybiBxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLX0KLQot
U3RyaW5nIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCwg
aW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBTdHJp
bmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgIikKLSAgICAgICAgICAgICAgICAgKyAiT2JqZWN0U3Rv
cmVEYXRhLnZhbHVlICIKLSAgICAgICAgICAgICAgICAgKyAiRlJPTSBJbmRleERhdGEgSU5ORVIg
Sk9JTiBPYmplY3RTdG9yZURhdGEgT04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0YUlkID0gT2Jq
ZWN0U3RvcmVEYXRhLmlkICIKLSAgICAgICAgICAgICAgICAgKyAiV0hFUkUgSW5kZXhEYXRhLmlu
ZGV4SWQgPSA/ICBBTkQgICIgKyB3aGVyZVN5bnRheEZvcktleShrZXksICJJbmRleERhdGEuIikK
LSAgICAgICAgICAgICAgICAgKyAiT1JERVIgQlkgSW5kZXhEYXRhLmlkIExJTUlUIDEiOyAvLyBP
cmRlciBieSBpbnNlcnRpb24gb3JkZXIgd2hlbiBhbGwgZWxzZSBmYWlscy4KLSAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkobV9kYiwgc3FsKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJl
dHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpbmRleElkKTsK
LSAgICBiaW5kS2V5VG9RdWVyeShxdWVyeSwgMiwga2V5KTsKLQotICAgIGlmIChxdWVyeS5zdGVw
KCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBTdHJp
bmcgZm91bmRWYWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JBc1N0cmluZygwKTsKLSAgICBBU1NF
UlQocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdyk7Ci0gICAgcmV0dXJuIGZvdW5kVmFsdWU7
Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4ga2V5RnJvbVF1ZXJ5KFNRTGl0ZVN0YXRl
bWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uKQotewotICAgIGlmIChxdWVyeS5jb2x1bW5Db3Vu
dCgpIDw9IGJhc2VDb2x1bW4pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFxdWVyeS5p
c0NvbHVtbk51bGwoYmFzZUNvbHVtbikpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0
cmluZyhxdWVyeS5nZXRDb2x1bW5UZXh0KGJhc2VDb2x1bW4pKTsKLQotICAgIGlmICghcXVlcnku
aXNDb2x1bW5OdWxsKGJhc2VDb2x1bW4gKyAxKSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3Jl
YXRlRGF0ZShxdWVyeS5nZXRDb2x1bW5Eb3VibGUoYmFzZUNvbHVtbiArIDEpKTsKLQotICAgIGlm
ICghcXVlcnkuaXNDb2x1bW5OdWxsKGJhc2VDb2x1bW4gKyAyKSkKLSAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlTnVtYmVyKHF1ZXJ5LmdldENvbHVtbkRvdWJsZShiYXNlQ29sdW1uICsgMikp
OwotCi0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVsbCgpOwotfQotCi1QYXNzUmVmUHRyPElE
QktleT4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRf
dCwgaW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBT
dHJpbmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgIikKLSAgICAgICAgICAgICAgICAgKyAiT2JqZWN0
U3RvcmVEYXRhLmtleVN0cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3Jl
RGF0YS5rZXlOdW1iZXIgIgotICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5F
UiBKT0lOIE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBP
YmplY3RTdG9yZURhdGEuaWQgIgotICAgICAgICAgICAgICAgICArICJXSEVSRSBJbmRleERhdGEu
aW5kZXhJZCA9ID8gIEFORCAgIiArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSwgIkluZGV4RGF0YS4i
KQotICAgICAgICAgICAgICAgICArICJPUkRFUiBCWSBJbmRleERhdGEuaWQgTElNSVQgMSI7IC8v
IE9yZGVyIGJ5IGluc2VydGlvbiBvcmRlciB3aGVuIGFsbCBlbHNlIGZhaWxzLgotICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBzcWwpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTog
QmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIGluZGV4SWQp
OwotICAgIGJpbmRLZXlUb1F1ZXJ5KHF1ZXJ5LCAyLCBrZXkpOwotCi0gICAgaWYgKHF1ZXJ5LnN0
ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPElE
QktleT4gZm91bmRLZXkgPSBrZXlGcm9tUXVlcnkocXVlcnksIDApOwotICAgIEFTU0VSVChxdWVy
eS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KTsKLSAgICByZXR1cm4gZm91bmRLZXkucmVsZWFzZSgp
OwotfQotCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2
NF90LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJl
ZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCi17Ci0gICAgU3RyaW5nIHNxbCA9IFN0cmlu
ZygiU0VMRUNUIGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IEFORCAiKSArIHdo
ZXJlU3ludGF4Rm9yS2V5KGluZGV4S2V5KTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9k
Yiwgc3FsKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwot
ICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpbmRleElkKTsKLSAgICBiaW5kS2V5VG9RdWVy
eShxdWVyeSwgMiwgaW5kZXhLZXkpOwotCi0gICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1
bHRSb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvdW5kUHJpbWFyeUtleSA9IGdl
dFByaW1hcnlLZXlWaWFJbmRleCgwLCAwLCBpbmRleElkLCBpbmRleEtleSk7Ci0gICAgQVNTRVJU
KGZvdW5kUHJpbWFyeUtleSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIEN1cnNvckltcGxDb21tb24gOiBwdWJsaWMgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpD
dXJzb3IgewotcHVibGljOgotICAgIEN1cnNvckltcGxDb21tb24oU1FMaXRlRGF0YWJhc2UmIHNx
bGl0ZURhdGFiYXNlLCBTdHJpbmcgcXVlcnksIGJvb2wgdW5pcXVlbmVzc0NvbnN0cmFpbnQsIGJv
b2wgaXRlcmF0ZUZvcndhcmQpCi0gICAgICAgIDogbV9xdWVyeShzcWxpdGVEYXRhYmFzZSwgcXVl
cnkpCi0gICAgICAgICwgbV9kYihzcWxpdGVEYXRhYmFzZSkKLSAgICAgICAgLCBtX3VuaXF1ZW5l
c3NDb25zdHJhaW50KHVuaXF1ZW5lc3NDb25zdHJhaW50KQotICAgICAgICAsIG1faXRlcmF0ZUZv
cndhcmQoaXRlcmF0ZUZvcndhcmQpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5DdXJzb3JJ
bXBsQ29tbW9uKCkge30KLQotICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCi0gICAgdmly
dHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5Kik7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERh
dGFJZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IG1fcXVlcnkuZmluYWxpemUo
KTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBjdXJyZW50Um93RXhpc3RzKCkgPSAwOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IG1f
cXVlcnk7Ci0KLXByb3RlY3RlZDoKLSAgICBTUUxpdGVEYXRhYmFzZSYgbV9kYjsKLSAgICBib29s
IG1fdW5pcXVlbmVzc0NvbnN0cmFpbnQ7Ci0gICAgYm9vbCBtX2l0ZXJhdGVGb3J3YXJkOwotICAg
IGludDY0X3QgbV9jdXJyZW50SWQ7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5Owot
fTsKLQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktl
eSoga2V5KQotewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChtX3F1ZXJ5LnN0ZXAo
KSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
UmVmUHRyPElEQktleT4gb2xkS2V5ID0gbV9jdXJyZW50S2V5OwotICAgICAgICBsb2FkQ3VycmVu
dFJvdygpOwotCi0gICAgICAgIC8vIFNraXAgaWYgdGhpcyBlbnRyeSBoYXMgYmVlbiBkZWxldGVk
IGZyb20gdGhlIG9iamVjdCBzdG9yZS4KLSAgICAgICAgaWYgKCFjdXJyZW50Um93RXhpc3RzKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiBhIGtleSB3YXMgc3VwcGxp
ZWQsIHdlIG11c3QgbG9vcCB1bnRpbCB3ZSBmaW5kIGEga2V5IGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0byBpdCAob3IgaGl0IHRoZSBlbmQpLgotICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAg
ICBpZiAobV9pdGVyYXRlRm9yd2FyZCkgewotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRL
ZXktPmlzTGVzc1RoYW4oa2V5KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChrZXktPmlzTGVzc1RoYW4obV9j
dXJyZW50S2V5LmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgdW5pcXVl
bmVzcyBjb25zdHJhaW50LCB3ZSBjYW4gc3RvcCBub3cuCi0gICAgICAgIGlmICghbV91bmlxdWVu
ZXNzQ29uc3RyYWludCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIW1fY3VycmVu
dEtleS0+aXNFcXVhbChvbGRLZXkuZ2V0KCkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIE9iamVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1
YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoKLSAgICBPYmplY3RTdG9yZUN1cnNvcklt
cGwoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlLCBTdHJpbmcgcXVlcnksIGJvb2wgdW5p
cXVlbmVzc0NvbnN0cmFpbnQsIGJvb2wgaXRlcmF0ZUZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29y
SW1wbENvbW1vbihzcWxpdGVEYXRhYmFzZSwgcXVlcnksIHVuaXF1ZW5lc3NDb25zdHJhaW50LCBp
dGVyYXRlRm9yd2FyZCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbi4K
LSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IHJldHVybiBTUUxpdGVS
ZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUobV9jdXJyZW50SWQpOyB9Ci0gICAgdmlydHVhbCBpbnQ2
NF90IGluZGV4RGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVu
dFJvd0V4aXN0cygpOwotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKLX07
Ci0KLXZvaWQgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAg
bV9jdXJyZW50SWQgPSBtX3F1ZXJ5LmdldENvbHVtbkludDY0KDApOwotICAgIG1fY3VycmVudEtl
eSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCAxKTsKLSAgICBtX2N1cnJlbnRWYWx1ZSA9IG1fcXVl
cnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDQpOwotfQotCi1ib29sIE9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6Y3VycmVudFJvd0V4aXN0cygpCi17Ci0gICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQg
RlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
c3RhdGVtZW50KG1fZGIsIHNxbCk7Ci0KLSAgICBib29sIG9rID0gc3RhdGVtZW50LnByZXBhcmUo
KSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBzdGF0
ZW1lbnQuYmluZEludDY0KDEsIG1fY3VycmVudElkKTsKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxSZXN1bHRSb3c7Ci19Ci0KLWNsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1
YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoKLSAgICBJbmRleEtleUN1cnNvckltcGwo
U1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlLCBTdHJpbmcgcXVlcnksIGJvb2wgdW5pcXVl
bmVzc0NvbnN0cmFpbnQsIGJvb2wgaXRlcmF0ZUZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29ySW1w
bENvbW1vbihzcWxpdGVEYXRhYmFzZSwgcXVlcnksIHVuaXF1ZW5lc3NDb25zdHJhaW50LCBpdGVy
YXRlRm9yd2FyZCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJl
bnRQcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVu
dFJvd0V4aXN0cygpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFBy
aW1hcnlLZXk7Ci19OwotCi12b2lkIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3co
KQotewotICAgIG1fY3VycmVudElkID0gbV9xdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICBt
X2N1cnJlbnRLZXkgPSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgMSk7Ci0gICAgbV9jdXJyZW50UHJp
bWFyeUtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCA0KTsKLX0KLQotYm9vbCBJbmRleEtleUN1
cnNvckltcGw6OmN1cnJlbnRSb3dFeGlzdHMoKQotewotICAgIFN0cmluZyBzcWwgPSAiU0VMRUNU
IGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGlkID0gPyI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RiLCBzcWwpOwotCi0gICAgYm9vbCBvayA9IHN0YXRlbWVudC5wcmVwYXJlKCkg
PT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgxLCBtX2N1cnJlbnRJZCk7Ci0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVw
KCkgPT0gU1FMUmVzdWx0Um93OwotfQotCi1jbGFzcyBJbmRleEN1cnNvckltcGwgOiBwdWJsaWMg
Q3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgSW5kZXhDdXJzb3JJbXBsKFNRTGl0ZURh
dGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgU3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1ZW5lc3NDb25z
dHJhaW50LCBib29sIGl0ZXJhdGVGb3J3YXJkKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24o
c3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB1bmlxdWVuZXNzQ29uc3RyYWludCwgaXRlcmF0ZUZvcndh
cmQpCi0gICAgewotICAgIH0KLQotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50UHJpbWFy
eUtleTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4gbV9jdXJyZW50VmFs
dWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0
YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJl
bnRSb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygpOwotCi1wcml2YXRl
OgotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlLZXk7Ci0gICAgU3RyaW5nIG1f
Y3VycmVudFZhbHVlOwotfTsKLQotdm9pZCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93
KCkKLXsKLSAgICBtX2N1cnJlbnRJZCA9IG1fcXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAg
bV9jdXJyZW50S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDEpOwotICAgIG1fY3VycmVudFZh
bHVlID0gbV9xdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoNCk7Ci0gICAgbV9jdXJyZW50UHJp
bWFyeUtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCA1KTsKLX0KLQotYm9vbCBJbmRleEN1cnNv
ckltcGw6OmN1cnJlbnRSb3dFeGlzdHMoKQotewotICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlk
IEZST00gSW5kZXhEYXRhIFdIRVJFIGlkID0gPyI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RiLCBzcWwpOwotCi0gICAgYm9vbCBvayA9IHN0YXRlbWVudC5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgc3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBtX2N1cnJlbnRJZCk7Ci0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkg
PT0gU1FMUmVzdWx0Um93OwotfQotCi19IC8vIG5hbWVzcGFjZQotCi1QYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9y
ZUN1cnNvcihpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIGJvb2wgbG93
ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9
IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwotCi0gICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQs
IGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSAiOwotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBzcWwgKz0gbG93ZXJDdXJz
b3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+bG93ZXIoKSwgcmFuZ2UtPmxvd2VyT3BlbigpID8gIjwi
IDogIjw9Iik7Ci0gICAgaWYgKHVwcGVyQm91bmQpCi0gICAgICAgIHNxbCArPSB1cHBlckN1cnNv
cldoZXJlRnJhZ21lbnQoKnJhbmdlLT51cHBlcigpLCByYW5nZS0+dXBwZXJPcGVuKCkgPyAiPCIg
OiAiPD0iKTsKLSAgICBzcWwgKz0gIm9iamVjdFN0b3JlSWQgPSA/IE9SREVSIEJZICI7Ci0KLSAg
ICBpZiAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vy
c29yOjpORVhUX05PX0RVUExJQ0FURSkKLSAgICAgICAgc3FsICs9ICJrZXlTdHJpbmcsIGtleURh
dGUsIGtleU51bWJlciI7Ci0gICAgZWxzZQotICAgICAgICBzcWwgKz0gImtleVN0cmluZyBERVND
LCBrZXlEYXRlIERFU0MsIGtleU51bWJlciBERVNDIjsKLQotICAgIFJlZlB0cjxPYmplY3RTdG9y
ZUN1cnNvckltcGw+IGN1cnNvciA9IGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwo
bV9kYiwgc3FsLCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBk
aXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVj
dGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpKTsKLQotICAgIGJvb2wgb2sgPSBjdXJzb3ItPm1fcXVl
cnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIGludCBjdXJyZW50Q29sdW1u
ID0gMTsKLSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgY3VycmVudENvbHVtbiArPSBiaW5k
S2V5VG9RdWVyeShjdXJzb3ItPm1fcXVlcnksIGN1cnJlbnRDb2x1bW4sICpyYW5nZS0+bG93ZXIo
KSk7Ci0gICAgaWYgKHVwcGVyQm91bmQpCi0gICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gYmluZEtl
eVRvUXVlcnkoY3Vyc29yLT5tX3F1ZXJ5LCBjdXJyZW50Q29sdW1uLCAqcmFuZ2UtPnVwcGVyKCkp
OwotICAgIGN1cnNvci0+bV9xdWVyeS5iaW5kSW50NjQoY3VycmVudENvbHVtbiwgb2JqZWN0U3Rv
cmVJZCk7Ci0KLSAgICBpZiAoY3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOwotICAg
IHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpbnQ2
NF90LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIFN0cmluZyBzcWwgPSBTdHJp
bmcoIlNFTEVDVCBJbmRleERhdGEuaWQsIEluZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5r
ZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVyLCAiKQotICAgICAgICAgICAgICAgICArICgiT2Jq
ZWN0U3RvcmVEYXRhLmtleVN0cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0
b3JlRGF0YS5rZXlOdW1iZXIgIikKLSAgICAgICAgICAgICAgICAgKyAiRlJPTSBJbmRleERhdGEg
SU5ORVIgSk9JTiBPYmplY3RTdG9yZURhdGEgT04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0YUlk
ID0gT2JqZWN0U3RvcmVEYXRhLmlkIFdIRVJFICI7Ci0KLSAgICBib29sIGxvd2VyQm91bmQgPSBy
YW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+dXBwZXIoKTsKLQotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBzcWwgKz0gbG93
ZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+bG93ZXIoKSwgcmFuZ2UtPmxvd2VyT3Blbigp
ID8gIjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAg
ICAgc3FsICs9IHVwcGVyQ3Vyc29yV2hlcmVGcmFnbWVudCgqcmFuZ2UtPnVwcGVyKCksIHJhbmdl
LT51cHBlck9wZW4oKSA/ICI8IiA6ICI8PSIsICJJbmRleERhdGEuIik7Ci0gICAgc3FsICs9ICJJ
bmRleERhdGEuaW5kZXhJZCA9ID8gT1JERVIgQlkgIjsKLQotICAgIGlmIChkaXJlY3Rpb24gPT0g
SURCQ3Vyc29yOjpORVhUIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElD
QVRFKQotICAgICAgICBzcWwgKz0gIkluZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlE
YXRlLCBJbmRleERhdGEua2V5TnVtYmVyLCBJbmRleERhdGEuaWQiOwotICAgIGVsc2UKLSAgICAg
ICAgc3FsICs9ICJJbmRleERhdGEua2V5U3RyaW5nIERFU0MsIEluZGV4RGF0YS5rZXlEYXRlIERF
U0MsIEluZGV4RGF0YS5rZXlOdW1iZXIgREVTQywgSW5kZXhEYXRhLmlkIERFU0MiOwotCi0gICAg
UmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gYWRvcHRSZWYobmV3IEluZGV4S2V5
Q3Vyc29ySW1wbChtX2RiLCBzcWwsIGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQ
TElDQVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwg
ZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCkpOwotCi0gICAgYm9vbCBvayA9IGN1cnNvci0+
bV9xdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgaW50IGluZGV4Q29s
dW1uID0gMTsKLSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgaW5kZXhDb2x1bW4gKz0gYmlu
ZEtleVRvUXVlcnkoY3Vyc29yLT5tX3F1ZXJ5LCBpbmRleENvbHVtbiwgKnJhbmdlLT5sb3dlcigp
KTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAgICAgaW5kZXhDb2x1bW4gKz0gYmluZEtleVRv
UXVlcnkoY3Vyc29yLT5tX3F1ZXJ5LCBpbmRleENvbHVtbiwgKnJhbmdlLT51cHBlcigpKTsKLSAg
ICBjdXJzb3ItPm1fcXVlcnkuYmluZEludDY0KGluZGV4Q29sdW1uLCBpbmRleElkKTsKLQotICAg
IGlmIChjdXJzb3ItPm1fcXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBjdXJzb3ItPmxvYWRDdXJyZW50Um93KCk7Ci0gICAgcmV0dXJuIGN1cnNv
ci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QsIGludDY0X3QsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUIEluZGV4
RGF0YS5pZCwgSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4RGF0
YS5rZXlOdW1iZXIsICIpCi0gICAgICAgICAgICAgICAgICsgKCJPYmplY3RTdG9yZURhdGEudmFs
dWUsIE9iamVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlEYXRlLCBP
YmplY3RTdG9yZURhdGEua2V5TnVtYmVyICIpCi0gICAgICAgICAgICAgICAgICsgIkZST00gSW5k
ZXhEYXRhIElOTkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmplY3RTdG9y
ZURhdGFJZCA9IE9iamVjdFN0b3JlRGF0YS5pZCBXSEVSRSAiOwotCi0gICAgYm9vbCBsb3dlckJv
dW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPnVwcGVyKCk7Ci0KLSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgc3Fs
ICs9IGxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVudCgqcmFuZ2UtPmxvd2VyKCksIHJhbmdlLT5sb3dl
ck9wZW4oKSA/ICI8IiA6ICI8PSIsICJJbmRleERhdGEuIik7Ci0gICAgaWYgKHVwcGVyQm91bmQp
Ci0gICAgICAgIHNxbCArPSB1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQoKnJhbmdlLT51cHBlcigp
LCByYW5nZS0+dXBwZXJPcGVuKCkgPyAiPCIgOiAiPD0iLCAiSW5kZXhEYXRhLiIpOwotICAgIHNx
bCArPSAiSW5kZXhEYXRhLmluZGV4SWQgPSA/IE9SREVSIEJZICI7Ci0KLSAgICBpZiAoZGlyZWN0
aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05P
X0RVUExJQ0FURSkKLSAgICAgICAgc3FsICs9ICJJbmRleERhdGEua2V5U3RyaW5nLCBJbmRleERh
dGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgSW5kZXhEYXRhLmlkIjsKLSAgICBlbHNl
Ci0gICAgICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZyBERVNDLCBJbmRleERhdGEua2V5
RGF0ZSBERVNDLCBJbmRleERhdGEua2V5TnVtYmVyIERFU0MsIEluZGV4RGF0YS5pZCBERVNDIjsK
LQotICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNvciA9IGFkb3B0UmVmKG5ldyBJbmRl
eEN1cnNvckltcGwobV9kYiwgc3FsLCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RV
UExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVj
dGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpKTsKLQotICAgIGJvb2wgb2sgPSBjdXJzb3ItPm1fcXVl
cnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIGludCBpbmRleENvbHVtbiA9
IDE7Ci0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIGluZGV4Q29sdW1uICs9IGJpbmRLZXlU
b1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+bG93ZXIoKSk7Ci0g
ICAgaWYgKHVwcGVyQm91bmQpCi0gICAgICAgIGluZGV4Q29sdW1uICs9IGJpbmRLZXlUb1F1ZXJ5
KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+dXBwZXIoKSk7Ci0gICAgY3Vy
c29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChpbmRleENvbHVtbiwgaW5kZXhJZCk7Ci0KLSAgICBpZiAo
Y3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOwotICAgIHJldHVybiBjdXJzb3IucmVs
ZWFzZSgpOwotfQotCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhp
c3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHBhdGhCYXNlKQotewotICAgIFN0cmluZyBwYXRoID0gIjptZW1vcnk6Ijsg
Ly8gaW4tbWVtb3J5IFNRTGl0ZSBkYXRhYmFzZS4KLSAgICBpZiAoIXBhdGhCYXNlLmlzRW1wdHko
KSkKLSAgICAgICAgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2Vj
dXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIiKTsKLSAgICBT
UUxpdGVEYXRhYmFzZSBkYjsKLSAgICBpZiAoIWRiLm9wZW4ocGF0aCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KGRiLCAiU0VMRUNU
IGlkLCB2ZXJzaW9uIEZST00gRGF0YWJhc2VzIFdIRVJFIG5hbWUgPSA/Iik7Ci0gICAgaWYgKGRh
dGFiYXNlUXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhYmFzZVF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOwotICAgIHJldHVybiAo
ZGF0YWJhc2VRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotY2xhc3MgVHJhbnNhY3Rpb25JbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24gewotcHVibGljOgotICAgIFRyYW5zYWN0aW9uSW1wbChTUUxpdGVEYXRhYmFzZSYgZGIp
Ci0gICAgICAgIDogbV90cmFuc2FjdGlvbihkYikKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbgotICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpIHsgbV90
cmFuc2FjdGlvbi5iZWdpbigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpIHsgbV90cmFu
c2FjdGlvbi5jb21taXQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpIHsgbV90cmFu
c2FjdGlvbi5yb2xsYmFjaygpOyB9Ci0KLXByaXZhdGU6Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb24g
bV90cmFuc2FjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLVBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFu
c2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbkltcGwobV9k
YikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FM
aXRlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tp
bmdTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTRiYWFiZDJhOTAwMjAx
NzdhMDM0YmQ3N2JiZTQzMGEyMGUzZTRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0
b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJT
UUxpdGVCYWNraW5nU3RvcmVfaAotI2RlZmluZSBJREJTUUxpdGVCYWNraW5nU3RvcmVfaAotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOwotCi1jbGFzcyBJREJTUUxpdGVCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9w
ZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBpbnQ2NF90IG1heGlt
dW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZElt
cGwqKTsKLSAgICB2aXJ0dWFsIH5JREJTUUxpdGVCYWNraW5nU3RvcmUoKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7Ci0gICAgdmlydHVh
bCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZs
YWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
Zmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3Jl
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0
QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRV
bmlxdWVGbGFncyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFG
b3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyKik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRP
YmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmly
dHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVm
UHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24p
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rp
b24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7Ci0gICAgdmlydHVhbCBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKCkgY29uc3QgeyByZXR1
cm4gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OlNRTGl0ZUJhY2tpbmdTdG9yZTsgfQotCi0g
ICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsKLQotcHJpdmF0ZToKLSAgICBJ
REJTUUxpdGVCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqKTsKLQotICAgIFNRTGl0ZURhdGFiYXNlIG1fZGI7Ci0gICAgU3RyaW5nIG1f
aWRlbnRpZmllcjsKLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURC
U1FMaXRlQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWZhMmYw
YTg2ODM5NDY0OTQ2Mjc4YWRiNDU0YzRlZjU5YTQ1OTIyZS4uODdmZWMzY2U5MDcxOGMzMzNhMzk3
ZTdlNjYwMTVhM2Q4M2FlMWY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNiBAQAorMjAxMS0xMC0wNyAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIEluZGV4ZWREQjogUmVtb3ZlIFNRTGl0ZSBiYWNraW5nIHN0b3JlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB0aGUgU1FMaXRl
IGJhY2tpbmcgc3RvcmUgaW1wbGVtZW50YXRpb247IGl0IGlzIG5vdCB1c2VkIGFueW1vcmUuCisg
ICAgICAgIEFsc28gcmVtb3ZlIHRoZSBtYXhpbXVtU2l6ZSBwYXJhbWV0ZXIsIGl0IGlzIG5vdCB1
c2VkIGVpdGhlci4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJGYWN0b3J5Lmg6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJGYWN0b3J5OjpvcGVuKToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHA6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKToK
KyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbik6CisgICAgICAg
ICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFj
dG9yeUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0
YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkZhY3RvcnlJbXBsOjpvcGVuKToK
KyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuaDoKKwogMjAxMS0xMC0wNyAgTmF0ZSBD
aGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFsd2F5cyBjYWxsIHNldEFj
dGl2ZSgpIGluIFdlYlZpZXdJbXBsOjpzZXRGb2N1cygpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCmluZGV4IGZiZDE3NTU3MjhmZmIxYjFmOWNhNjE0
NDgwYmVjNmU2NjNjYWMzZTUuLjdkMWQ5MzRlMWQxODMwNTEyNDYwYWNjMzVlYTE4Y2NjYmZkY2Rh
MTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3Rv
cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgK
QEAgLTUxLDE2ICs1MSwyMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJJREJGYWN0b3J5
KCkgeyB9CiAKKyAgICAvLyBGSVhNRTogRGVsZXRlIHdoZW4gQ2hyb21pdW0gcm9sbHMuCiAgICAg
ZW51bSBCYWNraW5nU3RvcmVUeXBlIHsKICAgICAgICAgRGVmYXVsdEJhY2tpbmdTdG9yZSwKICAg
ICAgICAgTGV2ZWxEQkJhY2tpbmdTdG9yZSwKICAgICAgICAgU1FMaXRlQmFja2luZ1N0b3JlCiAg
ICAgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcm
IGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlw
ZSkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICAvLyBGSVhNRTogRGVsZXRl
IHdoZW4gQ2hyb21pdW0gcm9sbHMuCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMo
V2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmln
aW4sIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpIHsgZ2V0RGF0YWJhc2VOYW1l
cyhjYWxsYmFja3MsIG9yaWdpbiwgZnJhbWUsIGRhdGFEaXIpOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcm
IGRhdGFEaXIpIHsgZ2V0RGF0YWJhc2VOYW1lcyhjYWxsYmFja3MsIG9yaWdpbiwgZnJhbWUsIGRh
dGFEaXIsIDAsIExldmVsREJCYWNraW5nU3RvcmUpOyB9CisKKyAgICAvLyBGSVhNRTogRGVsZXRl
IHdoZW4gQ2hyb21pdW0gcm9sbHMuCisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlP
cmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIs
IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBvcGVu
KG5hbWUsIGNhbGxiYWNrcywgb3JpZ2luLCBmcmFtZSwgZGF0YURpcik7IH0KIAogICAgIC8vIFRo
ZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSogcGFy
YW1ldGVyLgotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0
IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNr
aW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKSB7IG9wZW4obmFtZSwgY2FsbGJhY2tzLCBvcmlnaW4s
IGZyYW1lLCBkYXRhRGlyLCAwLCBMZXZlbERCQmFja2luZ1N0b3JlKTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpcikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCmluZGV4
IDljZGI4Yzk2NzBlNTExNmI3ODkzZDgyYjNjOTQzMDQwMmEwMWU2MzYuLjMzNzE5MzlhNjlkMjAw
MWEwMGRiNzk0NGFjMmFlNGE1NDU4MzdlODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCkBAIC0zOTcsMTAgKzM5Nyw2IEBAIENP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCS2V5OjpTdHJpbmdUeXBlLCBJREJLZXk6
OlN0cmluZ1R5cGUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJLZXk6OkRh
dGVUeXBlLCBJREJLZXk6OkRhdGVUeXBlKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViSURCS2V5OjpOdW1iZXJUeXBlLCBJREJLZXk6Ok51bWJlclR5cGUpOwogCi1DT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdlYklEQkZhY3Rvcnk6OkRlZmF1bHRCYWNraW5nU3RvcmUsIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpEZWZhdWx0QmFja2luZ1N0b3JlKTsKLUNPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCRmFjdG9yeTo6TGV2ZWxEQkJhY2tpbmdTdG9yZSwg
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkxldmVsREJCYWNraW5nU3RvcmUpOwotQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJGYWN0b3J5OjpTUUxpdGVCYWNraW5nU3RvcmUs
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpTUUxpdGVCYWNraW5nU3RvcmUpOwotCiAjaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJGaWxl
U3lzdGVtOjpUeXBlVGVtcG9yYXJ5LCBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSk7CiBDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVTeXN0ZW06OlR5cGVQZXJzaXN0ZW50LCBB
c3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAppbmRleCBkNzg5ZmY1MzZiNzUx
ZmMwZDZmYWE1OTAxNmExMGRmNTBkYjIyMDNmLi43YTYyZTUwZWJiMTVhNTJkNTU1NGM2MzcwNGU0
OTRhYjk1NTYyMDBhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtNjQsNyArNjQsNyBAQCBJREJGYWN0b3J5QmFj
a2VuZFByb3h5Ojp+SURCRmFjdG9yeUJhY2tlbmRQcm94eSgpCiB7CiB9CiAKLXZvaWQgSURCRmFj
dG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1l
KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNr
aW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJv
eHk6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0
IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3Jp
Z2luKTsKICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUoZnJhbWUpOwpAQCAtNzUsMTAgKzc1LDEwIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94
eTo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3dlYklEQkZhY3RvcnktPmdldERhdGFiYXNl
TmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFt
ZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PFdlYklEQkZhY3Rvcnk6OkJhY2tp
bmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKKyAgICBtX3dlYklEQkZhY3RvcnktPmdl
dERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2lu
LCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUgYmFja2luZ1N0b3JlVHlwZSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdp
bik7CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1l
KGZyYW1lKTsKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojpv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGMKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBuZXcg
V2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGly
LCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8V2ViSURCRmFjdG9yeTo6QmFja2luZ1N0b3JlVHlw
ZT4oYmFja2luZ1N0b3JlVHlwZSkpOworICAgIG1fd2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBu
ZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRh
RGlyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggMWRiMDQ2MDBkZTNm
ODcxMGViNTcxOGYzYmQ5Mzk2YWUyMjk4NDEyNi4uYmFmMWUwNWUyYzk5MmY5MjFjN2RkMjdkNGZk
MzI2ZThhNmFhODZlZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
RmFjdG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaApAQCAtNDQsOCArNDQsOCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0
ZSgpOwogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVU
eXBlKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1h
eGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcik7CisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZh
dGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4IDJlMmFlYWMzYjg2ZjgwYTdk
MjRiNzc1OWQyNmJmMDdiNzEwYmRmYjkuLjFjMDk2OGE1NTFjMmM4NDBiMDkwMjU0YzZhZDgwNGQy
MTMzZjMwN2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZh
Y3RvcnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0
b3J5SW1wbC5jcHAKQEAgLTU4LDI1ICs1OCwxOSBAQCBXZWJJREJGYWN0b3J5SW1wbDo6fldlYklE
QkZhY3RvcnlJbXBsKCkKIHsKIH0KIAotdm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJh
c2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVk
IGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBl
KQordm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUq
LCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgV2ViU3RyaW5nIHBhdGggPSBkYXRh
RGlyOwogCi0gICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gRGVmYXVsdEJhY2tpbmdTdG9yZSkK
LSAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IExldmVsREJCYWNraW5nU3RvcmU7Ci0KLSAgICBt
X2lkYkZhY3RvcnlCYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKElEQkNhbGxiYWNrc1Byb3h5Ojpj
cmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCwgbWF4aW11bVNpemUs
IHN0YXRpY19jYXN0PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBl
PihiYWNraW5nU3RvcmVUeXBlKSk7CisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJh
c2VOYW1lcyhJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBv
cmlnaW4sIDAsIHBhdGgpOwogfQogCiAKLXZvaWQgV2ViSURCRmFjdG9yeUltcGw6Om9wZW4oY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFE
aXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNr
aW5nU3RvcmVUeXBlKQordm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6b3Blbihjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9y
aWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikKIHsKICAg
ICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CiAKLSAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9
PSBEZWZhdWx0QmFja2luZ1N0b3JlKQotICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0gTGV2ZWxE
QkJhY2tpbmdTdG9yZTsKLQotICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgSURC
Q2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBw
YXRoLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6
OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKKyAgICBtX2lkYkZhY3RvcnlC
YWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKaW5kZXgg
OTk0MDMwOWNkODRiYTk5NzQyZGJjNWQ1ZjE1MGM5Yjk0YzAwNDIyMC4uM2UwMWQxYTYzYzg5MjQw
NjFmNTdjODU3N2FlYWY1YmI0MTZiYzZjMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICBX
ZWJJREJGYWN0b3J5SW1wbCgpOwogICAgIHZpcnR1YWwgfldlYklEQkZhY3RvcnlJbXBsKCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBjb25z
dCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGly
LCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwotICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tz
KiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYg
ZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRh
RGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklE
QkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBX
ZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6
OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2lkYkZhY3RvcnlCYWNrZW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110494</attachid>
            <date>2011-10-11 03:58:06 -0700</date>
            <delta_ts>2011-10-12 02:34:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69620-20111011115804.patch</filename>
            <type>text/plain</type>
            <size>76060</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcxMzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMWM5ZjMwMTMxYzBjYWM2
ZjUxMTM1M2MwMTNhOTJhYTRjNTA2ZTI5Li4zNmI2M2Q2OWMxODM5YjkxZTZkOGQyNTViYzAzMTY1
ZDNkNTQ1YzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTAtMDcgIEhhbnMg
V2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFJlbW92
ZSBTUUxpdGUgYmFja2luZyBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njk2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgdGhlIFNRTGl0ZSBiYWNraW5nIHN0b3JlIGltcGxlbWVudGF0
aW9uOyBpdCBpcyBub3QgdXNlZCBhbnltb3JlLgorICAgICAgICBBbHNvIHJlbW92ZSB0aGUgbWF4
aW11bVNpemUgcGFyYW1ldGVyLCBpdCBpcyBub3QgdXNlZCBlaXRoZXIuCisKKyAgICAgICAgTm8g
bmV3IGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUZpbGVJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6Cisg
ICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6IFJlbW92ZWQuCisKIDIwMTEt
MTAtMTEgIEpvaG4gQmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4
IGNyYXNoIHdpdGggdG9EYXRhVVJMIHRvIEpQRUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IGE5OTQ3ODZhN2QzYzk3ZjM4OGI5ZWE3NjgyMjVkZWY1OWY1MDJhNWQuLjg1NWExOTU0
YWQ1MmZhNmFlOTJjZDcwODQzM2FiYmEwZWNlZGVlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtMzM5Miw4ICszMzkyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCUmVxdWVzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVz
dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmggXAogCVNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggOWY4MWMyMzBlZDliYTlhNmNkZWM0Y2VjY2I5NDA0MDAwNmNhM2RmOS4uZGYxYjk0YTJl
Nzk0Mjg2OGRjMzI1MzBjYmRjMGMyOWZlZjFkZGRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDgy
Myw4ICs0ODIzLDYgQEAKICAgICAgICAgICAgICdzdG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3IuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCcsCiAgICAg
ICAgICAgICAnc3RvcmFnZS9JREJSZXF1ZXN0LmgnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
U1FMaXRlQmFja2luZ1N0b3JlLmNwcCcsCi0gICAgICAgICAgICAnc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAn
LAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJCYWNraW5nU3RvcmUuaAppbmRleCAwMjdkNTVmZjI5OTM0MGY0MzMzYmFhNTM1YTdm
ZDNkOTBkY2FkNWU5Li42ZTEzZjRmYTYxYzRhMjFkNDJjM2ZmZGU1YmRjNzNkOTFkZGIzYzQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTEwOCw3ICsxMDgs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpID0gMDsKICAgICB9
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24o
KSA9IDA7Ci0gICAgdmlydHVhbCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0
b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5kZXggZjU4NzIy
YmFjZjk1ZmRkZTlkOTEyNGE3NzhmMWY0MjFkYjkyYjVlYS4uOWYyMzMzZTBmYTg1NDJjNGQ0NGFk
NGRmYThiZDE5NzE3MTI0ZTA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
CkBAIC03MSw3ICs3MSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0
RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAKICAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55
OjpjcmVhdGUodGhpcyksIDApOwogICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBk
b2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBtX2ZhY3RvcnlC
YWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQ
YXRoKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwgSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U6OkRlZmF1bHRCYWNraW5nU3RvcmUpOworICAgIG1fZmFjdG9yeUJhY2tl
bmQtPmdldERhdGFiYXNlTmFtZXMocmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCks
IGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgo
KSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFMKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7CiAgICAgR3Jv
dXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3Jv
dXBTZXR0aW5ncygpOwotICAgIG1fZmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdCwg
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRp
bmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCUXVv
dGFCeXRlcygpLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6RGVmYXVsdEJhY2tpbmdTdG9y
ZSk7CisgICAgbV9mYWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4
ZWREQkRhdGFiYXNlUGF0aCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDUxYzUw
YzQ1OTAyODQ0M2I3NjZmNjkwMjc5ZmNiMDBiZjQzZGY5N2UuLmM5MjFlYWM1MzE5MTI2MDAwODdh
YjkyMmI0ZDZjNDNmY2Y5NTE4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIK
ICNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCU1FMaXRl
QmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpA
QCAtNDMsMTQgKzQyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFN0cmlu
ZyBjb21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZSB0eXBlKQorc3RhdGlj
IFN0cmluZyBjb21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKQogewotICAgIHJldHVybiBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkg
KyBTdHJpbmc6OmZvcm1hdCgiQCVkIiwgdHlwZSk7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICJAMSI7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29tcHV0
ZVVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4sIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBl
IHR5cGUpCitzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewotICAgIHJldHVybiBj
b21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4sIHR5cGUpICsgbmFtZTsKKyAgICBy
ZXR1cm4gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luKSArIG5hbWU7CiB9CiAK
IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmRJbXBsKCkKQEAgLTgwLDEx
ICs3OSw5IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJCYWNraW5nU3Rv
cmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcikKICAgICBtX2JhY2tpbmdTdG9yZU1hcC5y
ZW1vdmUoZmlsZUlkZW50aWZpZXIpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2lu
Z1N0b3JlVHlwZSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU5hbWVz
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsK
LSAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3JlKTsKLQot
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3Rv
cmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIsIG1heGltdW1TaXplLCBiYWNraW5nU3RvcmVUeXBl
KTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2lu
Z1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZSkg
ewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTAwLDEyICs5Nyw5IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRf
dCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQordm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7Ci0gICAgQVNTRVJU
KGJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7Ci0KLSAgICBjb25zdCBT
dHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmln
aW4uZ2V0KCksIGJhY2tpbmdTdG9yZVR5cGUpOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVu
dGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0
KCksIGJhY2tpbmdTdG9yZVR5cGUpOworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVy
ID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwog
CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VC
YWNrZW5kTWFwLmVuZCgpKSB7CkBAIC0xMTQsNyArMTA4LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2EKICAgICB9CiAKICAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91
bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGly
LCBtYXhpbXVtU2l6ZSwgYmFja2luZ1N0b3JlVHlwZSk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0
YURpcik7CiAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEyNSwyMiAr
MTE5LDE5IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAgICAgbV9kYXRhYmFzZUJhY2tlbmRN
YXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CiB9CiAKLVBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNr
aW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0
IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBi
YWNraW5nU3RvcmVUeXBlKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBz
ZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewotICAgIEFTU0VSVChiYWNr
aW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOwotCi0gICAgY29uc3QgU3RyaW5n
IGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdl
dCgpLCBiYWNraW5nU3RvcmVUeXBlKTsKKyAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIg
PSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogCiAgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwogICAgIElEQkJhY2tpbmdTdG9yZU1h
cDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7
Ci0gICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSAmJiAoYmFja2luZ1N0b3Jl
VHlwZSA9PSBpdDItPnNlY29uZC0+YmFja2luZ1N0b3JlVHlwZSgpKSkKKyAgICBpZiAoaXQyICE9
IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnNl
Y29uZDsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gU1FMaXRl
QmFja2luZ1N0b3JlKQotICAgICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCU1FMaXRlQmFja2lu
Z1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwg
ZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogI2lmIFVTRShMRVZFTERCKQotICAgICAgICBlbHNlIGlm
IChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUpCi0gICAgICAgICAgICBi
YWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworICAg
ICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5
T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisjZWxzZQorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKaW5kZXggYjgyZGJiNmQ0Njg2
ODlhZTBjNmQ1NjBiZmNjNThiMGYwYmZlMmUwMS4uNmVlOWJiMjQzMDMzMDFmYWM0MTVhYTA2OTBj
NjFiYTRmMTJkOGRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oCkBAIC01NSwxMiArNTUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgYWRkSURC
QmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9y
ZSopOwogICAgIHZvaWQgcmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlk
ZW50aWZpZXIpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUp
OwotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZElt
cGwoKTsKLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90
IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKyAgICBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqPiBJREJEYXRhYmFzZUJhY2tlbmRNYXA7CiAgICAgSURCRGF0YWJh
c2VCYWNrZW5kTWFwIG1fZGF0YWJhc2VCYWNrZW5kTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGE4NzYxYzgwOWYy
YmU3MDhjYTllZDM0NmM0NTA0NDM4M2IxYzUyYjEuLmM0MDE4ZWZmOWRkNjRkYmM5Yjc5NDJlNTBj
M2IwMjU1MjQyNzc5MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUxLDE1ICs1MSw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gY3JlYXRlKCk7CiAg
ICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KIAotICAgIGVudW0g
QmFja2luZ1N0b3JlVHlwZSB7Ci0gICAgICAgIERlZmF1bHRCYWNraW5nU3RvcmUsCi0gICAgICAg
IExldmVsREJCYWNraW5nU3RvcmUsCi0gICAgICAgIFNRTGl0ZUJhY2tpbmdTdG9yZQotICAgIH07
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAKaW5kZXggZDdlM2M5ZDQ3MmEyM2Y0NTY1NDQxY2FiMTJiZTkyMDI1Yzk0YTExOC4uZmE0ZTVi
MzQ4MjZiMWQ5NTlkNTY5MjVkYmY4NDZlNWE0MjAwMWU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0xMzIsNyArMTMyLDcg
QEAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUoKQogICAg
IG1fY29tcGFyYXRvci5jbGVhcigpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGludDY0X3QgbWF4aW11bVNpemUsIGNvbnN0
IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkK
K1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVu
KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFy
ZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBm
YWN0b3J5KQogewogICAgIFN0cmluZyBwYXRoQmFzZSA9IHBhdGhCYXNlQXJnOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDIzMTBj
N2Y5YTQ3MWJhMGY3YWU2YTFhNjE1YTlhZmUwYTIxYmI3NWUuLmMxZDNhYzRkYmY5OGZiZmVkNTQ4
OTI0ODU3OGVjOGQyZjNiODRlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDsKIAogY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJC
YWNraW5nU3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGludDY0
X3QgbWF4aW11bVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW1wbCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3Bl
bihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYg
ZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwogICAgIHZpcnR1YWwgfklE
QkxldmVsREJCYWNraW5nU3RvcmUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKQEAgLTc1LDcgKzc1LDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKTsKLSAgICB2aXJ0dWFsIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5
cGUoKSBjb25zdCB7IHJldHVybiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6TGV2ZWxEQkJh
Y2tpbmdTdG9yZTsgfQogCiAgICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTZkYzgyZjc4Njg3MDcxYjcyYjYxNDkz
MTIxZmNlZGZmZjk2MGRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJREJTUUxpdGVCYWNraW5nU3RvcmUuaCIKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQktl
eVJhbmdlLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCU1FMaXRlQmFja2lu
Z1N0b3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJ
REJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCi0gICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKLSAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQotewotICAgIG1fZmFjdG9yeS0+YWRkSURC
QmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIHRoaXMpOwotfQotCi1JREJTUUxpdGVCYWNraW5nU3Rv
cmU6On5JREJTUUxpdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURC
QmFja2luZ1N0b3JlKG1faWRlbnRpZmllcik7Ci19Ci0KLXN0YXRpYyBib29sIHJ1bkNvbW1hbmRz
KFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgY29uc3QgY2hhcioqIGNvbW1hbmRzLCBz
aXplX3QgbnVtYmVyT2ZDb21tYW5kcykKLXsKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2Fj
dGlvbihzcWxpdGVEYXRhYmFzZSwgZmFsc2UpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNvbW1hbmRzOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFzcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjb21tYW5kc1tpXSkpIHsKLSAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQg
Zm9yIEluZGV4ZWREQjogJXMiLCBjb21tYW5kc1tpXSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSYg
c3FsaXRlRGF0YWJhc2UpCi17Ci0gICAgaWYgKHNxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKCJE
YXRhYmFzZXMiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICJDUkVBVEUgVEFCTEUgRGF0YWJhc2VzIChpZCBJTlRF
R0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQgTk9UIE5VTEwsIGRlc2NyaXB0aW9uIFRFWFQgTk9U
IE5VTEwsIHZlcnNpb24gVEVYVCBOT1QgTlVMTCkiLAotICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBEYXRhYmFzZXNfbmFtZSBPTiBEYXRhYmFzZXMobmFtZSkiLAotCi0gICAgICAgICJDUkVB
VEUgVEFCTEUgT2JqZWN0U3RvcmVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQg
Tk9UIE5VTEwsIGtleVBhdGggVEVYVCwgZG9BdXRvSW5jcmVtZW50IElOVEVHRVIgTk9UIE5VTEws
IGRhdGFiYXNlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIERhdGFiYXNlcyhpZCkpIiwK
LSAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVzX2NvbXBvc2l0IE9OIE9i
amVjdFN0b3JlcyhkYXRhYmFzZUlkLCBuYW1lKSIsCi0KLSAgICAgICAgIkNSRUFURSBUQUJMRSBJ
bmRleGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9U
IE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIG5hbWUgVEVYVCBOT1QgTlVMTCwga2V5
UGF0aCBURVhULCBpc1VuaXF1ZSBJTlRFR0VSIE5PVCBOVUxMKSIsCi0gICAgICAgICJDUkVBVEUg
VU5JUVVFIElOREVYIEluZGV4ZXNfY29tcG9zaXQgT04gSW5kZXhlcyhvYmplY3RTdG9yZUlkLCBu
YW1lKSIsCi0KLSAgICAgICAgIkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZURhdGEgKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VT
IE9iamVjdFN0b3JlKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwga2V5TnVt
YmVyIElOVEVHRVIsIHZhbHVlIFRFWFQgTk9UIE5VTEwpIiwKLSAgICAgICAgIkNSRUFURSBVTklR
VUUgSU5ERVggT2JqZWN0U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlT
dHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCkiLAotCi0gICAgICAgICJD
UkVBVEUgVEFCTEUgSW5kZXhEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBpbmRleElkIElO
VEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBJbmRleGVzKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtl
eURhdGUgSU5URUdFUiwga2V5TnVtYmVyIElOVEVHRVIsIG9iamVjdFN0b3JlRGF0YUlkIElOVEVH
RVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZURhdGEoaWQpKSIsCi0gICAgICAgICJD
UkVBVEUgSU5ERVggSW5kZXhEYXRhX2NvbXBvc2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcsIGtl
eURhdGUsIGtleU51bWJlciwgaW5kZXhJZCkiLAotICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4
RGF0YV9vYmplY3RTdG9yZURhdGFJZCBPTiBJbmRleERhdGEob2JqZWN0U3RvcmVEYXRhSWQpIiwK
LSAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERhdGFfaW5kZXhJZCBPTiBJbmRleERhdGEoaW5k
ZXhJZCkiLAotICAgICAgICB9OwotCi0gICAgcmV0dXJuIHJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFi
YXNlLCBjb21tYW5kcywgc2l6ZW9mKGNvbW1hbmRzKSAvIHNpemVvZihjb21tYW5kc1swXSkpOwot
fQotCi1zdGF0aWMgYm9vbCBjcmVhdGVNZXRhRGF0YVRhYmxlKFNRTGl0ZURhdGFiYXNlJiBzcWxp
dGVEYXRhYmFzZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKLSAg
ICAgICAgIkNSRUFURSBUQUJMRSBNZXRhRGF0YSAobmFtZSBURVhUIFBSSU1BUlkgS0VZLCB2YWx1
ZSBOT05FKSIsCi0gICAgICAgICJJTlNFUlQgSU5UTyBNZXRhRGF0YSBWQUxVRVMgKCd2ZXJzaW9u
JywgMSkiLAotICAgIH07Ci0KLSAgICByZXR1cm4gcnVuQ29tbWFuZHMoc3FsaXRlRGF0YWJhc2Us
IGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSk7Ci19Ci0K
LXN0YXRpYyBib29sIGdldERhdGFiYXNlU2NoZW1hVmVyc2lvbihTUUxpdGVEYXRhYmFzZSYgc3Fs
aXRlRGF0YWJhc2UsIGludCogZGF0YWJhc2VWZXJzaW9uKQotewotICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShzcWxpdGVEYXRhYmFzZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIE1ldGFEYXRhIFdIRVJF
IG5hbWUgPSAndmVyc2lvbiciKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rIHx8IHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICpkYXRhYmFzZVZlcnNpb24gPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7Ci0gICAg
cmV0dXJuIHF1ZXJ5LmZpbmFsaXplKCkgPT0gU1FMUmVzdWx0T2s7Ci19Ci0KLXN0YXRpYyBib29s
IG1pZ3JhdGVEYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCi17Ci0gICAg
aWYgKCFzcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cygiTWV0YURhdGEiKSkgewotICAgICAgICBp
ZiAoIWNyZWF0ZU1ldGFEYXRhVGFibGUoc3FsaXRlRGF0YWJhc2UpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBkYXRhYmFzZVZlcnNpb247Ci0gICAgaWYgKCFn
ZXREYXRhYmFzZVNjaGVtYVZlcnNpb24oc3FsaXRlRGF0YWJhc2UsICZkYXRhYmFzZVZlcnNpb24p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZGF0YWJhc2VWZXJzaW9uID09IDEp
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICAg
ICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3RvcmVEYXRhMiIsCi0gICAgICAgICAgICAi
Q1JFQVRFIFRBQkxFIE9iamVjdFN0b3JlRGF0YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9i
amVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwg
a2V5U3RyaW5nIFRFWFQsIGtleURhdGUgUkVBTCwga2V5TnVtYmVyIFJFQUwsIHZhbHVlIFRFWFQg
Tk9UIE5VTEwpIiwKLSAgICAgICAgICAgICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEyIFNF
TEVDVCAqIEZST00gT2JqZWN0U3RvcmVEYXRhIiwKLSAgICAgICAgICAgICJEUk9QIFRBQkxFIE9i
amVjdFN0b3JlRGF0YSIsIC8vIFRoaXMgZGVwZW5kcyBvbiBTUUxpdGUgbm90IGVuZm9yY2luZyBy
ZWZlcmVudGlhbCBjb25zaXN0ZW5jeS4KLSAgICAgICAgICAgICJBTFRFUiBUQUJMRSBPYmplY3RT
dG9yZURhdGEyIFJFTkFNRSBUTyBPYmplY3RTdG9yZURhdGEiLAotICAgICAgICAgICAgIkNSRUFU
RSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0
YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCkiLAotICAgICAg
ICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZGV4RGF0YTIiLCAvLyBUaGlzIGRlcGVuZHMg
b24gU1FMaXRlIG5vdCBlbmZvcmNpbmcgcmVmZXJlbnRpYWwgY29uc2lzdGVuY3kuCi0gICAgICAg
ICAgICAiQ1JFQVRFIFRBQkxFIEluZGV4RGF0YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGlu
ZGV4SWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIEluZGV4ZXMoaWQpLCBrZXlTdHJpbmcg
VEVYVCwga2V5RGF0ZSBSRUFMLCBrZXlOdW1iZXIgUkVBTCwgb2JqZWN0U3RvcmVEYXRhSWQgSU5U
RUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlRGF0YShpZCkpIiwKLSAgICAgICAg
ICAgICJJTlNFUlQgSU5UTyBJbmRleERhdGEyIFNFTEVDVCAqIEZST00gSW5kZXhEYXRhIiwKLSAg
ICAgICAgICAgICJEUk9QIFRBQkxFIEluZGV4RGF0YSIsCi0gICAgICAgICAgICAiQUxURVIgVEFC
TEUgSW5kZXhEYXRhMiBSRU5BTUUgVE8gSW5kZXhEYXRhIiwKLSAgICAgICAgICAgICJDUkVBVEUg
SU5ERVggSW5kZXhEYXRhX2NvbXBvc2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcsIGtleURhdGUs
IGtleU51bWJlciwgaW5kZXhJZCkiLAotICAgICAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERh
dGFfb2JqZWN0U3RvcmVEYXRhSWQgT04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0YUlkKSIsCi0g
ICAgICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9pbmRleElkIE9OIEluZGV4RGF0YShp
bmRleElkKSIsCi0gICAgICAgICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDIgV0hF
UkUgbmFtZSA9ICd2ZXJzaW9uJyIsCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFydW5Db21t
YW5kcyhzcWxpdGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2Yo
Y29tbWFuZHNbMF0pKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBkYXRh
YmFzZVZlcnNpb24gPSAyOwotICAgIH0KLQotICAgIGlmIChkYXRhYmFzZVZlcnNpb24gPT0gMikg
ewotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgdGhlIE9iamVjdFN0b3JlRGF0YS52YWx1ZSBi
ZSBhIEJMT0IgaW5zdGVhZCBvZiBURVhULgotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29t
bWFuZHNbXSA9IHsKLSAgICAgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RTdG9y
ZURhdGEiLCAvLyBUaGlzIGRyb3BzIGFzc29jaWF0ZWQgaW5kaWNlcy4KLSAgICAgICAgICAgICJD
UkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmpl
Y3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIGtl
eVN0cmluZyBURVhULCBrZXlEYXRlIFJFQUwsIGtleU51bWJlciBSRUFMLCB2YWx1ZSBCTE9CIE5P
VCBOVUxMKSIsCi0gICAgICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZURh
dGFfY29tcG9zaXQgT04gT2JqZWN0U3RvcmVEYXRhKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVt
YmVyLCBvYmplY3RTdG9yZUlkKSIsCi0gICAgICAgICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2
YWx1ZSA9IDMgV0hFUkUgbmFtZSA9ICd2ZXJzaW9uJyIsCi0gICAgICAgIH07Ci0KLSAgICAgICAg
aWYgKCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5k
cykgLyBzaXplb2YoY29tbWFuZHNbMF0pKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBkYXRhYmFzZVZlcnNpb24gPSAzOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpv
cGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFz
ZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQotewotICAgIFJlZlB0cjxJREJTUUxpdGVCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZShhZG9wdFJlZihuZXcgSURCU1FMaXRlQmFja2luZ1N0b3Jl
KGZpbGVJZGVudGlmaWVyLCBmYWN0b3J5KSkpOwotCi0gICAgU3RyaW5nIHBhdGggPSAiOm1lbW9y
eToiOyAvLyBpbi1tZW1vcnkgU1FMaXRlIGRhdGFiYXNlLgotICAgIGlmICghcGF0aEJhc2UuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3ZSBjb3VsZCBw
b3NzaWJseSBkbyB0byByZWNvdmVyIGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBpdCByYXRoZXIg
dGhhbiBqdXN0IGVycm9yaW5nIG91dC4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGNyZWF0ZSBJbmRleGVkIERCIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFz
ZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiIik7Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5n
U3RvcmUtPm1fZGIub3BlbihwYXRoKSkgewotICAgICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYW55
IG90aGVyIHRoaW5nIHdlIGNvdWxkIHBvc3NpYmx5IGRvIHRvIHJlY292ZXIgYXQgdGhpcyBwb2lu
dD8gSWYgc28sIGRvIGl0IHJhdGhlciB0aGFuIGp1c3QgZXJyb3Jpbmcgb3V0LgotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIEluZGV4ZWREQiIs
IHBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBFcnJvciBjaGVja2luZz8KLSAgICBiYWNraW5nU3RvcmUtPm1fZGIuc2V0TWF4aW11
bVNpemUobWF4aW11bVNpemUpOwotICAgIGJhY2tpbmdTdG9yZS0+bV9kYi50dXJuT25JbmNyZW1l
bnRhbEF1dG9WYWN1dW0oKTsKLQotICAgIGlmICghY3JlYXRlVGFibGVzKGJhY2tpbmdTdG9yZS0+
bV9kYikpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghbWlncmF0ZURhdGFiYXNlKGJhY2tp
bmdTdG9yZS0+bV9kYikpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmdT
dG9yZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXREYXRh
YmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKQotewotICAgIEFTU0VSVChmb3Vu
ZE5hbWVzLmlzRW1wdHkoKSk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNF
TEVDVCBuYW1lIEZST00gRGF0YWJhc2VzIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHdoaWxlIChxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KQot
ICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChxdWVyeS5nZXRDb2x1bW5UZXh0KDApKTsKLX0KLQot
Ym9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQp
Ci17Ci0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFiYXNlUXVlcnkobV9kYiwgIlNFTEVDVCBpZCwg
dmVyc2lvbiBGUk9NIERhdGFiYXNlcyBXSEVSRSBuYW1lID0gPyIpOwotICAgIGlmIChkYXRhYmFz
ZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBkYXRhYmFzZVF1ZXJ5
LmJpbmRUZXh0KDEsIG5hbWUpOwotICAgIGlmIChkYXRhYmFzZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxS
ZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvdW5kSWQgPSBkYXRhYmFz
ZVF1ZXJ5LmdldENvbHVtbkludDY0KDApOwotICAgIGZvdW5kVmVyc2lvbiA9IGRhdGFiYXNlUXVl
cnkuZ2V0Q29sdW1uVGV4dCgxKTsKLQotICAgIGlmIChkYXRhYmFzZVF1ZXJ5LnN0ZXAoKSA9PSBT
UUxSZXN1bHRSb3cpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6c2V0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYg
cm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKQotewotICAgIEFTU0VSVCghbmFtZS5pc051bGwoKSk7
Ci0gICAgQVNTRVJUKCF2ZXJzaW9uLmlzTnVsbCgpKTsKLQotICAgIFN0cmluZyBzcWwgPSBpbnZh
bGlkUm93SWQgPyAiSU5TRVJUIElOVE8gRGF0YWJhc2VzIChuYW1lLCBkZXNjcmlwdGlvbiwgdmVy
c2lvbikgVkFMVUVTICg/LCAnJywgPykiIDogIlVQREFURSBEYXRhYmFzZXMgU0VUIG5hbWUgPSA/
LCB2ZXJzaW9uID0gPyBXSEVSRSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeSht
X2RiLCBzcWwpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBxdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKLSAgICBxdWVyeS5iaW5kVGV4dCgyLCB2
ZXJzaW9uKTsKLSAgICBpZiAoIWludmFsaWRSb3dJZCkKLSAgICAgICAgcXVlcnkuYmluZEludDY0
KDMsIHJvd0lkKTsKLQotICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGludmFsaWRSb3dJZCkKLSAgICAgICAgcm93
SWQgPSBtX2RiLmxhc3RJbnNlcnRSb3dJRCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1l
cywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRv
SW5jcmVtZW50RmxhZ3MpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxF
Q1QgaWQsIG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCBGUk9NIE9iamVjdFN0b3JlcyBX
SEVSRSBkYXRhYmFzZUlkID0gPyIpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPwotCi0gICAgQVNTRVJUKGZvdW5kSWRzLmlzRW1wdHkoKSk7Ci0gICAg
QVNTRVJUKGZvdW5kTmFtZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRLZXlQYXRocy5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZEF1dG9JbmNyZW1lbnRGbGFncy5pc0VtcHR5KCkp
OwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIGRhdGFiYXNlSWQpOwotCi0gICAgd2hpbGUgKHF1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgZm91bmRJZHMuYXBwZW5kKHF1
ZXJ5LmdldENvbHVtbkludDY0KDApKTsKLSAgICAgICAgZm91bmROYW1lcy5hcHBlbmQocXVlcnku
Z2V0Q29sdW1uVGV4dCgxKSk7Ci0gICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKHF1ZXJ5Lmdl
dENvbHVtblRleHQoMikpOwotICAgICAgICBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncy5hcHBlbmQo
ISFxdWVyeS5nZXRDb2x1bW5JbnQoMykpOwotICAgIH0KLX0KLQotYm9vbCBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50
NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RiLCAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVzIChuYW1lLCBrZXlQYXRoLCBkb0F1dG9J
bmNyZW1lbnQsIGRhdGFiYXNlSWQpIFZBTFVFUyAoPywgPywgPywgPykiKTsKLSAgICBpZiAocXVl
cnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBxdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKLSAgICBxdWVyeS5iaW5kVGV4dCgyLCBrZXlQYXRo
KTsKLSAgICBxdWVyeS5iaW5kSW50KDMsIHN0YXRpY19jYXN0PGludD4oYXV0b0luY3JlbWVudCkp
OwotICAgIHF1ZXJ5LmJpbmRJbnQ2NCg0LCBkYXRhYmFzZUlkKTsKLQotICAgIGlmIChxdWVyeS5z
dGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXNz
aWduZWRPYmplY3RTdG9yZUlkID0gbV9kYi5sYXN0SW5zZXJ0Um93SUQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgZG9EZWxldGUoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25z
dCBjaGFyKiBzcWwsIGludDY0X3QgaWQpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1
ZXJ5KGRiLCBzcWwpOwotICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVy
cm9yIGhhbmRsaW5nLgotICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7Ci0gICAgb2sg
PSBkZWxldGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi19Ci0KLXZvaWQgSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCi17Ci0gICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0
YSBXSEVSRSBpbmRleElkIElOIChTRUxFQ1QgaWQgRlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0
b3JlSWQgPSA/KSIsIG9iamVjdFN0b3JlSWQpOwotICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUg
RlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7Ci0g
ICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwotICAgIGRvRGVsZXRlKG1fZGIsICJERUxF
VEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgaWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0K
LW5hbWVzcGFjZSB7Ci1jbGFzcyBTUUxpdGVSZWNvcmRJZGVudGlmaWVyIDogcHVibGljIElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTUUxpdGVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgU1FMaXRlUmVjb3JkSWRlbnRpZmllcigpKTsgfQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNRTGl0ZVJlY29yZElkZW50aWZpZXI+IGNyZWF0ZShpbnQ2NF90IGlkKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU1FMaXRlUmVjb3JkSWRlbnRpZmllcihpZCkpOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkICE9IC0xOyB9Ci0gICAgaW50
NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICB2b2lkIHNldElkKGludDY0X3Qg
aWQpIHsgbV9pZCA9IGlkOyB9Ci1wcml2YXRlOgotICAgIFNRTGl0ZVJlY29yZElkZW50aWZpZXIo
KSA6IG1faWQoLTEpIHsgfQotICAgIFNRTGl0ZVJlY29yZElkZW50aWZpZXIoaW50NjRfdCBpZCkg
OiBtX2lkKGlkKSB7IH0KLSAgICBpbnQ2NF90IG1faWQ7Ci19OwotfQotCi1QYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkKLXsKLSAgICByZXR1cm4g
U1FMaXRlUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgd2hl
cmVTeW50YXhGb3JLZXkoY29uc3QgSURCS2V5JiBrZXksIFN0cmluZyBxdWFsaWZpZWRUYWJsZU5h
bWUgPSAiIikKLXsKLSAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleTo6
U3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJp
bmcgPSA/ICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMICBB
TkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyIElTIE5VTEwgICI7Ci0gICAg
Y2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5h
bWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJr
ZXlEYXRlIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIg
PSA/ICAiOwotICAgIGNhc2UgSURCS2V5OjpEYXRlVHlwZToKLSAgICAgICAgcmV0dXJuIHF1YWxp
ZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFi
bGVOYW1lICsgImtleURhdGUgPSA/ICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
TnVtYmVyIElTIE5VTEwgICI7Ci0gICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAgICBy
ZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBx
dWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRU
YWJsZU5hbWUgKyAia2V5TnVtYmVyIElTIE5VTEwgICI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgaXRlbXMgYm91bmQuCi1zdGF0aWMgaW50IGJpbmRLZXlUb1F1ZXJ5KFNRTGl0ZVN0YXRlbWVu
dCYgcXVlcnksIGludCBjb2x1bW4sIGNvbnN0IElEQktleSYga2V5KQotewotICAgIHN3aXRjaCAo
a2V5LnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgotICAgICAgICBxdWVy
eS5iaW5kVGV4dChjb2x1bW4sIGtleS5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAg
IGNhc2UgSURCS2V5OjpEYXRlVHlwZToKLSAgICAgICAgcXVlcnkuYmluZERvdWJsZShjb2x1bW4s
IGtleS5kYXRlKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIElEQktleTo6TnVtYmVy
VHlwZToKLSAgICAgICAgcXVlcnkuYmluZERvdWJsZShjb2x1bW4sIGtleS5udW1iZXIoKSk7Ci0g
ICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbG93ZXJDdXJzb3JXaGVyZUZyYWdtZW50KGNvbnN0IElEQktl
eSYga2V5LCBTdHJpbmcgY29tcGFyaXNvbk9wZXJhdG9yLCBTdHJpbmcgcXVhbGlmaWVkVGFibGVO
YW1lID0gIiIpCi17Ci0gICAgc3dpdGNoIChrZXkudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXk6
OlN0cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiAiPyAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsg
IiAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyAgQU5EICAiOwotICAgIGNhc2Ug
SURCS2V5OjpEYXRlVHlwZToKLSAgICAgICAgcmV0dXJuICIoPyAiICsgY29tcGFyaXNvbk9wZXJh
dG9yICsgIiAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgIE9SIE5PVCAiICsgcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMKSAgQU5EICAiOwotICAgIGNhc2Ug
SURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICByZXR1cm4gIig/ICIgKyBjb21wYXJpc29uT3Bl
cmF0b3IgKyAiICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyICBPUiAgTk9UICIg
KyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIE9SICBOT1QgIiArIHF1
YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwpICBBTkQgICI7Ci0gICAgY2FzZSBJ
REJLZXk6Ok51bGxUeXBlOgotICAgICAgICBpZiAoY29tcGFyaXNvbk9wZXJhdG9yID09ICI8IikK
LSAgICAgICAgICAgIHJldHVybiAiTk9UKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3Ry
aW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5V
TEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCkgIEFO
RCAgIjsKLSAgICAgICAgcmV0dXJuICIiOyAvLyBJZiBpdCdzID0sIHRoZSB1cHBlciBib3VuZCBo
YWxmIHdpbGwgZG8gdGhlIGNvbnN0cmFpbmluZy4gSWYgaXQncyA8PSwgdGhlbiB0aGF0J3MgYSBu
by1vcC4KLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwot
fQotCi1zdGF0aWMgU3RyaW5nIHVwcGVyQ3Vyc29yV2hlcmVGcmFnbWVudChjb25zdCBJREJLZXkm
IGtleSwgU3RyaW5nIGNvbXBhcmlzb25PcGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRhYmxlTmFt
ZSA9ICIiKQotewotICAgIHN3aXRjaCAoa2V5LnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5OjpT
dHJpbmdUeXBlOgotICAgICAgICByZXR1cm4gIigiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eVN0cmluZyAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsgIiA/ICBPUiAgIiArIHF1YWxpZmllZFRh
YmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCkgIEFORCAgIjsKLSAgICBjYXNlIElEQktleTo6
RGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiAiKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
RGF0ZSAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsgIiA/IE9SICIgKyBxdWFsaWZpZWRUYWJsZU5h
bWUgKyAia2V5RGF0ZSBJUyBOVUxMKSAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eVN0cmluZyBJUyBOVUxMICBBTkQgICI7Ci0gICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0g
ICAgICAgIHJldHVybiAiKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyICIgKyBj
b21wYXJpc29uT3BlcmF0b3IgKyAiID8gT1IgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlO
dW1iZXIgSVMgTlVMTCkgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcg
SVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAg
QU5EICAiOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAgICAgaWYgKGNvbXBhcmlz
b25PcGVyYXRvciA9PSAiPCIpCi0gICAgICAgICAgICByZXR1cm4gIjAgIT0gMCAgQU5EICAiOwot
ICAgICAgICByZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBB
TkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMICBBTkQgICIgKyBx
dWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyIElTIE5VTEwgIEFORCAgIjsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCi1TdHJpbmcgSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90LCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RiLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1
ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBBTkQgIiArIHdo
ZXJlU3ludGF4Rm9yS2V5KGtleSkpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSWQp
OwotICAgIGJpbmRLZXlUb1F1ZXJ5KHF1ZXJ5LCAyLCBrZXkpOwotICAgIGlmIChxdWVyeS5zdGVw
KCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIE51bGwgU3Ry
aW5nIG1lYW5zIHJlY29yZCBub3QgZm91bmQuCi0KLSAgICBBU1NFUlQoKGtleS50eXBlKCkgPT0g
SURCS2V5OjpTdHJpbmdUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMCkpOwotICAgIEFTU0VS
VCgoa2V5LnR5cGUoKSA9PSBJREJLZXk6OkRhdGVUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwo
MSkpOwotICAgIEFTU0VSVCgoa2V5LnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpICE9IHF1
ZXJ5LmlzQ29sdW1uTnVsbCgyKSk7Ci0KLSAgICBTdHJpbmcgcmVjb3JkID0gcXVlcnkuZ2V0Q29s
dW1uQmxvYkFzU3RyaW5nKDMpOwotICAgIEFTU0VSVChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0
Um93KTsKLQotICAgIHJldHVybiByZWNvcmQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJpbmRLZXlUb1F1
ZXJ5V2l0aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uLCBjb25z
dCBJREJLZXkmIGtleSkKLXsKLSAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKLSAgICBjYXNlIElE
QktleTo6U3RyaW5nVHlwZToKLSAgICAgICAgcXVlcnkuYmluZFRleHQoYmFzZUNvbHVtbiArIDAs
IGtleS5zdHJpbmcoKSk7Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsK
LSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VD
b2x1bW4gKyAwKTsKLSAgICAgICAgcXVlcnkuYmluZERvdWJsZShiYXNlQ29sdW1uICsgMSwga2V5
LmRhdGUoKSk7Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJp
bmROdWxsKGJhc2VDb2x1bW4gKyAwKTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVt
biArIDEpOwotICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGJhc2VDb2x1bW4gKyAyLCBrZXkubnVt
YmVyKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6Ci0gICAg
ICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAwKTsKLSAgICAgICAgcXVlcnkuYmluZE51
bGwoYmFzZUNvbHVtbiArIDEpOwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsg
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OnB1dE9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBzcWxpdGVS
ZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8U1FMaXRlUmVjb3JkSWRlbnRpZmllcio+KHJl
Y29yZElkZW50aWZpZXIpOwotCi0gICAgU3RyaW5nIHNxbCA9IHNxbGl0ZVJlY29yZElkZW50aWZp
ZXItPmlzVmFsaWQoKSA/ICJVUERBVEUgT2JqZWN0U3RvcmVEYXRhIFNFVCBrZXlTdHJpbmcgPSA/
LCBrZXlEYXRlID0gPywga2V5TnVtYmVyID0gPywgdmFsdWUgPSA/IFdIRVJFIGlkID0gPyIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIklOU0VS
VCBJTlRPIE9iamVjdFN0b3JlRGF0YSAoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZh
bHVlLCBvYmplY3RTdG9yZUlkKSBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkobV9kYiwgc3FsKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBiaW5kS2V5VG9RdWVyeVdp
dGhOdWxscyhxdWVyeSwgMSwga2V5KTsKLSAgICBxdWVyeS5iaW5kQmxvYig0LCB2YWx1ZSk7Ci0g
ICAgaWYgKHNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlzVmFsaWQoKSkKLSAgICAgICAgcXVlcnku
YmluZEludDY0KDUsIHNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlkKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgcXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlSWQpOwotCi0gICAgaWYgKHF1ZXJ5
LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIXNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlzVmFsaWQoKSkKLSAgICAgICAgc3FsaXRlUmVj
b3JkSWRlbnRpZmllci0+c2V0SWQobV9kYi5sYXN0SW5zZXJ0Um93SUQoKSk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3Rv
cmUoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIGRvRGVsZXRlKG1fZGIs
ICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVEYXRhSWQgSU4gKFNFTEVD
VCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPykiLCBvYmpl
Y3RTdG9yZUlkKTsKLSAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVE
YXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQg
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90LCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBjb25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBz
cWxpdGVSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRl
bnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotICAgIEFTU0VSVChzcWxpdGVSZWNvcmRJZGVu
dGlmaWVyLT5pc1ZhbGlkKCkpOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IG9zUXVlcnkobV9kYiwg
IkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBpZCA9ID8iKTsKLSAgICBib29sIG9r
ID0gb3NRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgb3NRdWVyeS5i
aW5kSW50NjQoMSwgc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aWQoKSk7Ci0KLSAgICBvayA9IG9z
UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2sp
OwotfQotCi1kb3VibGUgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51
bWJlcihpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1QgbWF4KGtleU51bWJlcikgKyAxIEZST00gT2JqZWN0U3Rv
cmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCBrZXlTdHJpbmcgSVMgTlVMTCBBTkQg
a2V5RGF0ZSBJUyBOVUxMIik7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxS
ZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBxdWVyeS5iaW5kSW50
NjQoMSwgb2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3Vs
dFJvdyB8fCBxdWVyeS5pc0NvbHVtbk51bGwoMCkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAg
cmV0dXJuIHF1ZXJ5LmdldENvbHVtbkRvdWJsZSgwKTsKLX0KLQotYm9vbCBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBm
b3VuZFJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgU1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3Fs
aXRlUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFNRTGl0ZVJlY29yZElkZW50aWZpZXIq
Pihmb3VuZFJlY29yZElkZW50aWZpZXIpOwotCi0gICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VM
RUNUIGlkIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCAi
KSArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1f
ZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsK
LSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxp
bmc/Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgYmluZEtl
eVRvUXVlcnkocXVlcnksIDIsIGtleSk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJl
c3VsdFJvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3FsaXRlUmVjb3JkSWRlbnRp
Zmllci0+c2V0SWQocXVlcnkuZ2V0Q29sdW1uSW50NjQoMCkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFj
ayYgY2FsbGJhY2spCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1Qg
aWQsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iik7
Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSWQpOwotCi0gICAg
d2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgaW50NjRfdCBv
YmplY3RTdG9yZURhdGFJZCA9IHF1ZXJ5LmdldENvbHVtbkludDY0KDApOwotICAgICAgICBTdHJp
bmcgdmFsdWUgPSBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSk7Ci0gICAgICAgIFJlZlB0
cjxTUUxpdGVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gU1FMaXRlUmVjb3Jk
SWRlbnRpZmllcjo6Y3JlYXRlKG9iamVjdFN0b3JlRGF0YUlkKTsKLSAgICAgICAgaWYgKCFjYWxs
YmFjay5jYWxsYmFjayhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCB2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5p
cXVlRmxhZ3MpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1QgaWQs
IG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlIEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlk
ID0gPyIpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0g
ICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5n
PwotCi0gICAgQVNTRVJUKGZvdW5kSWRzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5kTmFt
ZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRLZXlQYXRocy5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVChmb3VuZFVuaXF1ZUZsYWdzLmlzRW1wdHkoKSk7Ci0KLSAgICBxdWVyeS5iaW5kSW50
NjQoMSwgb2JqZWN0U3RvcmVJZCk7Ci0KLSAgICB3aGlsZSAocXVlcnkuc3RlcCgpID09IFNRTFJl
c3VsdFJvdykgewotICAgICAgICBmb3VuZElkcy5hcHBlbmQocXVlcnkuZ2V0Q29sdW1uSW50NjQo
MCkpOwotICAgICAgICBmb3VuZE5hbWVzLmFwcGVuZChxdWVyeS5nZXRDb2x1bW5UZXh0KDEpKTsK
LSAgICAgICAgZm91bmRLZXlQYXRocy5hcHBlbmQocXVlcnkuZ2V0Q29sdW1uVGV4dCgyKSk7Ci0g
ICAgICAgIGZvdW5kVW5pcXVlRmxhZ3MuYXBwZW5kKCEhcXVlcnkuZ2V0Q29sdW1uSW50KDMpKTsK
LSAgICB9Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2
NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKQotewotICAgIFNR
TGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiSU5TRVJUIElOVE8gSW5kZXhlcyAob2JqZWN0U3Rv
cmVJZCwgbmFtZSwga2V5UGF0aCwgaXNVbmlxdWUpIFZBTFVFUyAoPywgPywgPywgPykiKTsKLSAg
ICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgcXVlcnku
YmluZFRleHQoMiwgbmFtZSk7Ci0gICAgcXVlcnkuYmluZFRleHQoMywga2V5UGF0aCk7Ci0gICAg
cXVlcnkuYmluZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KGlzVW5pcXVlKSk7Ci0KLSAgICBpZiAo
cXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGluZGV4SWQgPSBtX2RiLmxhc3RJbnNlcnRSb3dJRCgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoaW50NjRfdCwgaW50
NjRfdCwgaW50NjRfdCBpbmRleElkKQotewotICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJP
TSBJbmRleGVzIFdIRVJFIGlkID0gPyIsIGluZGV4SWQpOwotICAgIGRvRGVsZXRlKG1fZGIsICJE
RUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCA9ID8iLCBpbmRleElkKTsKLX0KLQot
Ym9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90
LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgY29uc3Qg
U1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3FsaXRlUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19j
YXN0PGNvbnN0IFNRTGl0ZVJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLQot
ICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiSU5TRVJUIElOVE8gSW5kZXhEYXRhIChr
ZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCwgb2JqZWN0U3RvcmVEYXRhSWQp
IFZBTFVFUyAoPywgPywgPywgPywgPykiKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBiaW5kS2V5VG9RdWVyeVdp
dGhOdWxscyhxdWVyeSwgMSwga2V5KTsKLSAgICBxdWVyeS5iaW5kSW50NjQoNCwgaW5kZXhJZCk7
Ci0gICAgcXVlcnkuYmluZEludDY0KDUsIHNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlkKCkpOwot
Ci0gICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotfQotCi1ib29sIElE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QsIGlu
dDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIGNvbnN0IFNRTGl0ZVJlY29yZElkZW50aWZpZXIq
IHNxbGl0ZVJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBTUUxpdGVSZWNvcmRJ
ZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVl
cnkobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURhdGFJZCA9
ID8gQU5EIGluZGV4SWQgPSA/Iik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIHNx
bGl0ZVJlY29yZElkZW50aWZpZXItPmlkKCkpOwotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgyLCBpbmRl
eElkKTsKLSAgICByZXR1cm4gcXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7Ci19Ci0KLVN0
cmluZyBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QsIGlu
dDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgU3RyaW5n
IHNxbCA9IFN0cmluZygiU0VMRUNUICIpCi0gICAgICAgICAgICAgICAgICsgIk9iamVjdFN0b3Jl
RGF0YS52YWx1ZSAiCi0gICAgICAgICAgICAgICAgICsgIkZST00gSW5kZXhEYXRhIElOTkVSIEpP
SU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmplY3RTdG9yZURhdGFJZCA9IE9iamVj
dFN0b3JlRGF0YS5pZCAiCi0gICAgICAgICAgICAgICAgICsgIldIRVJFIEluZGV4RGF0YS5pbmRl
eElkID0gPyAgQU5EICAiICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5LCAiSW5kZXhEYXRhLiIpCi0g
ICAgICAgICAgICAgICAgICsgIk9SREVSIEJZIEluZGV4RGF0YS5pZCBMSU1JVCAxIjsgLy8gT3Jk
ZXIgYnkgaW5zZXJ0aW9uIG9yZGVyIHdoZW4gYWxsIGVsc2UgZmFpbHMuCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgaW5kZXhJZCk7Ci0g
ICAgYmluZEtleVRvUXVlcnkocXVlcnksIDIsIGtleSk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgp
ICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3RyaW5n
IGZvdW5kVmFsdWUgPSBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMCk7Ci0gICAgQVNTRVJU
KHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpOwotICAgIHJldHVybiBmb3VuZFZhbHVlOwot
fQotCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGtleUZyb21RdWVyeShTUUxpdGVTdGF0ZW1l
bnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikKLXsKLSAgICBpZiAocXVlcnkuY29sdW1uQ291bnQo
KSA8PSBiYXNlQ29sdW1uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcXVlcnkuaXND
b2x1bW5OdWxsKGJhc2VDb2x1bW4pKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJp
bmcocXVlcnkuZ2V0Q29sdW1uVGV4dChiYXNlQ29sdW1uKSk7Ci0KLSAgICBpZiAoIXF1ZXJ5Lmlz
Q29sdW1uTnVsbChiYXNlQ29sdW1uICsgMSkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZURhdGUocXVlcnkuZ2V0Q29sdW1uRG91YmxlKGJhc2VDb2x1bW4gKyAxKSk7Ci0KLSAgICBpZiAo
IXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29sdW1uICsgMikpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihxdWVyeS5nZXRDb2x1bW5Eb3VibGUoYmFzZUNvbHVtbiArIDIpKTsK
LQotICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bGwoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJL
ZXk+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3Qs
IGludDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCi17Ci0gICAgU3Ry
aW5nIHNxbCA9IFN0cmluZygiU0VMRUNUICIpCi0gICAgICAgICAgICAgICAgICsgIk9iamVjdFN0
b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlEYXRlLCBPYmplY3RTdG9yZURh
dGEua2V5TnVtYmVyICIKLSAgICAgICAgICAgICAgICAgKyAiRlJPTSBJbmRleERhdGEgSU5ORVIg
Sk9JTiBPYmplY3RTdG9yZURhdGEgT04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0YUlkID0gT2Jq
ZWN0U3RvcmVEYXRhLmlkICIKLSAgICAgICAgICAgICAgICAgKyAiV0hFUkUgSW5kZXhEYXRhLmlu
ZGV4SWQgPSA/ICBBTkQgICIgKyB3aGVyZVN5bnRheEZvcktleShrZXksICJJbmRleERhdGEuIikK
LSAgICAgICAgICAgICAgICAgKyAiT1JERVIgQlkgSW5kZXhEYXRhLmlkIExJTUlUIDEiOyAvLyBP
cmRlciBieSBpbnNlcnRpb24gb3JkZXIgd2hlbiBhbGwgZWxzZSBmYWlscy4KLSAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkobV9kYiwgc3FsKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJl
dHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpbmRleElkKTsK
LSAgICBiaW5kS2V5VG9RdWVyeShxdWVyeSwgMiwga2V5KTsKLQotICAgIGlmIChxdWVyeS5zdGVw
KCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJREJL
ZXk+IGZvdW5kS2V5ID0ga2V5RnJvbVF1ZXJ5KHF1ZXJ5LCAwKTsKLSAgICBBU1NFUlQocXVlcnku
c3RlcCgpICE9IFNRTFJlc3VsdFJvdyk7Ci0gICAgcmV0dXJuIGZvdW5kS2V5LnJlbGVhc2UoKTsK
LX0KLQotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRf
dCwgaW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQ
dHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQotewotICAgIFN0cmluZyBzcWwgPSBTdHJpbmco
IlNFTEVDVCBpZCBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkID0gPyBBTkQgIikgKyB3aGVy
ZVN5bnRheEZvcktleShpbmRleEtleSk7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIs
IHNxbCk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/
Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgaW5kZXhJZCk7Ci0gICAgYmluZEtleVRvUXVlcnko
cXVlcnksIDIsIGluZGV4S2V5KTsKLQotICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0
Um93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZFByaW1hcnlLZXkgPSBnZXRQ
cmltYXJ5S2V5VmlhSW5kZXgoMCwgMCwgaW5kZXhJZCwgaW5kZXhLZXkpOwotICAgIEFTU0VSVChm
b3VuZFByaW1hcnlLZXkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1uYW1lc3BhY2UgewotCi1j
bGFzcyBDdXJzb3JJbXBsQ29tbW9uIDogcHVibGljIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Q3Vy
c29yIHsKLXB1YmxpYzoKLSAgICBDdXJzb3JJbXBsQ29tbW9uKFNRTGl0ZURhdGFiYXNlJiBzcWxp
dGVEYXRhYmFzZSwgU3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1ZW5lc3NDb25zdHJhaW50LCBib29s
IGl0ZXJhdGVGb3J3YXJkKQotICAgICAgICA6IG1fcXVlcnkoc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5
KQotICAgICAgICAsIG1fZGIoc3FsaXRlRGF0YWJhc2UpCi0gICAgICAgICwgbV91bmlxdWVuZXNz
Q29uc3RyYWludCh1bmlxdWVuZXNzQ29uc3RyYWludCkKLSAgICAgICAgLCBtX2l0ZXJhdGVGb3J3
YXJkKGl0ZXJhdGVGb3J3YXJkKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+Q3Vyc29ySW1w
bENvbW1vbigpIHt9Ci0KLSAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1
YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSopOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRh
SWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgeyBtX3F1ZXJ5LmZpbmFsaXplKCk7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ3VycmVudFJvdygpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgY3VycmVudFJvd0V4aXN0cygpID0gMDsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBtX3F1
ZXJ5OwotCi1wcm90ZWN0ZWQ6Ci0gICAgU1FMaXRlRGF0YWJhc2UmIG1fZGI7Ci0gICAgYm9vbCBt
X3VuaXF1ZW5lc3NDb25zdHJhaW50OwotICAgIGJvb2wgbV9pdGVyYXRlRm9yd2FyZDsKLSAgICBp
bnQ2NF90IG1fY3VycmVudElkOwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKLX07
Ci0KLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkq
IGtleSkKLXsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAobV9xdWVyeS5zdGVwKCkg
IT0gU1FMUmVzdWx0Um93KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IG9sZEtleSA9IG1fY3VycmVudEtleTsKLSAgICAgICAgbG9hZEN1cnJlbnRS
b3coKTsKLQotICAgICAgICAvLyBTa2lwIGlmIHRoaXMgZW50cnkgaGFzIGJlZW4gZGVsZXRlZCBm
cm9tIHRoZSBvYmplY3Qgc3RvcmUuCi0gICAgICAgIGlmICghY3VycmVudFJvd0V4aXN0cygpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gSWYgYSBrZXkgd2FzIHN1cHBsaWVk
LCB3ZSBtdXN0IGxvb3AgdW50aWwgd2UgZmluZCBhIGtleSBncmVhdGVyIHRoYW4gb3IgZXF1YWwg
dG8gaXQgKG9yIGhpdCB0aGUgZW5kKS4KLSAgICAgICAgaWYgKGtleSkgewotICAgICAgICAgICAg
aWYgKG1faXRlcmF0ZUZvcndhcmQpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50S2V5
LT5pc0xlc3NUaGFuKGtleSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3Vy
cmVudEtleS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHVuaXF1ZW5l
c3MgY29uc3RyYWludCwgd2UgY2FuIHN0b3Agbm93LgotICAgICAgICBpZiAoIW1fdW5pcXVlbmVz
c0NvbnN0cmFpbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRL
ZXktPmlzRXF1YWwob2xkS2V5LmdldCgpKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBPYmplY3RTdG9yZUN1cnNvckltcGwgOiBwdWJs
aWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
KFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgU3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1
ZW5lc3NDb25zdHJhaW50LCBib29sIGl0ZXJhdGVGb3J3YXJkKQotICAgICAgICA6IEN1cnNvcklt
cGxDb21tb24oc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB1bmlxdWVuZXNzQ29uc3RyYWludCwgaXRl
cmF0ZUZvcndhcmQpCi0gICAgewotICAgIH0KLQotICAgIC8vIEN1cnNvckltcGxDb21tb24uCi0g
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgeyByZXR1cm4gU1FMaXRlUmVj
b3JkSWRlbnRpZmllcjo6Y3JlYXRlKG1fY3VycmVudElkKTsgfQotICAgIHZpcnR1YWwgaW50NjRf
dCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCk7Ci0gICAgdmlydHVhbCBib29sIGN1cnJlbnRS
b3dFeGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9jdXJyZW50VmFsdWU7Ci19Owot
Ci12b2lkIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQotewotICAgIG1f
Y3VycmVudElkID0gbV9xdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICBtX2N1cnJlbnRLZXkg
PSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgMSk7Ci0gICAgbV9jdXJyZW50VmFsdWUgPSBtX3F1ZXJ5
LmdldENvbHVtbkJsb2JBc1N0cmluZyg0KTsKLX0KLQotYm9vbCBPYmplY3RTdG9yZUN1cnNvcklt
cGw6OmN1cnJlbnRSb3dFeGlzdHMoKQotewotICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlkIEZS
T00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIGlkID0gPyI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RiLCBzcWwpOwotCi0gICAgYm9vbCBvayA9IHN0YXRlbWVudC5wcmVwYXJlKCkg
PT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgxLCBtX2N1cnJlbnRJZCk7Ci0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVw
KCkgPT0gU1FMUmVzdWx0Um93OwotfQotCi1jbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJs
aWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgSW5kZXhLZXlDdXJzb3JJbXBsKFNR
TGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgU3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1ZW5l
c3NDb25zdHJhaW50LCBib29sIGl0ZXJhdGVGb3J3YXJkKQotICAgICAgICA6IEN1cnNvckltcGxD
b21tb24oc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB1bmlxdWVuZXNzQ29uc3RyYWludCwgaXRlcmF0
ZUZvcndhcmQpCi0gICAgewotICAgIH0KLQotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50
UHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCk7Ci0gICAgdmlydHVhbCBib29sIGN1cnJlbnRS
b3dFeGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRQcmlt
YXJ5S2V5OwotfTsKLQotdm9pZCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkK
LXsKLSAgICBtX2N1cnJlbnRJZCA9IG1fcXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgbV9j
dXJyZW50S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDEpOwotICAgIG1fY3VycmVudFByaW1h
cnlLZXkgPSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgNCk7Ci19Ci0KLWJvb2wgSW5kZXhLZXlDdXJz
b3JJbXBsOjpjdXJyZW50Um93RXhpc3RzKCkKLXsKLSAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCBp
ZCBGUk9NIEluZGV4RGF0YSBXSEVSRSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYiwgc3FsKTsKLQotICAgIGJvb2wgb2sgPSBzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgbV9jdXJyZW50SWQpOwotICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTFJlc3VsdFJvdzsKLX0KLQotY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVibGljIEN1
cnNvckltcGxDb21tb24gewotcHVibGljOgotICAgIEluZGV4Q3Vyc29ySW1wbChTUUxpdGVEYXRh
YmFzZSYgc3FsaXRlRGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVuZXNzQ29uc3Ry
YWludCwgYm9vbCBpdGVyYXRlRm9yd2FyZCkKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHNx
bGl0ZURhdGFiYXNlLCBxdWVyeSwgdW5pcXVlbmVzc0NvbnN0cmFpbnQsIGl0ZXJhdGVGb3J3YXJk
KQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudFByaW1hcnlL
ZXk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVl
OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJ
ZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDdXJyZW50
Um93KCk7Ci0gICAgdmlydHVhbCBib29sIGN1cnJlbnRSb3dFeGlzdHMoKTsKLQotcHJpdmF0ZToK
LSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRQcmltYXJ5S2V5OwotICAgIFN0cmluZyBtX2N1
cnJlbnRWYWx1ZTsKLX07Ci0KLXZvaWQgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
Ci17Ci0gICAgbV9jdXJyZW50SWQgPSBtX3F1ZXJ5LmdldENvbHVtbkludDY0KDApOwotICAgIG1f
Y3VycmVudEtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCAxKTsKLSAgICBtX2N1cnJlbnRWYWx1
ZSA9IG1fcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDQpOwotICAgIG1fY3VycmVudFByaW1h
cnlLZXkgPSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgNSk7Ci19Ci0KLWJvb2wgSW5kZXhDdXJzb3JJ
bXBsOjpjdXJyZW50Um93RXhpc3RzKCkKLXsKLSAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCBpZCBG
Uk9NIEluZGV4RGF0YSBXSEVSRSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYiwgc3FsKTsKLQotICAgIGJvb2wgb2sgPSBzdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIHN0YXRlbWVudC5i
aW5kSW50NjQoMSwgbV9jdXJyZW50SWQpOwotICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgpID09
IFNRTFJlc3VsdFJvdzsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVD
dXJzb3IoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSog
cmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBib29sIGxvd2Vy
Qm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSBy
YW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKLQotICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlkLCBr
ZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEg
V0hFUkUgIjsKLSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgc3FsICs9IGxvd2VyQ3Vyc29y
V2hlcmVGcmFnbWVudCgqcmFuZ2UtPmxvd2VyKCksIHJhbmdlLT5sb3dlck9wZW4oKSA/ICI8IiA6
ICI8PSIpOwotICAgIGlmICh1cHBlckJvdW5kKQotICAgICAgICBzcWwgKz0gdXBwZXJDdXJzb3JX
aGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwgcmFuZ2UtPnVwcGVyT3BlbigpID8gIjwiIDog
Ijw9Iik7Ci0gICAgc3FsICs9ICJvYmplY3RTdG9yZUlkID0gPyBPUkRFUiBCWSAiOwotCi0gICAg
aWYgKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVF9OT19EVVBMSUNBVEUpCi0gICAgICAgIHNxbCArPSAia2V5U3RyaW5nLCBrZXlEYXRl
LCBrZXlOdW1iZXIiOwotICAgIGVsc2UKLSAgICAgICAgc3FsICs9ICJrZXlTdHJpbmcgREVTQywg
a2V5RGF0ZSBERVNDLCBrZXlOdW1iZXIgREVTQyI7Ci0KLSAgICBSZWZQdHI8T2JqZWN0U3RvcmVD
dXJzb3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKG1f
ZGIsIHNxbCwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGly
ZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpORVhUKSk7Ci0KLSAgICBib29sIG9rID0gY3Vyc29yLT5tX3F1ZXJ5
LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBpbnQgY3VycmVudENvbHVtbiA9
IDE7Ci0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gYmluZEtl
eVRvUXVlcnkoY3Vyc29yLT5tX3F1ZXJ5LCBjdXJyZW50Q29sdW1uLCAqcmFuZ2UtPmxvd2VyKCkp
OwotICAgIGlmICh1cHBlckJvdW5kKQotICAgICAgICBjdXJyZW50Q29sdW1uICs9IGJpbmRLZXlU
b1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgY3VycmVudENvbHVtbiwgKnJhbmdlLT51cHBlcigpKTsK
LSAgICBjdXJzb3ItPm1fcXVlcnkuYmluZEludDY0KGN1cnJlbnRDb2x1bW4sIG9iamVjdFN0b3Jl
SWQpOwotCi0gICAgaWYgKGN1cnNvci0+bV9xdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGN1cnNvci0+bG9hZEN1cnJlbnRSb3coKTsKLSAgICBy
ZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRf
dCwgaW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBTdHJpbmcgc3FsID0gU3RyaW5n
KCJTRUxFQ1QgSW5kZXhEYXRhLmlkLCBJbmRleERhdGEua2V5U3RyaW5nLCBJbmRleERhdGEua2V5
RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgIikKLSAgICAgICAgICAgICAgICAgKyAoIk9iamVj
dFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlEYXRlLCBPYmplY3RTdG9y
ZURhdGEua2V5TnVtYmVyICIpCi0gICAgICAgICAgICAgICAgICsgIkZST00gSW5kZXhEYXRhIElO
TkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmplY3RTdG9yZURhdGFJZCA9
IE9iamVjdFN0b3JlRGF0YS5pZCBXSEVSRSAiOwotCi0gICAgYm9vbCBsb3dlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPnVwcGVyKCk7Ci0KLSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgc3FsICs9IGxvd2Vy
Q3Vyc29yV2hlcmVGcmFnbWVudCgqcmFuZ2UtPmxvd2VyKCksIHJhbmdlLT5sb3dlck9wZW4oKSA/
ICI8IiA6ICI8PSIsICJJbmRleERhdGEuIik7Ci0gICAgaWYgKHVwcGVyQm91bmQpCi0gICAgICAg
IHNxbCArPSB1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQoKnJhbmdlLT51cHBlcigpLCByYW5nZS0+
dXBwZXJPcGVuKCkgPyAiPCIgOiAiPD0iLCAiSW5kZXhEYXRhLiIpOwotICAgIHNxbCArPSAiSW5k
ZXhEYXRhLmluZGV4SWQgPSA/IE9SREVSIEJZICI7Ci0KLSAgICBpZiAoZGlyZWN0aW9uID09IElE
QkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FU
RSkKLSAgICAgICAgc3FsICs9ICJJbmRleERhdGEua2V5U3RyaW5nLCBJbmRleERhdGEua2V5RGF0
ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgSW5kZXhEYXRhLmlkIjsKLSAgICBlbHNlCi0gICAgICAg
IHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZyBERVNDLCBJbmRleERhdGEua2V5RGF0ZSBERVND
LCBJbmRleERhdGEua2V5TnVtYmVyIERFU0MsIEluZGV4RGF0YS5pZCBERVNDIjsKLQotICAgIFJl
ZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IGFkb3B0UmVmKG5ldyBJbmRleEtleUN1
cnNvckltcGwobV9kYiwgc3FsLCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJ
Q0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRp
cmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQpKTsKLQotICAgIGJvb2wgb2sgPSBjdXJzb3ItPm1f
cXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9r
KTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIGludCBpbmRleENvbHVt
biA9IDE7Ci0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIGluZGV4Q29sdW1uICs9IGJpbmRL
ZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+bG93ZXIoKSk7
Ci0gICAgaWYgKHVwcGVyQm91bmQpCi0gICAgICAgIGluZGV4Q29sdW1uICs9IGJpbmRLZXlUb1F1
ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+dXBwZXIoKSk7Ci0gICAg
Y3Vyc29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChpbmRleENvbHVtbiwgaW5kZXhJZCk7Ci0KLSAgICBp
ZiAoY3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOwotICAgIHJldHVybiBjdXJzb3Iu
cmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJT
UUxpdGVCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQotewotICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBJbmRleERh
dGEuaWQsIEluZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEu
a2V5TnVtYmVyLCAiKQotICAgICAgICAgICAgICAgICArICgiT2JqZWN0U3RvcmVEYXRhLnZhbHVl
LCBPYmplY3RTdG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2Jq
ZWN0U3RvcmVEYXRhLmtleU51bWJlciAiKQotICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4
RGF0YSBJTk5FUiBKT0lOIE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVE
YXRhSWQgPSBPYmplY3RTdG9yZURhdGEuaWQgV0hFUkUgIjsKLQotICAgIGJvb2wgbG93ZXJCb3Vu
ZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdl
ICYmIHJhbmdlLT51cHBlcigpOwotCi0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIHNxbCAr
PSBsb3dlckN1cnNvcldoZXJlRnJhZ21lbnQoKnJhbmdlLT5sb3dlcigpLCByYW5nZS0+bG93ZXJP
cGVuKCkgPyAiPCIgOiAiPD0iLCAiSW5kZXhEYXRhLiIpOwotICAgIGlmICh1cHBlckJvdW5kKQot
ICAgICAgICBzcWwgKz0gdXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwg
cmFuZ2UtPnVwcGVyT3BlbigpID8gIjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKLSAgICBzcWwg
Kz0gIkluZGV4RGF0YS5pbmRleElkID0gPyBPUkRFUiBCWSAiOwotCi0gICAgaWYgKGRpcmVjdGlv
biA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19E
VVBMSUNBVEUpCi0gICAgICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRh
LmtleURhdGUsIEluZGV4RGF0YS5rZXlOdW1iZXIsIEluZGV4RGF0YS5pZCI7Ci0gICAgZWxzZQot
ICAgICAgICBzcWwgKz0gIkluZGV4RGF0YS5rZXlTdHJpbmcgREVTQywgSW5kZXhEYXRhLmtleURh
dGUgREVTQywgSW5kZXhEYXRhLmtleU51bWJlciBERVNDLCBJbmRleERhdGEuaWQgREVTQyI7Ci0K
LSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcgSW5kZXhD
dXJzb3JJbXBsKG1fZGIsIHNxbCwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBM
SUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpORVhUKSk7Ci0KLSAgICBib29sIG9rID0gY3Vyc29yLT5tX3F1ZXJ5
LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBpbnQgaW5kZXhDb2x1bW4gPSAx
OwotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBpbmRleENvbHVtbiArPSBiaW5kS2V5VG9R
dWVyeShjdXJzb3ItPm1fcXVlcnksIGluZGV4Q29sdW1uLCAqcmFuZ2UtPmxvd2VyKCkpOwotICAg
IGlmICh1cHBlckJvdW5kKQotICAgICAgICBpbmRleENvbHVtbiArPSBiaW5kS2V5VG9RdWVyeShj
dXJzb3ItPm1fcXVlcnksIGluZGV4Q29sdW1uLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAgIGN1cnNv
ci0+bV9xdWVyeS5iaW5kSW50NjQoaW5kZXhDb2x1bW4sIGluZGV4SWQpOwotCi0gICAgaWYgKGN1
cnNvci0+bV9xdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGN1cnNvci0+bG9hZEN1cnJlbnRSb3coKTsKLSAgICByZXR1cm4gY3Vyc29yLnJlbGVh
c2UoKTsKLX0KLQotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0
cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZSkKLXsKLSAgICBTdHJpbmcgcGF0aCA9ICI6bWVtb3J5OiI7IC8v
IGluLW1lbW9yeSBTUUxpdGUgZGF0YWJhc2UuCi0gICAgaWYgKCFwYXRoQmFzZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3Vy
aXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiIik7Ci0gICAgU1FM
aXRlRGF0YWJhc2UgZGI7Ci0gICAgaWYgKCFkYi5vcGVuKHBhdGgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YWJhc2VRdWVyeShkYiwgIlNFTEVDVCBp
ZCwgdmVyc2lvbiBGUk9NIERhdGFiYXNlcyBXSEVSRSBuYW1lID0gPyIpOwotICAgIGlmIChkYXRh
YmFzZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZGF0YWJhc2VRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKLSAgICByZXR1cm4gKGRh
dGFiYXNlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdyk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIFRyYW5zYWN0aW9uSW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uIHsKLXB1YmxpYzoKLSAgICBUcmFuc2FjdGlvbkltcGwoU1FMaXRlRGF0YWJhc2UmIGRiKQot
ICAgICAgICA6IG1fdHJhbnNhY3Rpb24oZGIpCi0gICAgewotICAgIH0KLQotICAgIC8vIElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSB7IG1fdHJh
bnNhY3Rpb24uYmVnaW4oKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKSB7IG1fdHJhbnNh
Y3Rpb24uY29tbWl0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSB7IG1fdHJhbnNh
Y3Rpb24ucm9sbGJhY2soKTsgfQotCi1wcml2YXRlOgotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIG1f
dHJhbnNhY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi1QYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24oKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb25JbXBsKG1fZGIp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0
ZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5n
U3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE0YmFhYmQyYTkwMDIwMTc3
YTAzNGJkNzdiYmU0MzBhMjBlM2U0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9y
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCU1FM
aXRlQmFja2luZ1N0b3JlX2gKLSNkZWZpbmUgSURCU1FMaXRlQmFja2luZ1N0b3JlX2gKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDsKLQotY2xhc3MgSURCU1FMaXRlQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9y
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVu
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBs
Kik7Ci0gICAgdmlydHVhbCB+SURCU1FMaXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7Ci0gICAg
dmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwotICAgIHZpcnR1YWwg
Ym9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwotCi0gICAg
dmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rvcjxp
bnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3Ry
aW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFn
cyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0lu
Y3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXI+IGNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7Ci0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBkb3VibGUgbmV4dEF1
dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5p
cXVlRmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9y
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2Jq
ZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9u
PiBjcmVhdGVUcmFuc2FjdGlvbigpOwotICAgIHZpcnR1YWwgSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2U6OkJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpTUUxpdGVCYWNraW5nU3RvcmU7IH0KLQotICAg
IHN0YXRpYyBib29sIGJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSk7Ci0KLXByaXZhdGU6Ci0gICAgSURC
U1FMaXRlQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsKik7Ci0KLSAgICBTUUxpdGVEYXRhYmFzZSBtX2RiOwotICAgIFN0cmluZyBtX2lk
ZW50aWZpZXI7Ci0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkyZWRlZWRk
NjIxNGEzZDU1NTc4MWUxMmIyN2I3NzkwMmI5NzJjODIuLmJkYzg2MTQ5Nzk1ZmI0NmRlMmE3OGRm
OWU0ZTNhMTY3ZTk5MDc4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjYgQEAKKzIwMTEtMTAtMDcgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBJbmRleGVkREI6IFJlbW92ZSBTUUxpdGUgYmFja2luZyBzdG9yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2MjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIFNRTGl0ZSBi
YWNraW5nIHN0b3JlIGltcGxlbWVudGF0aW9uOyBpdCBpcyBub3QgdXNlZCBhbnltb3JlLgorICAg
ICAgICBBbHNvIHJlbW92ZSB0aGUgbWF4aW11bVNpemUgcGFyYW1ldGVyLCBpdCBpcyBub3QgdXNl
ZCBlaXRoZXIuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51
bXMuY3BwOgorICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyk6Cisg
ICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4pOgorICAgICAgICAq
IHNyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5Lmg6CisgICAgICAgICogc3JjL1dlYklEQkZhY3Rv
cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6OmdldERhdGFi
YXNlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6b3Blbik6Cisg
ICAgICAgICogc3JjL1dlYklEQkZhY3RvcnlJbXBsLmg6CisKIDIwMTEtMTAtMTEgIEFudG9pbmUg
TGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEV4cG9zZSBXZWJMYXllcjo6
aXNOdWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJG
YWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgK
aW5kZXggZmJkMTc1NTcyOGZmYjFiMWY5Y2E2MTQ0ODBiZWM2ZTY2M2NhYzNlNS4uN2QxZDkzNGUx
ZDE4MzA1MTI0NjBhY2MzNWVhMThjY2NiZmRjZGExOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaApAQCAtNTEsMTYgKzUxLDIzIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgfldlYklEQkZhY3RvcnkoKSB7IH0KIAorICAgIC8vIEZJWE1FOiBEZWxl
dGUgd2hlbiBDaHJvbWl1bSByb2xscy4KICAgICBlbnVtIEJhY2tpbmdTdG9yZVR5cGUgewogICAg
ICAgICBEZWZhdWx0QmFja2luZ1N0b3JlLAogICAgICAgICBMZXZlbERCQmFja2luZ1N0b3JlLAog
ICAgICAgICBTUUxpdGVCYWNraW5nU3RvcmUKICAgICB9OwogCi0gICAgdmlydHVhbCB2b2lkIGdl
dERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4m
LCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25n
IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIC8vIEZJWE1FOiBEZWxldGUgd2hlbiBDaHJvbWl1bSByb2xscy4KKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2lu
Z1N0b3JlVHlwZSkgeyBnZXREYXRhYmFzZU5hbWVzKGNhbGxiYWNrcywgb3JpZ2luLCBmcmFtZSwg
ZGF0YURpcik7IH0KKworICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikgeyBnZXREYXRhYmFzZU5hbWVz
KGNhbGxiYWNrcywgb3JpZ2luLCBmcmFtZSwgZGF0YURpciwgMCwgTGV2ZWxEQkJhY2tpbmdTdG9y
ZSk7IH0KKworICAgIC8vIEZJWE1FOiBEZWxldGUgd2hlbiBDaHJvbWl1bSByb2xscy4KKyAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IG9wZW4obmFtZSwgY2FsbGJhY2tzLCBvcmlnaW4sIGZy
YW1lLCBkYXRhRGlyKTsgfQogCiAgICAgLy8gVGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbiBvZiBv
cGVuIGlnbm9yZXMgdGhlIFdlYkZyYW1lKiBwYXJhbWV0ZXIuCi0gICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1
cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5n
JiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpIHsg
b3BlbihuYW1lLCBjYWxsYmFja3MsIG9yaWdpbiwgZnJhbWUsIGRhdGFEaXIsIDAsIExldmVsREJC
YWNraW5nU3RvcmUpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3Qg
V2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdp
biYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
QXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKaW5kZXggOWNkYjhjOTY3MGU1MTE2Yjc4OTNkODJiM2M5
NDMwNDAyYTAxZTYzNi4uMzM3MTkzOWE2OWQyMDAxYTAwZGI3OTQ0YWMyYWU0YTU0NTgzN2U4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVt
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVt
cy5jcHAKQEAgLTM5NywxMCArMzk3LDYgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJJREJLZXk6OlN0cmluZ1R5cGUsIElEQktleTo6U3RyaW5nVHlwZSk7CiBDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdlYklEQktleTo6RGF0ZVR5cGUsIElEQktleTo6RGF0ZVR5cGUpOwog
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJLZXk6Ok51bWJlclR5cGUsIElEQktl
eTo6TnVtYmVyVHlwZSk7CiAKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCRmFj
dG9yeTo6RGVmYXVsdEJhY2tpbmdTdG9yZSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkRl
ZmF1bHRCYWNraW5nU3RvcmUpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJG
YWN0b3J5OjpMZXZlbERCQmFja2luZ1N0b3JlLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6
TGV2ZWxEQkJhY2tpbmdTdG9yZSk7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklE
QkZhY3Rvcnk6OlNRTGl0ZUJhY2tpbmdTdG9yZSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6
OlNRTGl0ZUJhY2tpbmdTdG9yZSk7Ci0KICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVTeXN0ZW06OlR5cGVUZW1wb3JhcnksIEFzeW5j
RmlsZVN5c3RlbTo6VGVtcG9yYXJ5KTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
RmlsZVN5c3RlbTo6VHlwZVBlcnNpc3RlbnQsIEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwCmluZGV4IGQ3ODlmZjUzNmI3NTFmYzBkNmZhYTU5MDE2YTEwZGY1MGRiMjIwM2Yu
LjdhNjJlNTBlYmIxNWE1MmQ1NTU0YzYzNzA0ZTQ5NGFiOTU1NjIwMGEgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBA
IC02NCw3ICs2NCw3IEBAIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6On5JREJGYWN0b3J5QmFja2Vu
ZFByb3h5KCkKIHsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFz
ZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlw
ZSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBw
cnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewogICAgIFdl
YlNlY3VyaXR5T3JpZ2luIG9yaWdpbihwcnBPcmlnaW4pOwogICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CkBAIC03NSwxMCArNzUsMTAg
QEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fd2ViSURCRmFjdG9yeS0+Z2V0RGF0YWJhc2VOYW1lcyhuZXcgV2ViSURCQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgc3Rh
dGljX2Nhc3Q8V2ViSURCRmFjdG9yeTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlw
ZSkpOworICAgIG1fd2ViSURCRmFjdG9yeS0+Z2V0RGF0YWJhc2VOYW1lcyhuZXcgV2ViSURCQ2Fs
bGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAot
dm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRf
dCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQordm9pZCBJ
REJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJw
T3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBXZWJT
ZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKICAgICBXZWJGcmFtZUltcGwqIHdlYkZy
YW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwpAQCAtODgsNyArODgsNyBAQCB2
b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gYwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV93
ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNr
cyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxX
ZWJJREJGYWN0b3J5OjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7CisgICAg
bV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlC
YWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuaAppbmRleCAxZGIwNDYwMGRlM2Y4NzEwZWI1NzE4ZjNiZDkzOTZhZTIyOTg0MTI2
Li5iYWYxZTA1ZTJjOTkyZjkyMWM3ZGQyN2Q0ZmQzMjZlOGE2YWE4NmVkIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00
NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZT4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB+SURCRmFjdG9y
eUJhY2tlbmRQcm94eSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0
X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUp
OworICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNv
cmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZFBy
b3h5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0
b3J5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1w
bC5jcHAKaW5kZXggMmUyYWVhYzNiODZmODBhN2QyNGI3NzU5ZDI2YmYwN2I3MTBiZGZiOS4uMWMw
OTY4YTU1MWMyYzg0MGIwOTAyNTRjNmFkODA0ZDIxMzNmMzA3ZSAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcApAQCAtNTgsMjUgKzU4LDE5
IEBAIFdlYklEQkZhY3RvcnlJbXBsOjp+V2ViSURCRmFjdG9yeUltcGwoKQogewogfQogCi12b2lk
IFdlYklEQkZhY3RvcnlJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0
IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNr
aW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpn
ZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1
cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikK
IHsKICAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CiAKLSAgICBpZiAoYmFja2luZ1N0b3Jl
VHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQotICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0g
TGV2ZWxEQkJhY2tpbmdTdG9yZTsKLQotICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmdldERhdGFi
YXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwg
b3JpZ2luLCAwLCBwYXRoLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8SURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKKyAgICBt
X2lkYkZhY3RvcnlCYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVzKElEQkNhbGxiYWNrc1Byb3h5Ojpj
cmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7CiB9CiAKIAotdm9p
ZCBXZWJJREJGYWN0b3J5SW1wbDo6b3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit2b2lkIFdlYklEQkZh
Y3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBkYXRhRGlyKQogewogICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsK
IAotICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3RvcmUpCi0gICAg
ICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBMZXZlbERCQmFja2luZ1N0b3JlOwotCi0gICAgbV9pZGJG
YWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0
UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgsIG1heGltdW1TaXplLCBzdGF0aWNfY2Fz
dDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0
b3JlVHlwZSkpOworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBwYXRoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRmFjdG9yeUltcGwuaAppbmRleCA5OTQwMzA5Y2Q4NGJhOTk3NDJkYmM1ZDVmMTUw
YzliOTRjMDA0MjIwLi4zZTAxZDFhNjNjODkyNDA2MWY1N2M4NTc3YWVhZjViYjQxNmJjNmMyIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKQEAg
LTQ0LDggKzQ0LDggQEAgcHVibGljOgogICAgIFdlYklEQkZhY3RvcnlJbXBsKCk7CiAgICAgdmly
dHVhbCB+V2ViSURCRmFjdG9yeUltcGwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFz
ZU5hbWVzKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJh
bWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYs
IFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcg
bWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBnZXREYXRh
YmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2Vi
RnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVu
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJp
dHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcik7CiAKIHByaXZh
dGU6CiAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+
IG1faWRiRmFjdG9yeUJhY2tlbmQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110656</attachid>
            <date>2011-10-12 02:34:56 -0700</date>
            <delta_ts>2011-10-14 01:36:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69620-20111012103454.patch</filename>
            <type>text/plain</type>
            <size>76166</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyNDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4YTVhZTAxMzE0ZGJlMWRm
YjE5ZDhjYTY0M2RkOGI1ODhiZGRlZGM0Li5hYWFkZjliOTBiMjk4MjI2NzM4N2RmYWVkMzk2M2Q5
NzNmNTkwMWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTAtMTIgIEhhbnMg
V2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFJlbW92
ZSBTUUxpdGUgYmFja2luZyBzdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Njk2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgdGhlIFNRTGl0ZSBiYWNraW5nIHN0b3JlIGltcGxlbWVudGF0
aW9uOyBpdCBpcyBub3QgdXNlZCBhbnltb3JlLgorICAgICAgICBBbHNvIHJlbW92ZSB0aGUgbWF4
aW11bVNpemUgcGFyYW1ldGVyLCBpdCBpcyBub3QgdXNlZCBlaXRoZXIuCisKKyAgICAgICAgTm8g
bmV3IGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUZpbGVJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6Cisg
ICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6IFJlbW92ZWQuCisKIDIwMTEt
MTAtMTIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEJ1aWxk
IGZpeGVzIGZvciByOTcyMzguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5OTI3
NzhhYjJmMzJiODlkMDc3YjAyMThiMzEwZmViZjAyNjA5NjBkLi4wYjJlYmUzYjRmZGY2MTA1YTZk
ZDljMzRhZmRiZmZmNjJmNGVlYjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTMzOTYsOCArMzM5Niw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJl
cXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaCBcCi0JU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCiAJU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDY5Yzk5
YmM2NWM2NWMyZTk4NDM5NTU3ZjA2MTE5NDUxOTA1YmQ3MDIuLmQwNDg3MTliZDhiMTNkZGIwMjhl
MTNlNjI5YjE3ZWMwMzdmMjYyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ4MjksOCArNDgyOSw2
IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgn
LAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCUmVxdWVzdC5oJywKLSAgICAgICAgICAgICdzdG9yYWdlL0lEQlNRTGl0ZUJhY2tp
bmdTdG9yZS5jcHAnLAotICAgICAgICAgICAgJ3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3Jl
LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAg
ICAgICdzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFj
a2luZ1N0b3JlLmgKaW5kZXggMDI3ZDU1ZmYyOTkzNDBmNDMzM2JhYTUzNWE3ZmQzZDkwZGNhZDVl
OS4uNmUxM2Y0ZmE2MWM0YTIxZDQyYzNmZmRlNWJkYzczZDkxZGRiM2M0MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC0xMDgsNyArMTA4LDYgQEAgcHVibGlj
OgogICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7CiAgICAgfTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOwotICAg
IHZpcnR1YWwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGUgYmFj
a2luZ1N0b3JlVHlwZSgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCmluZGV4IDdhNjZjMjM4MmM0MGY4YmU0
ODVjZWY3OTk0ZDcwZTg0OGY3YWZkNDguLmQyMDE0ZmUyZmM5Njk5NGY5OTRmMTMwMjA5YjllMjlk
M2E0OGU2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcApAQCAtNzIsNyAr
NzIsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFt
ZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCAwKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBh
Z2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9mYWN0b3J5QmFja2VuZC0+Z2V0
RGF0YWJhc2VOYW1lcyhyZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1l
bnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpLCBncm91
cFNldHRpbmdzLT5pbmRleGVkREJRdW90YUJ5dGVzKCksIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpEZWZhdWx0QmFja2luZ1N0b3JlKTsKKyAgICBtX2ZhY3RvcnlCYWNrZW5kLT5nZXREYXRh
YmFzZU5hbWVzKHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+
ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOwogICAgIHJl
dHVybiByZXF1ZXN0OwogfQogCkBAIC05NCw3ICs5NCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwogICAgIEdyb3VwU2V0dGluZ3Mq
IGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3Mo
KTsKLSAgICBtX2ZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhl
ZERCRGF0YWJhc2VQYXRoKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwg
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkRlZmF1bHRCYWNraW5nU3RvcmUpOworICAgIG1f
ZmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFz
ZVBhdGgoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA1MWM1MGM0NTkwMjg0NDNi
NzY2ZjY5MDI3OWZjYjAwYmY0M2RmOTdlLi4wZGVjODcwM2MwMjBhZDE3ZmQzODIyMTg3NzNkMmNl
NWExNTVkZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQlNRTGl0ZUJhY2tpbmdTdG9y
ZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTQzLDE0ICs0
MiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTdHJpbmcgY29tcHV0ZUZp
bGVJZGVudGlmaWVyKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGUgdHlwZSkKK3N0YXRpYyBTdHJpbmcgY29t
cHV0ZUZpbGVJZGVudGlmaWVyKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAg
ICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgU3RyaW5nOjpm
b3JtYXQoIkAlZCIsIHR5cGUpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtMZXZlbERCRmlsZVN1
ZmZpeFtdID0gIkAxIjsKKyAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpICsga0xldmVsREJGaWxlU3VmZml4OwogfQogCi1zdGF0aWMgU3RyaW5nIGNvbXB1dGVV
bmlxdWVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3Vy
aXR5T3JpZ2luLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZSB0
eXBlKQorc3RhdGljIFN0cmluZyBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJpbmcm
IG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICByZXR1cm4gY29t
cHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLCB0eXBlKSArIG5hbWU7CisgICAgcmV0
dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbikgKyBuYW1lOwogfQogCiBJ
REJGYWN0b3J5QmFja2VuZEltcGw6OklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCkBAIC04MCwxMSAr
ODAsOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3Jl
KGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpCiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVt
b3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Omdl
dERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdT
dG9yZVR5cGUpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7Ci0g
ICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7Ci0KLSAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3Jl
KHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgYmFja2luZ1N0b3JlVHlwZSk7
CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdT
dG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcik7CiAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTEwMCwxMiArOTgsOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLAog
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKIH0KIAot
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3Qg
bWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3ZvaWQgSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewotICAgIEFTU0VSVChi
YWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOwotCi0gICAgY29uc3QgU3Ry
aW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBiYWNraW5nU3RvcmVUeXBlKTsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRp
ZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgp
LCBiYWNraW5nU3RvcmVUeXBlKTsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9
IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAog
ICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwogICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5lbmQoKSkgewpAQCAtMTE0LDcgKzEwOSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tl
bmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhCiAgICAgfQogCiAgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxk
IGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpciwg
bWF4aW11bVNpemUsIGJhY2tpbmdTdG9yZVR5cGUpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIpOwogICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwogICAgICAgICByZXR1cm47CkBAIC0xMjUsMjIgKzEy
MCwxOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYQogICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFw
LnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwogfQogCi1QYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2lu
Z1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFj
a2luZ1N0b3JlVHlwZSkKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFj
a2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKLSAgICBBU1NFUlQoYmFja2lu
Z1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3JlKTsKLQotICAgIGNvbnN0IFN0cmluZyBm
aWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQo
KSwgYmFja2luZ1N0b3JlVHlwZSk7CisgICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0g
Y29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKIAogICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBJREJCYWNraW5nU3RvcmVNYXA6
Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwot
ICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkgJiYgKGJhY2tpbmdTdG9yZVR5
cGUgPT0gaXQyLT5zZWNvbmQtPmJhY2tpbmdTdG9yZVR5cGUoKSkpCisgICAgaWYgKGl0MiAhPSBt
X2JhY2tpbmdTdG9yZU1hcC5lbmQoKSkKICAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNv
bmQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IFNRTGl0ZUJh
Y2tpbmdTdG9yZSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQlNRTGl0ZUJhY2tpbmdT
dG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpciwgbWF4aW11bVNpemUsIGZp
bGVJZGVudGlmaWVyLCB0aGlzKTsKICNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgZWxzZSBpZiAo
YmFja2luZ1N0b3JlVHlwZSA9PSBMZXZlbERCQmFja2luZ1N0b3JlKQotICAgICAgICAgICAgYmFj
a2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5n
ZXQoKSwgZGF0YURpciwgbWF4aW11bVNpemUsIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyAgICAg
ICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9y
aWdpbi5nZXQoKSwgZGF0YURpciwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2Vsc2UKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCmluZGV4IGI4MmRiYjZkNDY4Njg5
YWUwYzZkNTYwYmZjYzU4YjBmMGJmZTJlMDEuLjZlZTliYjI0MzAzMzAxZmFjNDE1YWEwNjkwYzYx
YmE0ZjEyZDhkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuaApAQCAtNTUsMTIgKzU1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZElEQkJh
Y2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUq
KTsKICAgICB2b2lkIHJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVu
dGlmaWVyKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
cik7CisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBs
KCk7Ci0gICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUoUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBt
YXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisgICAgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IG9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0
IFN0cmluZyYgZGF0YURpcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRhdGFiYXNl
QmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBhODc2MWM4MDlmMmJl
NzA4Y2E5ZWQzNDZjNDUwNDQzODNiMWM1MmIxLi5jNDAxOGVmZjlkZDY0ZGJjOWI3OTQyZTUwYzNi
MDI1NTI0Mjc3OTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5oCkBAIC01MSwxNSArNTEsOCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgpOwogICAg
IHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CiAKLSAgICBlbnVtIEJh
Y2tpbmdTdG9yZVR5cGUgewotICAgICAgICBEZWZhdWx0QmFja2luZ1N0b3JlLAotICAgICAgICBM
ZXZlbERCQmFja2luZ1N0b3JlLAotICAgICAgICBTUUxpdGVCYWNraW5nU3RvcmUKLSAgICB9Owot
Ci0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
cikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3Bw
CmluZGV4IGQ3ZTNjOWQ0NzJhMjNmNDU2NTQ0MWNhYjEyYmU5MjAyNWM5NGExMTguLmZhNGU1YjM0
ODI2YjFkOTU5ZDU2OTI1ZGJmODQ2ZTVhNDIwMDFlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBA
IElEQkxldmVsREJCYWNraW5nU3RvcmU6On5JREJMZXZlbERCQmFja2luZ1N0b3JlKCkKICAgICBt
X2NvbXBhcmF0b3IuY2xlYXIoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBT
dHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCitQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcs
IGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFj
dG9yeSkKIHsKICAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCAyMzEwYzdm
OWE0NzFiYTBmN2FlNmExYTYxNWE5YWZlMGEyMWJiNzVlLi5jMWQzYWM0ZGJmOThmYmZlZDU0ODky
NDg1NzhlYzhkMmYzYjg0ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBJREJGYWN0b3J5QmFj
a2VuZEltcGw7CiAKIGNsYXNzIElEQkxldmVsREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFj
a2luZ1N0b3JlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBpbnQ2NF90
IG1heGltdW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFj
a2VuZEltcGwqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4o
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZp
bGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKICAgICB2aXJ0dWFsIH5JREJM
ZXZlbERCQmFja2luZ1N0b3JlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CkBAIC03NSw3ICs3NSw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CiAKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7Ci0gICAgdmlydHVhbCBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBl
KCkgY29uc3QgeyByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkxldmVsREJCYWNr
aW5nU3RvcmU7IH0KIAogICAgIHN0YXRpYyBib29sIGJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE2ZGM4MmY3ODY4NzA3MWI3MmI2MTQ5MzEy
MWZjZWRmZmY5NjBkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSURCU1FMaXRlQmFja2luZ1N0b3JlLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQlNRTGl0ZUJhY2tpbmdT
dG9yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQotICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZp
ZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLXsKLSAgICBtX2ZhY3RvcnktPmFkZElEQkJh
Y2tpbmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsKLX0KLQotSURCU1FMaXRlQmFja2luZ1N0b3Jl
Ojp+SURCU1FMaXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkJh
Y2tpbmdTdG9yZShtX2lkZW50aWZpZXIpOwotfQotCi1zdGF0aWMgYm9vbCBydW5Db21tYW5kcyhT
UUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIGNvbnN0IGNoYXIqKiBjb21tYW5kcywgc2l6
ZV90IG51bWJlck9mQ29tbWFuZHMpCi17Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24oc3FsaXRlRGF0YWJhc2UsIGZhbHNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21tYW5kczsgKytpKSB7Ci0gICAgICAg
IGlmICghc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZHNbaV0pKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIGZv
ciBJbmRleGVkREI6ICVzIiwgY29tbWFuZHNbaV0pOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVUYWJsZXMoU1FMaXRlRGF0YWJhc2UmIHNx
bGl0ZURhdGFiYXNlKQotewotICAgIGlmIChzcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cygiRGF0
YWJhc2VzIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b21tYW5kc1tdID0gewotICAgICAgICAiQ1JFQVRFIFRBQkxFIERhdGFiYXNlcyAoaWQgSU5URUdF
UiBQUklNQVJZIEtFWSwgbmFtZSBURVhUIE5PVCBOVUxMLCBkZXNjcmlwdGlvbiBURVhUIE5PVCBO
VUxMLCB2ZXJzaW9uIFRFWFQgTk9UIE5VTEwpIiwKLSAgICAgICAgIkNSRUFURSBVTklRVUUgSU5E
RVggRGF0YWJhc2VzX25hbWUgT04gRGF0YWJhc2VzKG5hbWUpIiwKLQotICAgICAgICAiQ1JFQVRF
IFRBQkxFIE9iamVjdFN0b3JlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUIE5P
VCBOVUxMLCBrZXlQYXRoIFRFWFQsIGRvQXV0b0luY3JlbWVudCBJTlRFR0VSIE5PVCBOVUxMLCBk
YXRhYmFzZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBEYXRhYmFzZXMoaWQpKSIsCi0g
ICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIE9iamVjdFN0b3Jlc19jb21wb3NpdCBPTiBPYmpl
Y3RTdG9yZXMoZGF0YWJhc2VJZCwgbmFtZSkiLAotCi0gICAgICAgICJDUkVBVEUgVEFCTEUgSW5k
ZXhlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBO
VUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBuYW1lIFRFWFQgTk9UIE5VTEwsIGtleVBh
dGggVEVYVCwgaXNVbmlxdWUgSU5URUdFUiBOT1QgTlVMTCkiLAotICAgICAgICAiQ1JFQVRFIFVO
SVFVRSBJTkRFWCBJbmRleGVzX2NvbXBvc2l0IE9OIEluZGV4ZXMob2JqZWN0U3RvcmVJZCwgbmFt
ZSkiLAotCi0gICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VS
IFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBP
YmplY3RTdG9yZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIElOVEVHRVIsIGtleU51bWJl
ciBJTlRFR0VSLCB2YWx1ZSBURVhUIE5PVCBOVUxMKSIsCi0gICAgICAgICJDUkVBVEUgVU5JUVVF
IElOREVYIE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEoa2V5U3Ry
aW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIG9iamVjdFN0b3JlSWQpIiwKLQotICAgICAgICAiQ1JF
QVRFIFRBQkxFIEluZGV4RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgaW5kZXhJZCBJTlRF
R0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgSW5kZXhlcyhpZCksIGtleVN0cmluZyBURVhULCBrZXlE
YXRlIElOVEVHRVIsIGtleU51bWJlciBJTlRFR0VSLCBvYmplY3RTdG9yZURhdGFJZCBJTlRFR0VS
IE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmVEYXRhKGlkKSkiLAotICAgICAgICAiQ1JF
QVRFIElOREVYIEluZGV4RGF0YV9jb21wb3NpdCBPTiBJbmRleERhdGEoa2V5U3RyaW5nLCBrZXlE
YXRlLCBrZXlOdW1iZXIsIGluZGV4SWQpIiwKLSAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERh
dGFfb2JqZWN0U3RvcmVEYXRhSWQgT04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0YUlkKSIsCi0g
ICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2luZGV4SWQgT04gSW5kZXhEYXRhKGluZGV4
SWQpIiwKLSAgICAgICAgfTsKLQotICAgIHJldHVybiBydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFz
ZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKTsKLX0K
LQotc3RhdGljIGJvb2wgY3JlYXRlTWV0YURhdGFUYWJsZShTUUxpdGVEYXRhYmFzZSYgc3FsaXRl
RGF0YWJhc2UpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7Ci0gICAg
ICAgICJDUkVBVEUgVEFCTEUgTWV0YURhdGEgKG5hbWUgVEVYVCBQUklNQVJZIEtFWSwgdmFsdWUg
Tk9ORSkiLAotICAgICAgICAiSU5TRVJUIElOVE8gTWV0YURhdGEgVkFMVUVTICgndmVyc2lvbics
IDEpIiwKLSAgICB9OwotCi0gICAgcmV0dXJuIHJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBj
b21tYW5kcywgc2l6ZW9mKGNvbW1hbmRzKSAvIHNpemVvZihjb21tYW5kc1swXSkpOwotfQotCi1z
dGF0aWMgYm9vbCBnZXREYXRhYmFzZVNjaGVtYVZlcnNpb24oU1FMaXRlRGF0YWJhc2UmIHNxbGl0
ZURhdGFiYXNlLCBpbnQqIGRhdGFiYXNlVmVyc2lvbikKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkoc3FsaXRlRGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBNZXRhRGF0YSBXSEVSRSBu
YW1lID0gJ3ZlcnNpb24nIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
ayB8fCBxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAqZGF0YWJhc2VWZXJzaW9uID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOwotICAgIHJl
dHVybiBxdWVyeS5maW5hbGl6ZSgpID09IFNRTFJlc3VsdE9rOwotfQotCi1zdGF0aWMgYm9vbCBt
aWdyYXRlRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKQotewotICAgIGlm
ICghc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoIk1ldGFEYXRhIikpIHsKLSAgICAgICAgaWYg
KCFjcmVhdGVNZXRhRGF0YVRhYmxlKHNxbGl0ZURhdGFiYXNlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgZGF0YWJhc2VWZXJzaW9uOwotICAgIGlmICghZ2V0
RGF0YWJhc2VTY2hlbWFWZXJzaW9uKHNxbGl0ZURhdGFiYXNlLCAmZGF0YWJhc2VWZXJzaW9uKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGRhdGFiYXNlVmVyc2lvbiA9PSAxKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kc1tdID0gewotICAgICAgICAgICAg
IkRST1AgVEFCTEUgSUYgRVhJU1RTIE9iamVjdFN0b3JlRGF0YTIiLAotICAgICAgICAgICAgIkNS
RUFURSBUQUJMRSBPYmplY3RTdG9yZURhdGEyIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmpl
Y3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIGtl
eVN0cmluZyBURVhULCBrZXlEYXRlIFJFQUwsIGtleU51bWJlciBSRUFMLCB2YWx1ZSBURVhUIE5P
VCBOVUxMKSIsCi0gICAgICAgICAgICAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhMiBTRUxF
Q1QgKiBGUk9NIE9iamVjdFN0b3JlRGF0YSIsCi0gICAgICAgICAgICAiRFJPUCBUQUJMRSBPYmpl
Y3RTdG9yZURhdGEiLCAvLyBUaGlzIGRlcGVuZHMgb24gU1FMaXRlIG5vdCBlbmZvcmNpbmcgcmVm
ZXJlbnRpYWwgY29uc2lzdGVuY3kuCi0gICAgICAgICAgICAiQUxURVIgVEFCTEUgT2JqZWN0U3Rv
cmVEYXRhMiBSRU5BTUUgVE8gT2JqZWN0U3RvcmVEYXRhIiwKLSAgICAgICAgICAgICJDUkVBVEUg
VU5JUVVFIElOREVYIE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEo
a2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIG9iamVjdFN0b3JlSWQpIiwKLSAgICAgICAg
ICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBJbmRleERhdGEyIiwgLy8gVGhpcyBkZXBlbmRzIG9u
IFNRTGl0ZSBub3QgZW5mb3JjaW5nIHJlZmVyZW50aWFsIGNvbnNpc3RlbmN5LgotICAgICAgICAg
ICAgIkNSRUFURSBUQUJMRSBJbmRleERhdGEyIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBpbmRl
eElkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBJbmRleGVzKGlkKSwga2V5U3RyaW5nIFRF
WFQsIGtleURhdGUgUkVBTCwga2V5TnVtYmVyIFJFQUwsIG9iamVjdFN0b3JlRGF0YUlkIElOVEVH
RVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZURhdGEoaWQpKSIsCi0gICAgICAgICAg
ICAiSU5TRVJUIElOVE8gSW5kZXhEYXRhMiBTRUxFQ1QgKiBGUk9NIEluZGV4RGF0YSIsCi0gICAg
ICAgICAgICAiRFJPUCBUQUJMRSBJbmRleERhdGEiLAotICAgICAgICAgICAgIkFMVEVSIFRBQkxF
IEluZGV4RGF0YTIgUkVOQU1FIFRPIEluZGV4RGF0YSIsCi0gICAgICAgICAgICAiQ1JFQVRFIElO
REVYIEluZGV4RGF0YV9jb21wb3NpdCBPTiBJbmRleERhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBr
ZXlOdW1iZXIsIGluZGV4SWQpIiwKLSAgICAgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRh
X29iamVjdFN0b3JlRGF0YUlkIE9OIEluZGV4RGF0YShvYmplY3RTdG9yZURhdGFJZCkiLAotICAg
ICAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERhdGFfaW5kZXhJZCBPTiBJbmRleERhdGEoaW5k
ZXhJZCkiLAotICAgICAgICAgICAgIlVQREFURSBNZXRhRGF0YSBTRVQgdmFsdWUgPSAyIFdIRVJF
IG5hbWUgPSAndmVyc2lvbiciLAotICAgICAgICB9OwotCi0gICAgICAgIGlmICghcnVuQ29tbWFu
ZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNv
bW1hbmRzWzBdKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZGF0YWJh
c2VWZXJzaW9uID0gMjsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YWJhc2VWZXJzaW9uID09IDIpIHsK
LSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHRoZSBPYmplY3RTdG9yZURhdGEudmFsdWUgYmUg
YSBCTE9CIGluc3RlYWQgb2YgVEVYVC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1h
bmRzW10gPSB7Ci0gICAgICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3RvcmVE
YXRhIiwgLy8gVGhpcyBkcm9wcyBhc3NvY2lhdGVkIGluZGljZXMuCi0gICAgICAgICAgICAiQ1JF
QVRFIFRBQkxFIE9iamVjdFN0b3JlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0
U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBrZXlT
dHJpbmcgVEVYVCwga2V5RGF0ZSBSRUFMLCBrZXlOdW1iZXIgUkVBTCwgdmFsdWUgQkxPQiBOT1Qg
TlVMTCkiLAotICAgICAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVEYXRh
X2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJl
ciwgb2JqZWN0U3RvcmVJZCkiLAotICAgICAgICAgICAgIlVQREFURSBNZXRhRGF0YSBTRVQgdmFs
dWUgPSAzIFdIRVJFIG5hbWUgPSAndmVyc2lvbiciLAotICAgICAgICB9OwotCi0gICAgICAgIGlm
ICghcnVuQ29tbWFuZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMp
IC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgZGF0YWJhc2VWZXJzaW9uID0gMzsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Bl
bihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2Us
IGludDY0X3QgbWF4aW11bVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKLXsKLSAgICBSZWZQdHI8SURCU1FMaXRlQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQlNRTGl0ZUJhY2tpbmdTdG9yZShm
aWxlSWRlbnRpZmllciwgZmFjdG9yeSkpKTsKLQotICAgIFN0cmluZyBwYXRoID0gIjptZW1vcnk6
IjsgLy8gaW4tbWVtb3J5IFNRTGl0ZSBkYXRhYmFzZS4KLSAgICBpZiAoIXBhdGhCYXNlLmlzRW1w
dHkoKSkgewotICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhbnkgb3RoZXIgdGhpbmcgd2UgY291bGQgcG9z
c2libHkgZG8gdG8gcmVjb3ZlciBhdCB0aGlzIHBvaW50PyBJZiBzbywgZG8gaXQgcmF0aGVyIHRo
YW4ganVzdCBlcnJvcmluZyBvdXQuCi0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBj
cmVhdGUgSW5kZXhlZCBEQiBkYXRhYmFzZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBwYXRoID0gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJ
ZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYiIpOwotICAgIH0KLQotICAgIGlmICghYmFja2luZ1N0
b3JlLT5tX2RiLm9wZW4ocGF0aCkpIHsKLSAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGFueSBv
dGhlciB0aGluZyB3ZSBjb3VsZCBwb3NzaWJseSBkbyB0byByZWNvdmVyIGF0IHRoaXMgcG9pbnQ/
IElmIHNvLCBkbyBpdCByYXRoZXIgdGhhbiBqdXN0IGVycm9yaW5nIG91dC4KLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBmaWxlICVzIGZvciBJbmRleGVkREIiLCBw
YXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogRXJyb3IgY2hlY2tpbmc/Ci0gICAgYmFja2luZ1N0b3JlLT5tX2RiLnNldE1heGltdW1T
aXplKG1heGltdW1TaXplKTsKLSAgICBiYWNraW5nU3RvcmUtPm1fZGIudHVybk9uSW5jcmVtZW50
YWxBdXRvVmFjdXVtKCk7Ci0KLSAgICBpZiAoIWNyZWF0ZVRhYmxlcyhiYWNraW5nU3RvcmUtPm1f
ZGIpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1pZ3JhdGVEYXRhYmFzZShiYWNraW5n
U3RvcmUtPm1fZGIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBiYWNraW5nU3Rv
cmUucmVsZWFzZSgpOwotfQotCi12b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJh
c2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykKLXsKLSAgICBBU1NFUlQoZm91bmRO
YW1lcy5pc0VtcHR5KCkpOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxF
Q1QgbmFtZSBGUk9NIERhdGFiYXNlcyIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FM
UmVzdWx0T2spIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB3aGlsZSAocXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKLSAg
ICAgICAgZm91bmROYW1lcy5hcHBlbmQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSk7Ci19Ci0KLWJv
b2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQot
ewotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KG1fZGIsICJTRUxFQ1QgaWQsIHZl
cnNpb24gRlJPTSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8iKTsKLSAgICBpZiAoZGF0YWJhc2VR
dWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZGF0YWJhc2VRdWVyeS5i
aW5kVGV4dCgxLCBuYW1lKTsKLSAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVwKCkgIT0gU1FMUmVz
dWx0Um93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZElkID0gZGF0YWJhc2VR
dWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICBmb3VuZFZlcnNpb24gPSBkYXRhYmFzZVF1ZXJ5
LmdldENvbHVtblRleHQoMSk7Ci0KLSAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVwKCkgPT0gU1FM
UmVzdWx0Um93KQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OnNldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJv
d0lkLCBib29sIGludmFsaWRSb3dJZCkKLXsKLSAgICBBU1NFUlQoIW5hbWUuaXNOdWxsKCkpOwot
ICAgIEFTU0VSVCghdmVyc2lvbi5pc051bGwoKSk7Ci0KLSAgICBTdHJpbmcgc3FsID0gaW52YWxp
ZFJvd0lkID8gIklOU0VSVCBJTlRPIERhdGFiYXNlcyAobmFtZSwgZGVzY3JpcHRpb24sIHZlcnNp
b24pIFZBTFVFUyAoPywgJycsID8pIiA6ICJVUERBVEUgRGF0YWJhc2VzIFNFVCBuYW1lID0gPywg
dmVyc2lvbiA9ID8gV0hFUkUgaWQgPSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9k
Yiwgc3FsKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcXVlcnkuYmluZFRleHQoMSwgbmFtZSk7Ci0gICAgcXVlcnkuYmluZFRleHQoMiwgdmVy
c2lvbik7Ci0gICAgaWYgKCFpbnZhbGlkUm93SWQpCi0gICAgICAgIHF1ZXJ5LmJpbmRJbnQ2NCgz
LCByb3dJZCk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpbnZhbGlkUm93SWQpCi0gICAgICAgIHJvd0lk
ID0gbV9kYi5sYXN0SW5zZXJ0Um93SUQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0lu
Y3JlbWVudEZsYWdzKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNU
IGlkLCBuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQgRlJPTSBPYmplY3RTdG9yZXMgV0hF
UkUgZGF0YWJhc2VJZCA9ID8iKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZz8KLQotICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOwotICAgIEFT
U0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MuaXNFbXB0eSgpKTsK
LQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBkYXRhYmFzZUlkKTsKLQotICAgIHdoaWxlIChxdWVy
eS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIGZvdW5kSWRzLmFwcGVuZChxdWVy
eS5nZXRDb2x1bW5JbnQ2NCgwKSk7Ci0gICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKHF1ZXJ5Lmdl
dENvbHVtblRleHQoMSkpOwotICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChxdWVyeS5nZXRD
b2x1bW5UZXh0KDIpKTsKLSAgICAgICAgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MuYXBwZW5kKCEh
cXVlcnkuZ2V0Q29sdW1uSW50KDMpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2lu
Z1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0
X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYiwgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlcyAobmFtZSwga2V5UGF0aCwgZG9BdXRvSW5j
cmVtZW50LCBkYXRhYmFzZUlkKSBWQUxVRVMgKD8sID8sID8sID8pIik7Ci0gICAgaWYgKHF1ZXJ5
LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cXVlcnkuYmluZFRleHQoMSwgbmFtZSk7Ci0gICAgcXVlcnkuYmluZFRleHQoMiwga2V5UGF0aCk7
Ci0gICAgcXVlcnkuYmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KGF1dG9JbmNyZW1lbnQpKTsK
LSAgICBxdWVyeS5iaW5kSW50NjQoNCwgZGF0YWJhc2VJZCk7Ci0KLSAgICBpZiAocXVlcnkuc3Rl
cCgpICE9IFNRTFJlc3VsdERvbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvRGVsZXRlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3Qg
Y2hhciogc3FsLCBpbnQ2NF90IGlkKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVRdWVy
eShkYiwgc3FsKTsKLSAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJl
c3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZy4KLSAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwotICAgIG9rID0g
ZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7Ci0gICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgotfQotCi12b2lkIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQotewotICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEg
V0hFUkUgaW5kZXhJZCBJTiAoU0VMRUNUIGlkIEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPykiLCBvYmplY3RTdG9yZUlkKTsKLSAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZS
T00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwotICAg
IGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0
U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsKLSAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRF
IEZST00gT2JqZWN0U3RvcmVzIFdIRVJFIGlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwotfQotCi1u
YW1lc3BhY2UgewotY2xhc3MgU1FMaXRlUmVjb3JkSWRlbnRpZmllciA6IHB1YmxpYyBJREJCYWNr
aW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1FMaXRlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IFNRTGl0ZVJlY29yZElkZW50aWZpZXIoKSk7IH0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTUUxpdGVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoaW50NjRfdCBpZCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFNRTGl0ZVJlY29yZElkZW50aWZpZXIoaWQpKTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZCAhPSAtMTsgfQotICAgIGludDY0
X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgdm9pZCBzZXRJZChpbnQ2NF90IGlk
KSB7IG1faWQgPSBpZDsgfQotcHJpdmF0ZToKLSAgICBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKCkg
OiBtX2lkKC0xKSB7IH0KLSAgICBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKGludDY0X3QgaWQpIDog
bV9pZChpZCkgeyB9Ci0gICAgaW50NjRfdCBtX2lkOwotfTsKLX0KLQotUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCU1FMaXRlQmFja2lu
Z1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCi17Ci0gICAgcmV0dXJuIFNR
TGl0ZVJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwotfQotCi1zdGF0aWMgU3RyaW5nIHdoZXJl
U3ludGF4Rm9yS2V5KGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcgcXVhbGlmaWVkVGFibGVOYW1l
ID0gIiIpCi17Ci0gICAgc3dpdGNoIChrZXkudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0
cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5n
ID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5E
ICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOwotICAgIGNh
c2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICByZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1l
ICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
RGF0ZSBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyID0g
PyAgIjsKLSAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiBxdWFsaWZp
ZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxl
TmFtZSArICJrZXlEYXRlID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51
bWJlciBJUyBOVUxMICAiOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAgICAgcmV0
dXJuIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFi
bGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKLX0KLQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGl0ZW1zIGJvdW5kLgotc3RhdGljIGludCBiaW5kS2V5VG9RdWVyeShTUUxpdGVTdGF0ZW1lbnQm
IHF1ZXJ5LCBpbnQgY29sdW1uLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBzd2l0Y2ggKGtl
eS50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKLSAgICAgICAgcXVlcnku
YmluZFRleHQoY29sdW1uLCBrZXkuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICBj
YXNlIElEQktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29sdW1uLCBr
ZXkuZGF0ZSgpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBJREJLZXk6Ok51bWJlclR5
cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29sdW1uLCBrZXkubnVtYmVyKCkpOwotICAg
ICAgICByZXR1cm4gMTsKLSAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwot
fQotCi1zdGF0aWMgU3RyaW5nIGxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVudChjb25zdCBJREJLZXkm
IGtleSwgU3RyaW5nIGNvbXBhcmlzb25PcGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRhYmxlTmFt
ZSA9ICIiKQotewotICAgIHN3aXRjaCAoa2V5LnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5OjpT
dHJpbmdUeXBlOgotICAgICAgICByZXR1cm4gIj8gIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIg
IiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgIEFORCAgIjsKLSAgICBjYXNlIElE
QktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiAiKD8gIiArIGNvbXBhcmlzb25PcGVyYXRv
ciArICIgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlICBPUiBOT1QgIiArIHF1YWxp
ZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCkgIEFORCAgIjsKLSAgICBjYXNlIElE
QktleTo6TnVtYmVyVHlwZToKLSAgICAgICAgcmV0dXJuICIoPyAiICsgY29tcGFyaXNvbk9wZXJh
dG9yICsgIiAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciAgT1IgIE5PVCAiICsg
cXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBPUiAgTk9UICIgKyBxdWFs
aWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMKSAgQU5EICAiOwotICAgIGNhc2UgSURC
S2V5OjpOdWxsVHlwZToKLSAgICAgICAgaWYgKGNvbXBhcmlzb25PcGVyYXRvciA9PSAiPCIpCi0g
ICAgICAgICAgICByZXR1cm4gIk5PVCgiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmlu
ZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxM
ICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyIElTIE5VTEwpICBBTkQg
ICI7Ci0gICAgICAgIHJldHVybiAiIjsgLy8gSWYgaXQncyA9LCB0aGUgdXBwZXIgYm91bmQgaGFs
ZiB3aWxsIGRvIHRoZSBjb25zdHJhaW5pbmcuIElmIGl0J3MgPD0sIHRoZW4gdGhhdCdzIGEgbm8t
b3AuCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKLX0K
LQotc3RhdGljIFN0cmluZyB1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQoY29uc3QgSURCS2V5JiBr
ZXksIFN0cmluZyBjb21wYXJpc29uT3BlcmF0b3IsIFN0cmluZyBxdWFsaWZpZWRUYWJsZU5hbWUg
PSAiIikKLXsKLSAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleTo6U3Ry
aW5nVHlwZToKLSAgICAgICAgcmV0dXJuICIoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlT
dHJpbmcgIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIgPyAgT1IgICIgKyBxdWFsaWZpZWRUYWJs
ZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwpICBBTkQgICI7Ci0gICAgY2FzZSBJREJLZXk6OkRh
dGVUeXBlOgotICAgICAgICByZXR1cm4gIigiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURh
dGUgIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIgPyBPUiAiICsgcXVhbGlmaWVkVGFibGVOYW1l
ICsgImtleURhdGUgSVMgTlVMTCkgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlT
dHJpbmcgSVMgTlVMTCAgQU5EICAiOwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAg
ICAgICByZXR1cm4gIigiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciAiICsgY29t
cGFyaXNvbk9wZXJhdG9yICsgIiA/IE9SICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVt
YmVyIElTIE5VTEwpICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElT
IE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwgIEFO
RCAgIjsKLSAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6Ci0gICAgICAgIGlmIChjb21wYXJpc29u
T3BlcmF0b3IgPT0gIjwiKQotICAgICAgICAgICAgcmV0dXJuICIwICE9IDAgIEFORCAgIjsKLSAg
ICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5E
ICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICBBTkQgICI7Ci0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKLX0KLQotU3RyaW5nIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYiwgIlNFTEVDVCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFsdWUg
RlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5EICIgKyB3aGVy
ZVN5bnRheEZvcktleShrZXkpKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZz8KLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsK
LSAgICBiaW5kS2V5VG9RdWVyeShxdWVyeSwgMiwga2V5KTsKLSAgICBpZiAocXVlcnkuc3RlcCgp
ICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAvLyBOdWxsIFN0cmlu
ZyBtZWFucyByZWNvcmQgbm90IGZvdW5kLgotCi0gICAgQVNTRVJUKChrZXkudHlwZSgpID09IElE
QktleTo6U3RyaW5nVHlwZSkgIT0gcXVlcnkuaXNDb2x1bW5OdWxsKDApKTsKLSAgICBBU1NFUlQo
KGtleS50eXBlKCkgPT0gSURCS2V5OjpEYXRlVHlwZSkgIT0gcXVlcnkuaXNDb2x1bW5OdWxsKDEp
KTsKLSAgICBBU1NFUlQoKGtleS50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSAhPSBxdWVy
eS5pc0NvbHVtbk51bGwoMikpOwotCi0gICAgU3RyaW5nIHJlY29yZCA9IHF1ZXJ5LmdldENvbHVt
bkJsb2JBc1N0cmluZygzKTsKLSAgICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJv
dyk7Ci0KLSAgICByZXR1cm4gcmVjb3JkOwotfQotCi1zdGF0aWMgdm9pZCBiaW5kS2V5VG9RdWVy
eVdpdGhOdWxscyhTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbiwgY29uc3Qg
SURCS2V5JiBrZXkpCi17Ci0gICAgc3dpdGNoIChrZXkudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJL
ZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGJhc2VDb2x1bW4gKyAwLCBr
ZXkuc3RyaW5nKCkpOwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMSk7Ci0g
ICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29s
dW1uICsgMCk7Ci0gICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoYmFzZUNvbHVtbiArIDEsIGtleS5k
YXRlKCkpOwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICBxdWVyeS5iaW5k
TnVsbChiYXNlQ29sdW1uICsgMCk7Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4g
KyAxKTsKLSAgICAgICAgcXVlcnkuYmluZERvdWJsZShiYXNlQ29sdW1uICsgMiwga2V5Lm51bWJl
cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAg
ICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMCk7Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxs
KGJhc2VDb2x1bW4gKyAxKTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpwdXRPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJl
Y29yZElkZW50aWZpZXIpCi17Ci0gICAgU1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3FsaXRlUmVj
b3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFNRTGl0ZVJlY29yZElkZW50aWZpZXIqPihyZWNv
cmRJZGVudGlmaWVyKTsKLQotICAgIFN0cmluZyBzcWwgPSBzcWxpdGVSZWNvcmRJZGVudGlmaWVy
LT5pc1ZhbGlkKCkgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0YSBTRVQga2V5U3RyaW5nID0gPywg
a2V5RGF0ZSA9ID8sIGtleU51bWJlciA9ID8sIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNFUlQg
SU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1
ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYmluZEtleVRvUXVlcnlXaXRo
TnVsbHMocXVlcnksIDEsIGtleSk7Ci0gICAgcXVlcnkuYmluZEJsb2IoNCwgdmFsdWUpOwotICAg
IGlmIChzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pc1ZhbGlkKCkpCi0gICAgICAgIHF1ZXJ5LmJp
bmRJbnQ2NCg1LCBzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pZCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBvYmplY3RTdG9yZUlkKTsKLQotICAgIGlmIChxdWVyeS5z
dGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pc1ZhbGlkKCkpCi0gICAgICAgIHNxbGl0ZVJlY29y
ZElkZW50aWZpZXItPnNldElkKG1fZGIubGFzdEluc2VydFJvd0lEKCkpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3Jl
KGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBkb0RlbGV0ZShtX2RiLCAi
REVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0b3JlRGF0YUlkIElOIChTRUxFQ1Qg
aWQgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8pIiwgb2JqZWN0
U3RvcmVJZCk7Ci0gICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJl
Y29yZElkZW50aWZpZXIpCi17Ci0gICAgY29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3Fs
aXRlUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IFNRTGl0ZVJlY29yZElkZW50
aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoc3FsaXRlUmVjb3JkSWRlbnRp
Zmllci0+aXNWYWxpZCgpKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBvc1F1ZXJ5KG1fZGIsICJE
RUxFVEUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/Iik7Ci0gICAgYm9vbCBvayA9
IG9zUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ss
IG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIG9zUXVlcnkuYmlu
ZEludDY0KDEsIHNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlkKCkpOwotCi0gICAgb2sgPSBvc1F1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsK
LX0KLQotZG91YmxlIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1i
ZXIoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RiLCAiU0VMRUNUIG1heChrZXlOdW1iZXIpICsgMSBGUk9NIE9iamVjdFN0b3Jl
RGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBBTkQga2V5U3RyaW5nIElTIE5VTEwgQU5EIGtl
eURhdGUgSVMgTlVMTCIpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVz
dWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgcXVlcnkuYmluZEludDY0
KDEsIG9iamVjdFN0b3JlSWQpOwotCi0gICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRS
b3cgfHwgcXVlcnkuaXNDb2x1bW5OdWxsKDApKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJl
dHVybiBxdWVyeS5nZXRDb2x1bW5Eb3VibGUoMCk7Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2lu
Z1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5JiBrZXksIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91
bmRSZWNvcmRJZGVudGlmaWVyKQotewotICAgIFNRTGl0ZVJlY29yZElkZW50aWZpZXIqIHNxbGl0
ZVJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxTUUxpdGVSZWNvcmRJZGVudGlmaWVyKj4o
Zm91bmRSZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVD
VCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBBTkQgIikg
KyB3aGVyZVN5bnRheEZvcktleShrZXkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2Ri
LCBzcWwpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0g
ICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5n
PwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSWQpOwotICAgIGJpbmRLZXlU
b1F1ZXJ5KHF1ZXJ5LCAyLCBrZXkpOwotCi0gICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1
bHRSb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNxbGl0ZVJlY29yZElkZW50aWZp
ZXItPnNldElkKHF1ZXJ5LmdldENvbHVtbkludDY0KDApKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sm
IGNhbGxiYWNrKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGlk
LCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIpOwot
ICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsKLQotICAgIHdo
aWxlIChxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhSWQgPSBxdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAgU3RyaW5n
IHZhbHVlID0gcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpOwotICAgICAgICBSZWZQdHI8
U1FMaXRlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IFNRTGl0ZVJlY29yZElk
ZW50aWZpZXI6OmNyZWF0ZShvYmplY3RTdG9yZURhdGFJZCk7Ci0gICAgICAgIGlmICghY2FsbGJh
Y2suY2FsbGJhY2socmVjb3JkSWRlbnRpZmllci5nZXQoKSwgdmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVz
LCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1
ZUZsYWdzKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGlkLCBu
YW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0U3RvcmVJZCA9
ID8iKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8K
LQotICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChmb3VuZE5hbWVz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0eSgpKTsKLSAgICBB
U1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOwotCi0gICAgcXVlcnkuYmluZEludDY0
KDEsIG9iamVjdFN0b3JlSWQpOwotCi0gICAgd2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1
bHRSb3cpIHsKLSAgICAgICAgZm91bmRJZHMuYXBwZW5kKHF1ZXJ5LmdldENvbHVtbkludDY0KDAp
KTsKLSAgICAgICAgZm91bmROYW1lcy5hcHBlbmQocXVlcnkuZ2V0Q29sdW1uVGV4dCgxKSk7Ci0g
ICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKHF1ZXJ5LmdldENvbHVtblRleHQoMikpOwotICAg
ICAgICBmb3VuZFVuaXF1ZUZsYWdzLmFwcGVuZCghIXF1ZXJ5LmdldENvbHVtbkludCgzKSk7Ci0g
ICAgfQotfQotCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRf
dCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCkKLXsKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIEluZGV4ZXMgKG9iamVjdFN0b3Jl
SWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlKSBWQUxVRVMgKD8sID8sID8sID8pIik7Ci0gICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSWQpOwotICAgIHF1ZXJ5LmJp
bmRUZXh0KDIsIG5hbWUpOwotICAgIHF1ZXJ5LmJpbmRUZXh0KDMsIGtleVBhdGgpOwotICAgIHF1
ZXJ5LmJpbmRJbnQoNCwgc3RhdGljX2Nhc3Q8aW50Pihpc1VuaXF1ZSkpOwotCi0gICAgaWYgKHF1
ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpbmRleElkID0gbV9kYi5sYXN0SW5zZXJ0Um93SUQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGludDY0X3QsIGludDY0
X3QsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00g
SW5kZXhlcyBXSEVSRSBpZCA9ID8iLCBpbmRleElkKTsKLSAgICBkb0RlbGV0ZShtX2RiLCAiREVM
RVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXhJZCk7Ci19Ci0KLWJv
b2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCwg
aW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIGNvbnN0IFNR
TGl0ZVJlY29yZElkZW50aWZpZXIqIHNxbGl0ZVJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2Fz
dDxjb25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIEluZGV4RGF0YSAoa2V5
U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIGluZGV4SWQsIG9iamVjdFN0b3JlRGF0YUlkKSBW
QUxVRVMgKD8sID8sID8sID8sID8pIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYmluZEtleVRvUXVlcnlXaXRo
TnVsbHMocXVlcnksIDEsIGtleSk7Ci0gICAgcXVlcnkuYmluZEludDY0KDQsIGluZGV4SWQpOwot
ICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pZCgpKTsKLQot
ICAgIHJldHVybiBxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLX0KLQotYm9vbCBJREJT
UUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2
NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBjb25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBz
cWxpdGVSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRl
bnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVEYXRhSWQgPSA/
IEFORCBpbmRleElkID0gPyIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBzcWxp
dGVSZWNvcmRJZGVudGlmaWVyLT5pZCgpKTsKLSAgICBxdWVyeS5iaW5kSW50NjQoMiwgaW5kZXhJ
ZCk7Ci0gICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotfQotCi1TdHJp
bmcgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90LCBpbnQ2
NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAgIFN0cmluZyBz
cWwgPSBTdHJpbmcoIlNFTEVDVCAiKQotICAgICAgICAgICAgICAgICArICJPYmplY3RTdG9yZURh
dGEudmFsdWUgIgotICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5FUiBKT0lO
IE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBPYmplY3RT
dG9yZURhdGEuaWQgIgotICAgICAgICAgICAgICAgICArICJXSEVSRSBJbmRleERhdGEuaW5kZXhJ
ZCA9ID8gIEFORCAgIiArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSwgIkluZGV4RGF0YS4iKQotICAg
ICAgICAgICAgICAgICArICJPUkRFUiBCWSBJbmRleERhdGEuaWQgTElNSVQgMSI7IC8vIE9yZGVy
IGJ5IGluc2VydGlvbiBvcmRlciB3aGVuIGFsbCBlbHNlIGZhaWxzLgotICAgIFNRTGl0ZVN0YXRl
bWVudCBxdWVyeShtX2RiLCBzcWwpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPwotCi0gICAgcXVlcnkuYmluZEludDY0KDEsIGluZGV4SWQpOwotICAg
IGJpbmRLZXlUb1F1ZXJ5KHF1ZXJ5LCAyLCBrZXkpOwotCi0gICAgaWYgKHF1ZXJ5LnN0ZXAoKSAh
PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFN0cmluZyBm
b3VuZFZhbHVlID0gcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDApOwotICAgIEFTU0VSVChx
dWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KTsKLSAgICByZXR1cm4gZm91bmRWYWx1ZTsKLX0K
LQotc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBrZXlGcm9tUXVlcnkoU1FMaXRlU3RhdGVtZW50
JiBxdWVyeSwgaW50IGJhc2VDb2x1bW4pCi17Ci0gICAgaWYgKHF1ZXJ5LmNvbHVtbkNvdW50KCkg
PD0gYmFzZUNvbHVtbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXF1ZXJ5LmlzQ29s
dW1uTnVsbChiYXNlQ29sdW1uKSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5n
KHF1ZXJ5LmdldENvbHVtblRleHQoYmFzZUNvbHVtbikpOwotCi0gICAgaWYgKCFxdWVyeS5pc0Nv
bHVtbk51bGwoYmFzZUNvbHVtbiArIDEpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVE
YXRlKHF1ZXJ5LmdldENvbHVtbkRvdWJsZShiYXNlQ29sdW1uICsgMSkpOwotCi0gICAgaWYgKCFx
dWVyeS5pc0NvbHVtbk51bGwoYmFzZUNvbHVtbiArIDIpKQotICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGVOdW1iZXIocXVlcnkuZ2V0Q29sdW1uRG91YmxlKGJhc2VDb2x1bW4gKyAyKSk7Ci0K
LSAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdWxsKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5
PiBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90LCBp
bnQ2NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAgIFN0cmlu
ZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQotICAgICAgICAgICAgICAgICArICJPYmplY3RTdG9y
ZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3RvcmVEYXRh
LmtleU51bWJlciAiCi0gICAgICAgICAgICAgICAgICsgIkZST00gSW5kZXhEYXRhIElOTkVSIEpP
SU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmplY3RTdG9yZURhdGFJZCA9IE9iamVj
dFN0b3JlRGF0YS5pZCAiCi0gICAgICAgICAgICAgICAgICsgIldIRVJFIEluZGV4RGF0YS5pbmRl
eElkID0gPyAgQU5EICAiICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5LCAiSW5kZXhEYXRhLiIpCi0g
ICAgICAgICAgICAgICAgICsgIk9SREVSIEJZIEluZGV4RGF0YS5pZCBMSU1JVCAxIjsgLy8gT3Jk
ZXIgYnkgaW5zZXJ0aW9uIG9yZGVyIHdoZW4gYWxsIGVsc2UgZmFpbHMuCi0gICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBxdWVyeS5iaW5kSW50NjQoMSwgaW5kZXhJZCk7Ci0g
ICAgYmluZEtleVRvUXVlcnkocXVlcnksIDIsIGtleSk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgp
ICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SURCS2V5
PiBmb3VuZEtleSA9IGtleUZyb21RdWVyeShxdWVyeSwgMCk7Ci0gICAgQVNTRVJUKHF1ZXJ5LnN0
ZXAoKSAhPSBTUUxSZXN1bHRSb3cpOwotICAgIHJldHVybiBmb3VuZEtleS5yZWxlYXNlKCk7Ci19
Ci0KLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0X3Qs
IGludDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRy
PElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKLXsKLSAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJT
RUxFQ1QgaWQgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCA9ID8gQU5EICIpICsgd2hlcmVT
eW50YXhGb3JLZXkoaW5kZXhLZXkpOwotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBz
cWwpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAg
QVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwot
Ci0gICAgcXVlcnkuYmluZEludDY0KDEsIGluZGV4SWQpOwotICAgIGJpbmRLZXlUb1F1ZXJ5KHF1
ZXJ5LCAyLCBpbmRleEtleSk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJv
dykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91bmRQcmltYXJ5S2V5ID0gZ2V0UHJp
bWFyeUtleVZpYUluZGV4KDAsIDAsIGluZGV4SWQsIGluZGV4S2V5KTsKLSAgICBBU1NFUlQoZm91
bmRQcmltYXJ5S2V5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotY2xh
c3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJREJTUUxpdGVCYWNraW5nU3RvcmU6OkN1cnNv
ciB7Ci1wdWJsaWM6Ci0gICAgQ3Vyc29ySW1wbENvbW1vbihTUUxpdGVEYXRhYmFzZSYgc3FsaXRl
RGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVuZXNzQ29uc3RyYWludCwgYm9vbCBp
dGVyYXRlRm9yd2FyZCkKLSAgICAgICAgOiBtX3F1ZXJ5KHNxbGl0ZURhdGFiYXNlLCBxdWVyeSkK
LSAgICAgICAgLCBtX2RiKHNxbGl0ZURhdGFiYXNlKQotICAgICAgICAsIG1fdW5pcXVlbmVzc0Nv
bnN0cmFpbnQodW5pcXVlbmVzc0NvbnN0cmFpbnQpCi0gICAgICAgICwgbV9pdGVyYXRlRm9yd2Fy
ZChpdGVyYXRlRm9yd2FyZCkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgfkN1cnNvckltcGxD
b21tb24oKSB7fQotCi0gICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFs
IGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqKTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9
Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlk
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIHsgbV9xdWVyeS5maW5hbGl6ZSgpOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGN1cnJlbnRSb3dFeGlzdHMoKSA9IDA7Ci0KLSAgICBTUUxpdGVTdGF0ZW1lbnQgbV9xdWVy
eTsKLQotcHJvdGVjdGVkOgotICAgIFNRTGl0ZURhdGFiYXNlJiBtX2RiOwotICAgIGJvb2wgbV91
bmlxdWVuZXNzQ29uc3RyYWludDsKLSAgICBib29sIG1faXRlcmF0ZUZvcndhcmQ7Ci0gICAgaW50
NjRfdCBtX2N1cnJlbnRJZDsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7Ci19Owot
Ci1ib29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBr
ZXkpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKG1fcXVlcnkuc3RlcCgpICE9
IFNRTFJlc3VsdFJvdykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBvbGRLZXkgPSBtX2N1cnJlbnRLZXk7Ci0gICAgICAgIGxvYWRDdXJyZW50Um93
KCk7Ci0KLSAgICAgICAgLy8gU2tpcCBpZiB0aGlzIGVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQgZnJv
bSB0aGUgb2JqZWN0IHN0b3JlLgotICAgICAgICBpZiAoIWN1cnJlbnRSb3dFeGlzdHMoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIElmIGEga2V5IHdhcyBzdXBwbGllZCwg
d2UgbXVzdCBsb29wIHVudGlsIHdlIGZpbmQgYSBrZXkgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IGl0IChvciBoaXQgdGhlIGVuZCkuCi0gICAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgICAgIGlm
IChtX2l0ZXJhdGVGb3J3YXJkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEtleS0+
aXNMZXNzVGhhbihrZXkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGtleS0+aXNMZXNzVGhhbihtX2N1cnJl
bnRLZXkuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSB1bmlxdWVuZXNz
IGNvbnN0cmFpbnQsIHdlIGNhbiBzdG9wIG5vdy4KLSAgICAgICAgaWYgKCFtX3VuaXF1ZW5lc3ND
b25zdHJhaW50KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghbV9jdXJyZW50S2V5
LT5pc0VxdWFsKG9sZEtleS5nZXQoKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGlj
IEN1cnNvckltcGxDb21tb24gewotcHVibGljOgotICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChT
UUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVu
ZXNzQ29uc3RyYWludCwgYm9vbCBpdGVyYXRlRm9yd2FyZCkKLSAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKHNxbGl0ZURhdGFiYXNlLCBxdWVyeSwgdW5pcXVlbmVzc0NvbnN0cmFpbnQsIGl0ZXJh
dGVGb3J3YXJkKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uLgotICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgcmV0dXJuIFNRTGl0ZVJlY29y
ZElkZW50aWZpZXI6OmNyZWF0ZShtX2N1cnJlbnRJZCk7IH0KLSAgICB2aXJ0dWFsIGludDY0X3Qg
aW5kZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgdm9pZCBsb2FkQ3VycmVudFJvdygpOwotICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50Um93
RXhpc3RzKCk7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOwotfTsKLQot
dm9pZCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKLXsKLSAgICBtX2N1
cnJlbnRJZCA9IG1fcXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgbV9jdXJyZW50S2V5ID0g
a2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDEpOwotICAgIG1fY3VycmVudFZhbHVlID0gbV9xdWVyeS5n
ZXRDb2x1bW5CbG9iQXNTdHJpbmcoNCk7Ci19Ci0KLWJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
OjpjdXJyZW50Um93RXhpc3RzKCkKLXsKLSAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCBpZCBGUk9N
IE9iamVjdFN0b3JlRGF0YSBXSEVSRSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYiwgc3FsKTsKLQotICAgIGJvb2wgb2sgPSBzdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMSwgbV9jdXJyZW50SWQpOwotICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTFJlc3VsdFJvdzsKLX0KLQotY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDogcHVibGlj
IEN1cnNvckltcGxDb21tb24gewotcHVibGljOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChTUUxp
dGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVuZXNz
Q29uc3RyYWludCwgYm9vbCBpdGVyYXRlRm9yd2FyZCkKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29t
bW9uKHNxbGl0ZURhdGFiYXNlLCBxdWVyeSwgdW5pcXVlbmVzc0NvbnN0cmFpbnQsIGl0ZXJhdGVG
b3J3YXJkKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudFBy
aW1hcnlLZXk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0
dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSB7IHJldHVybiBtX2N1cnJlbnRJZDsgfQotICAgIHZp
cnR1YWwgdm9pZCBsb2FkQ3VycmVudFJvdygpOwotICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50Um93
RXhpc3RzKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50UHJpbWFy
eUtleTsKLX07Ci0KLXZvaWQgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17
Ci0gICAgbV9jdXJyZW50SWQgPSBtX3F1ZXJ5LmdldENvbHVtbkludDY0KDApOwotICAgIG1fY3Vy
cmVudEtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCAxKTsKLSAgICBtX2N1cnJlbnRQcmltYXJ5
S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDQpOwotfQotCi1ib29sIEluZGV4S2V5Q3Vyc29y
SW1wbDo6Y3VycmVudFJvd0V4aXN0cygpCi17Ci0gICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQg
RlJPTSBJbmRleERhdGEgV0hFUkUgaWQgPSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGIsIHNxbCk7Ci0KLSAgICBib29sIG9rID0gc3RhdGVtZW50LnByZXBhcmUoKSA9PSBT
UUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDEsIG1fY3VycmVudElkKTsKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxSZXN1bHRSb3c7Ci19Ci0KLWNsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJz
b3JJbXBsQ29tbW9uIHsKLXB1YmxpYzoKLSAgICBJbmRleEN1cnNvckltcGwoU1FMaXRlRGF0YWJh
c2UmIHNxbGl0ZURhdGFiYXNlLCBTdHJpbmcgcXVlcnksIGJvb2wgdW5pcXVlbmVzc0NvbnN0cmFp
bnQsIGJvb2wgaXRlcmF0ZUZvcndhcmQpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihzcWxp
dGVEYXRhYmFzZSwgcXVlcnksIHVuaXF1ZW5lc3NDb25zdHJhaW50LCBpdGVyYXRlRm9yd2FyZCkK
LSAgICB7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5
OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsg
fQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQo
KSB7IHJldHVybiBtX2N1cnJlbnRJZDsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ3VycmVudFJv
dygpOwotICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50Um93RXhpc3RzKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50UHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV9jdXJy
ZW50VmFsdWU7Ci19OwotCi12b2lkIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQot
ewotICAgIG1fY3VycmVudElkID0gbV9xdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICBtX2N1
cnJlbnRLZXkgPSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgMSk7Ci0gICAgbV9jdXJyZW50VmFsdWUg
PSBtX3F1ZXJ5LmdldENvbHVtbkJsb2JBc1N0cmluZyg0KTsKLSAgICBtX2N1cnJlbnRQcmltYXJ5
S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDUpOwotfQotCi1ib29sIEluZGV4Q3Vyc29ySW1w
bDo6Y3VycmVudFJvd0V4aXN0cygpCi17Ci0gICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQgRlJP
TSBJbmRleERhdGEgV0hFUkUgaWQgPSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGIsIHNxbCk7Ci0KLSAgICBib29sIG9rID0gc3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxS
ZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBzdGF0ZW1lbnQuYmlu
ZEludDY0KDEsIG1fY3VycmVudElkKTsKLSAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxSZXN1bHRSb3c7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLVBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJh
bmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgYm9vbCBsb3dlckJv
dW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPnVwcGVyKCk7Ci0KLSAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCBpZCwga2V5
U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdI
RVJFICI7Ci0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIHNxbCArPSBsb3dlckN1cnNvcldo
ZXJlRnJhZ21lbnQoKnJhbmdlLT5sb3dlcigpLCByYW5nZS0+bG93ZXJPcGVuKCkgPyAiPCIgOiAi
PD0iKTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAgICAgc3FsICs9IHVwcGVyQ3Vyc29yV2hl
cmVGcmFnbWVudCgqcmFuZ2UtPnVwcGVyKCksIHJhbmdlLT51cHBlck9wZW4oKSA/ICI8IiA6ICI8
PSIpOwotICAgIHNxbCArPSAib2JqZWN0U3RvcmVJZCA9ID8gT1JERVIgQlkgIjsKLQotICAgIGlm
IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFRfTk9fRFVQTElDQVRFKQotICAgICAgICBzcWwgKz0gImtleVN0cmluZywga2V5RGF0ZSwg
a2V5TnVtYmVyIjsKLSAgICBlbHNlCi0gICAgICAgIHNxbCArPSAia2V5U3RyaW5nIERFU0MsIGtl
eURhdGUgREVTQywga2V5TnVtYmVyIERFU0MiOwotCi0gICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vy
c29ySW1wbD4gY3Vyc29yID0gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbChtX2Ri
LCBzcWwsIGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFIHx8IGRpcmVj
dGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9u
ID09IElEQkN1cnNvcjo6TkVYVCkpOwotCi0gICAgYm9vbCBvayA9IGN1cnNvci0+bV9xdWVyeS5w
cmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBG
SVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgaW50IGN1cnJlbnRDb2x1bW4gPSAx
OwotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBjdXJyZW50Q29sdW1uICs9IGJpbmRLZXlU
b1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgY3VycmVudENvbHVtbiwgKnJhbmdlLT5sb3dlcigpKTsK
LSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAgICAgY3VycmVudENvbHVtbiArPSBiaW5kS2V5VG9R
dWVyeShjdXJzb3ItPm1fcXVlcnksIGN1cnJlbnRDb2x1bW4sICpyYW5nZS0+dXBwZXIoKSk7Ci0g
ICAgY3Vyc29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChjdXJyZW50Q29sdW1uLCBvYmplY3RTdG9yZUlk
KTsKLQotICAgIGlmIChjdXJzb3ItPm1fcXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjdXJzb3ItPmxvYWRDdXJyZW50Um93KCk7Ci0gICAgcmV0
dXJuIGN1cnNvci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3Qs
IGludDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgU3RyaW5nIHNxbCA9IFN0cmluZygi
U0VMRUNUIEluZGV4RGF0YS5pZCwgSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURh
dGUsIEluZGV4RGF0YS5rZXlOdW1iZXIsICIpCi0gICAgICAgICAgICAgICAgICsgKCJPYmplY3RT
dG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3RvcmVE
YXRhLmtleU51bWJlciAiKQotICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5F
UiBKT0lOIE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBP
YmplY3RTdG9yZURhdGEuaWQgV0hFUkUgIjsKLQotICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdl
ICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdl
LT51cHBlcigpOwotCi0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIHNxbCArPSBsb3dlckN1
cnNvcldoZXJlRnJhZ21lbnQoKnJhbmdlLT5sb3dlcigpLCByYW5nZS0+bG93ZXJPcGVuKCkgPyAi
PCIgOiAiPD0iLCAiSW5kZXhEYXRhLiIpOwotICAgIGlmICh1cHBlckJvdW5kKQotICAgICAgICBz
cWwgKz0gdXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwgcmFuZ2UtPnVw
cGVyT3BlbigpID8gIjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKLSAgICBzcWwgKz0gIkluZGV4
RGF0YS5pbmRleElkID0gPyBPUkRFUiBCWSAiOwotCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBJREJD
dXJzb3I6Ok5FWFQgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUp
Ci0gICAgICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUs
IEluZGV4RGF0YS5rZXlOdW1iZXIsIEluZGV4RGF0YS5pZCI7Ci0gICAgZWxzZQotICAgICAgICBz
cWwgKz0gIkluZGV4RGF0YS5rZXlTdHJpbmcgREVTQywgSW5kZXhEYXRhLmtleURhdGUgREVTQywg
SW5kZXhEYXRhLmtleU51bWJlciBERVNDLCBJbmRleERhdGEuaWQgREVTQyI7Ci0KLSAgICBSZWZQ
dHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJz
b3JJbXBsKG1fZGIsIHNxbCwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNB
VEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJl
Y3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKSk7Ci0KLSAgICBib29sIG9rID0gY3Vyc29yLT5tX3F1
ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBpbnQgaW5kZXhDb2x1bW4g
PSAxOwotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBpbmRleENvbHVtbiArPSBiaW5kS2V5
VG9RdWVyeShjdXJzb3ItPm1fcXVlcnksIGluZGV4Q29sdW1uLCAqcmFuZ2UtPmxvd2VyKCkpOwot
ICAgIGlmICh1cHBlckJvdW5kKQotICAgICAgICBpbmRleENvbHVtbiArPSBiaW5kS2V5VG9RdWVy
eShjdXJzb3ItPm1fcXVlcnksIGluZGV4Q29sdW1uLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAgIGN1
cnNvci0+bV9xdWVyeS5iaW5kSW50NjQoaW5kZXhDb2x1bW4sIGluZGV4SWQpOwotCi0gICAgaWYg
KGN1cnNvci0+bV9xdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGN1cnNvci0+bG9hZEN1cnJlbnRSb3coKTsKLSAgICByZXR1cm4gY3Vyc29yLnJl
bGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCU1FM
aXRlQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCwgaW50NjRfdCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKLXsKLSAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgSW5kZXhEYXRh
LmlkLCBJbmRleERhdGEua2V5U3RyaW5nLCBJbmRleERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtl
eU51bWJlciwgIikKLSAgICAgICAgICAgICAgICAgKyAoIk9iamVjdFN0b3JlRGF0YS52YWx1ZSwg
T2JqZWN0U3RvcmVEYXRhLmtleVN0cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVj
dFN0b3JlRGF0YS5rZXlOdW1iZXIgIikKLSAgICAgICAgICAgICAgICAgKyAiRlJPTSBJbmRleERh
dGEgSU5ORVIgSk9JTiBPYmplY3RTdG9yZURhdGEgT04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0
YUlkID0gT2JqZWN0U3RvcmVEYXRhLmlkIFdIRVJFICI7Ci0KLSAgICBib29sIGxvd2VyQm91bmQg
PSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAm
JiByYW5nZS0+dXBwZXIoKTsKLQotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBzcWwgKz0g
bG93ZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+bG93ZXIoKSwgcmFuZ2UtPmxvd2VyT3Bl
bigpID8gIjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAg
ICAgICAgc3FsICs9IHVwcGVyQ3Vyc29yV2hlcmVGcmFnbWVudCgqcmFuZ2UtPnVwcGVyKCksIHJh
bmdlLT51cHBlck9wZW4oKSA/ICI8IiA6ICI8PSIsICJJbmRleERhdGEuIik7Ci0gICAgc3FsICs9
ICJJbmRleERhdGEuaW5kZXhJZCA9ID8gT1JERVIgQlkgIjsKLQotICAgIGlmIChkaXJlY3Rpb24g
PT0gSURCQ3Vyc29yOjpORVhUIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQ
TElDQVRFKQotICAgICAgICBzcWwgKz0gIkluZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5r
ZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVyLCBJbmRleERhdGEuaWQiOwotICAgIGVsc2UKLSAg
ICAgICAgc3FsICs9ICJJbmRleERhdGEua2V5U3RyaW5nIERFU0MsIEluZGV4RGF0YS5rZXlEYXRl
IERFU0MsIEluZGV4RGF0YS5rZXlOdW1iZXIgREVTQywgSW5kZXhEYXRhLmlkIERFU0MiOwotCi0g
ICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gYWRvcHRSZWYobmV3IEluZGV4Q3Vy
c29ySW1wbChtX2RiLCBzcWwsIGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElD
QVRFIHx8IGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVZfTk9fRFVQTElDQVRFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9u
ID09IElEQkN1cnNvcjo6TkVYVCkpOwotCi0gICAgYm9vbCBvayA9IGN1cnNvci0+bV9xdWVyeS5w
cmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBG
SVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgaW50IGluZGV4Q29sdW1uID0gMTsK
LSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgaW5kZXhDb2x1bW4gKz0gYmluZEtleVRvUXVl
cnkoY3Vyc29yLT5tX3F1ZXJ5LCBpbmRleENvbHVtbiwgKnJhbmdlLT5sb3dlcigpKTsKLSAgICBp
ZiAodXBwZXJCb3VuZCkKLSAgICAgICAgaW5kZXhDb2x1bW4gKz0gYmluZEtleVRvUXVlcnkoY3Vy
c29yLT5tX3F1ZXJ5LCBpbmRleENvbHVtbiwgKnJhbmdlLT51cHBlcigpKTsKLSAgICBjdXJzb3It
Pm1fcXVlcnkuYmluZEludDY0KGluZGV4Q29sdW1uLCBpbmRleElkKTsKLQotICAgIGlmIChjdXJz
b3ItPm1fcXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBjdXJzb3ItPmxvYWRDdXJyZW50Um93KCk7Ci0gICAgcmV0dXJuIGN1cnNvci5yZWxlYXNl
KCk7Ci19Ci0KLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMo
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgcGF0aEJhc2UpCi17Ci0gICAgU3RyaW5nIHBhdGggPSAiOm1lbW9yeToiOyAvLyBp
bi1tZW1vcnkgU1FMaXRlIGRhdGFiYXNlLgotICAgIGlmICghcGF0aEJhc2UuaXNFbXB0eSgpKQot
ICAgICAgICBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0
eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYiIpOwotICAgIFNRTGl0
ZURhdGFiYXNlIGRiOwotICAgIGlmICghZGIub3BlbihwYXRoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFiYXNlUXVlcnkoZGIsICJTRUxFQ1QgaWQs
IHZlcnNpb24gRlJPTSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8iKTsKLSAgICBpZiAoZGF0YWJh
c2VRdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGRhdGFiYXNlUXVlcnkuYmluZFRleHQoMSwgbmFtZSk7Ci0gICAgcmV0dXJuIChkYXRh
YmFzZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpOwotfQotCi1uYW1lc3BhY2UgewotCi1j
bGFzcyBUcmFuc2FjdGlvbkltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biB7Ci1wdWJsaWM6Ci0gICAgVHJhbnNhY3Rpb25JbXBsKFNRTGl0ZURhdGFiYXNlJiBkYikKLSAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKGRiKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgeyBtX3RyYW5z
YWN0aW9uLmJlZ2luKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgeyBtX3RyYW5zYWN0
aW9uLmNvbW1pdCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCkgeyBtX3RyYW5zYWN0
aW9uLnJvbGxiYWNrKCk7IH0KLQotcHJpdmF0ZToKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiBtX3Ry
YW5zYWN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5zYWN0
aW9uKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uSW1wbChtX2RiKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0
b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNGJhYWJkMmE5MDAyMDE3N2Ew
MzRiZDc3YmJlNDMwYTIwZTNlNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlNRTGl0
ZUJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIElEQlNRTGl0ZUJhY2tpbmdTdG9yZV9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7
Ci0KLWNsYXNzIElEQlNRTGl0ZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4aW11bVNp
emUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCop
OwotICAgIHZpcnR1YWwgfklEQlNRTGl0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgdmlydHVhbCB2
b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwotICAgIHZp
cnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50
NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3Mp
OwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNy
ZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdl
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgZG91YmxlIG5leHRBdXRv
SW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwotCi0gICAgdmlydHVhbCBi
b29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOwotCi0gICAgdmlydHVh
bCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVz
LCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1
ZUZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVj
dFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFs
IGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8
SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJz
b3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1
cnNvcjo6RGlyZWN0aW9uKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4g
Y3JlYXRlVHJhbnNhY3Rpb24oKTsKLSAgICB2aXJ0dWFsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUoKSBjb25zdCB7IHJldHVybiBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6U1FMaXRlQmFja2luZ1N0b3JlOyB9Ci0KLSAgICBz
dGF0aWMgYm9vbCBiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UpOwotCi1wcml2YXRlOgotICAgIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbCopOwotCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9kYjsKLSAgICBTdHJpbmcgbV9pZGVu
dGlmaWVyOwotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJTUUxp
dGVCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiMTcyY2Q5ZWIz
YzM2YjI0MWE0Yjc2NzM1ZTJkMDNkYWE4MGQ1ODg3Li42ODhjNmFmM2YzMmFkMzMyYjQ3YzRlOGVl
OTM0ZGEyMWVkOGNlODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDExLTEwLTEyICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgSW5kZXhlZERCOiBSZW1vdmUgU1FMaXRlIGJhY2tpbmcgc3RvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBTUUxpdGUgYmFj
a2luZyBzdG9yZSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgbm90IHVzZWQgYW55bW9yZS4KKyAgICAg
ICAgQWxzbyByZW1vdmUgdGhlIG1heGltdW1TaXplIHBhcmFtZXRlciwgaXQgaXMgbm90IHVzZWQg
ZWl0aGVyLgorCisgICAgICAgICogcHVibGljL1dlYklEQkZhY3RvcnkuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYklEQkZhY3Rvcnk6Om9wZW4pOgorICAgICAgICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1z
LmNwcDoKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMpOgorICAg
ICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKToKKyAgICAgICAgKiBz
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkZhY3RvcnlJbXBsOjpnZXREYXRhYmFz
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6Om9wZW4pOgorICAg
ICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEwLTExICBTdGV2ZSBWYW5E
ZUJvZ2FydCAgPHZhbmRlYm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWRk
IGFjY2Vzc29yIGZvciBwbHVnaW4gcmVxdWVzdCB0byBub3Qgc2NhbGUgcHJpbnQgb3V0cHV0Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCmluZGV4IGZi
ZDE3NTU3MjhmZmIxYjFmOWNhNjE0NDgwYmVjNmU2NjNjYWMzZTUuLjdkMWQ5MzRlMWQxODMwNTEy
NDYwYWNjMzVlYTE4Y2NjYmZkY2RhMTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJREJGYWN0b3J5LmgKQEAgLTUxLDE2ICs1MSwyMyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5XZWJJREJGYWN0b3J5KCkgeyB9CiAKKyAgICAvLyBGSVhNRTogRGVsZXRlIHdoZW4g
Q2hyb21pdW0gcm9sbHMuCiAgICAgZW51bSBCYWNraW5nU3RvcmVUeXBlIHsKICAgICAgICAgRGVm
YXVsdEJhY2tpbmdTdG9yZSwKICAgICAgICAgTGV2ZWxEQkJhY2tpbmdTdG9yZSwKICAgICAgICAg
U1FMaXRlQmFja2luZ1N0b3JlCiAgICAgfTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFz
ZU5hbWVzKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJh
bWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
KyAgICAvLyBGSVhNRTogRGVsZXRlIHdoZW4gQ2hyb21pdW0gcm9sbHMuCisgICAgdmlydHVhbCB2
b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdl
YlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5n
JiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUpIHsgZ2V0RGF0YWJhc2VOYW1lcyhjYWxsYmFja3MsIG9yaWdpbiwgZnJhbWUsIGRhdGFEaXIp
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpIHsgZ2V0RGF0YWJhc2VOYW1lcyhjYWxsYmFj
a3MsIG9yaWdpbiwgZnJhbWUsIGRhdGFEaXIsIDAsIExldmVsREJCYWNraW5nU3RvcmUpOyB9CisK
KyAgICAvLyBGSVhNRTogRGVsZXRlIHdoZW4gQ2hyb21pdW0gcm9sbHMuCisgICAgdmlydHVhbCB2
b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNr
cywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFj
a2luZ1N0b3JlVHlwZSkgeyBvcGVuKG5hbWUsIGNhbGxiYWNrcywgb3JpZ2luLCBmcmFtZSwgZGF0
YURpcik7IH0KIAogICAgIC8vIFRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25v
cmVzIHRoZSBXZWJGcmFtZSogcGFyYW1ldGVyLgotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBs
b25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
V2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmln
aW4sIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKSB7IG9wZW4obmFt
ZSwgY2FsbGJhY2tzLCBvcmlnaW4sIGZyYW1lLCBkYXRhRGlyLCAwLCBMZXZlbERCQmFja2luZ1N0
b3JlKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3Nl
cnRNYXRjaGluZ0VudW1zLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1h
dGNoaW5nRW51bXMuY3BwCmluZGV4IDljZGI4Yzk2NzBlNTExNmI3ODkzZDgyYjNjOTQzMDQwMmEw
MWU2MzYuLjMzNzE5MzlhNjlkMjAwMWEwMGRiNzk0NGFjMmFlNGE1NDU4MzdlODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCkBA
IC0zOTcsMTAgKzM5Nyw2IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCS2V5
OjpTdHJpbmdUeXBlLCBJREJLZXk6OlN0cmluZ1R5cGUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXZWJJREJLZXk6OkRhdGVUeXBlLCBJREJLZXk6OkRhdGVUeXBlKTsKIENPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCS2V5OjpOdW1iZXJUeXBlLCBJREJLZXk6Ok51bWJl
clR5cGUpOwogCi1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYklEQkZhY3Rvcnk6OkRl
ZmF1bHRCYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpEZWZhdWx0QmFj
a2luZ1N0b3JlKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViSURCRmFjdG9yeTo6
TGV2ZWxEQkJhY2tpbmdTdG9yZSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkxldmVsREJC
YWNraW5nU3RvcmUpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJJREJGYWN0b3J5
OjpTUUxpdGVCYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpTUUxpdGVC
YWNraW5nU3RvcmUpOwotCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJGaWxlU3lzdGVtOjpUeXBlVGVtcG9yYXJ5LCBBc3luY0ZpbGVTeXN0
ZW06OlRlbXBvcmFyeSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkZpbGVTeXN0
ZW06OlR5cGVQZXJzaXN0ZW50LCBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNw
cAppbmRleCBkNzg5ZmY1MzZiNzUxZmMwZDZmYWE1OTAxNmExMGRmNTBkYjIyMDNmLi43YTYyZTUw
ZWJiMTVhNTJkNTU1NGM2MzcwNGU0OTRhYjk1NTYyMDBhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtNjQsNyAr
NjQsNyBAQCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojp+SURCRmFjdG9yeUJhY2tlbmRQcm94eSgp
CiB7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyhQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBwcnBPcmlnaW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2
NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit2b2lk
IElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2lu
LCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBXZWJTZWN1cml0
eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0g
V2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwpAQCAtNzUsMTAgKzc1LDEwIEBAIHZvaWQg
SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3dlYklE
QkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJh
Y2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0
PFdlYklEQkZhY3Rvcnk6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKKyAg
ICBtX3dlYklEQkZhY3RvcnktPmdldERhdGFiYXNlTmFtZXMobmV3IFdlYklEQkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKLXZvaWQgSURC
RmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9y
aWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11
bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3ZvaWQgSURCRmFjdG9y
eUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwg
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgV2ViU2VjdXJpdHlP
cmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBJREJG
YWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd2ViSURCRmFj
dG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmln
aW4sIHdlYkZyYW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8V2ViSURCRmFj
dG9yeTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOworICAgIG1fd2ViSURC
RmFjdG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBv
cmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmgKaW5kZXggMWRiMDQ2MDBkZTNmODcxMGViNTcxOGYzYmQ5Mzk2YWUyMjk4NDEyNi4uYmFmMWUw
NWUyYzk5MmY5MjFjN2RkMjdkNGZkMzI2ZThhNmFhODZlZCAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaApAQCAtNDQsOCArNDQs
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5k
UHJveHkoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmlu
ZGV4IDJlMmFlYWMzYjg2ZjgwYTdkMjRiNzc1OWQyNmJmMDdiNzEwYmRmYjkuLjFjMDk2OGE1NTFj
MmM4NDBiMDkwMjU0YzZhZDgwNGQyMTMzZjMwN2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKQEAgLTU4LDI1ICs1OCwxOSBAQCBXZWJJ
REJGYWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIHsKIH0KIAotdm9pZCBXZWJJREJG
YWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJp
bmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3Jl
VHlwZSBiYWNraW5nU3RvcmVUeXBlKQordm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJh
c2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAg
V2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOwogCi0gICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0g
RGVmYXVsdEJhY2tpbmdTdG9yZSkKLSAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IExldmVsREJC
YWNraW5nU3RvcmU7Ci0KLSAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5nZXREYXRhYmFzZU5hbWVz
KElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwg
MCwgcGF0aCwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7CisgICAgbV9pZGJGYWN0
b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFk
b3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOwogfQogCiAKLXZvaWQgV2ViSURC
RmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBj
b25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwg
QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQordm9pZCBXZWJJREJGYWN0b3J5SW1w
bDo6b3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0
cmluZyYgZGF0YURpcikKIHsKICAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CiAKLSAgICBp
ZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQotICAgICAgICBiYWNr
aW5nU3RvcmVUeXBlID0gTGV2ZWxEQkJhY2tpbmdTdG9yZTsKLQotICAgIG1faWRiRmFjdG9yeUJh
Y2tlbmQtPm9wZW4obmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxs
YmFja3MpKSwgb3JpZ2luLCAwLCBwYXRoLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUp
KTsKKyAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5
OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRmFjdG9yeUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkZhY3RvcnlJbXBsLmgKaW5kZXggOTk0MDMwOWNkODRiYTk5NzQyZGJjNWQ1ZjE1MGM5Yjk0YzAw
NDIyMC4uM2UwMWQxYTYzYzg5MjQwNjFmNTdjODU3N2FlYWY1YmI0MTZiYzZjMiAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCkBAIC00NCw4ICs0
NCw4IEBAIHB1YmxpYzoKICAgICBXZWJJREJGYWN0b3J5SW1wbCgpOwogICAgIHZpcnR1YWwgfldl
YklEQkZhY3RvcnlJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJh
Y2tpbmdTdG9yZVR5cGUpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFt
ZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBX
ZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2lu
JiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAg
IFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2lkYkZh
Y3RvcnlCYWNrZW5kOwo=
</data>
<flag name="review"
          id="108222"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>