<?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>44695</bug_id>
          
          <creation_ts>2010-08-26 10:38:34 -0700</creation_ts>
          <short_desc>Add index insertion support to IndexedDB.</short_desc>
          <delta_ts>2010-09-06 04:19:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>269950</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-26 10:38:34 -0700</bug_when>
    <thetext>Add index insertion support to IndexedDB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269951</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-26 10:40:55 -0700</bug_when>
    <thetext>+ Darin to look at the asserts I&apos;ve added to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269954</commentid>
    <comment_count>2</comment_count>
      <attachid>65579</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-26 10:42:12 -0700</bug_when>
    <thetext>Created attachment 65579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272072</commentid>
    <comment_count>3</comment_count>
      <attachid>66046</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-31 06:55:01 -0700</bug_when>
    <thetext>Created attachment 66046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272152</commentid>
    <comment_count>4</comment_count>
      <attachid>66046</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-31 09:52:51 -0700</bug_when>
    <thetext>Comment on attachment 66046
Patch

&gt; +++ b/WebKit/chromium/public/WebVector.h
&gt; @@ -115,8 +115,16 @@ public:
&gt;      size_t size() const { return m_size; }
&gt;      bool isEmpty() const { return !m_size; }
&gt;  
&gt; -    T&amp; operator[](size_t i) { return m_ptr[i]; }
&gt; -    const T&amp; operator[](size_t i) const { return m_ptr[i]; }
&gt; +    T&amp; operator[](size_t i)
&gt; +    {
&gt; +        WEBKIT_ASSERT(i &lt; m_size);
&gt; +        return m_ptr[i];
&gt; +    }
&gt; +    const T&amp; operator[](size_t i) const
&gt; +    {
&gt; +        WEBKIT_ASSERT(i &lt; m_size);
&gt; +        return m_ptr[i];
&gt; +    }
&gt;  
&gt;      T* data() { return m_ptr; }
&gt;      const T* data() const { return m_ptr; }

LGTM for the above change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273442</commentid>
    <comment_count>5</comment_count>
      <attachid>66046</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-02 10:41:47 -0700</bug_when>
    <thetext>Comment on attachment 66046
Patch

Steve did a review with me on my computer.  His 2 comments:

&gt; doDelete(sqliteDatabase(), &quot;DELETE FROM IndexData WHERE indexId IN (SELECT id FROM Indexes WHERE objectStoreId = ?)&quot;, objectStore-&gt;id());

Index on the indexID.



? static void putObjectStoreData(SQLiteDatabase&amp; db, bool isExistingValue, IDBKey* key, SerializedScriptValue* value, int64_t objectStoreId, int64_t* dataRowId)

get rid of isExistingValue..just key off of dataRowId</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273904</commentid>
    <comment_count>6</comment_count>
      <attachid>66486</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-03 06:24:20 -0700</bug_when>
    <thetext>Created attachment 66486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273916</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-03 06:55:55 -0700</bug_when>
    <thetext>Attachment 66486 did not build on chromium:
Build output: http://queues.webkit.org/results/3948085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273919</commentid>
    <comment_count>8</comment_count>
      <attachid>66486</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-09-03 06:59:02 -0700</bug_when>
    <thetext>Comment on attachment 66486
Patch

IDBObjectStoreBackendImpl.cpp:128
Oops!

r=me, subject to typo fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274438</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-05 09:29:15 -0700</bug_when>
    <thetext>Will land after next webkit roll.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274530</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-06 03:33:54 -0700</bug_when>
    <thetext>Committed r66820: &lt;http://trac.webkit.org/changeset/66820&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274544</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-06 04:19:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66820 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65579</attachid>
            <date>2010-08-26 10:42:12 -0700</date>
            <delta_ts>2010-08-31 06:54:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44695-20100826184209.patch</filename>
            <type>text/plain</type>
            <size>32116</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxYTE0YWI0OGY3MGE5YjRlNWUxNThlM2Q3NmYzNTMyNTcyN2Q1ODIzLi41NGZmYWMy
ZDZmNmFlNmU2YzRhNTdjMTJlNDhmMzFkNzdiNWNhODA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDgtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGluZGV4IGluc2Vy
dGlvbiBzdXBwb3J0IHRvIEluZGV4ZWREQi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0Njk1CisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9v
YmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL3NjcmlwdC10ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanM6CisgICAgICAgIChjcmVhdGVT
dWNjZXNzKToKKyAgICAgICAgKGFkZEluZGV4U3VjY2Vzcyk6CisgICAgICAgIChnZXRTdWNjZXNz
KToKKwogMjAxMC0wOC0yNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2tpcCBhIGZsYWtleSB0ZXN0LgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1l
eHBlY3RlZC50eHQKaW5kZXggMTA1MDU4ZDcyYzJhNGM3NTI2ZDYyYTQ5NDI5N2M0Y2QzOTgwNDI2
OS4uYTYwZTg1NzZiNjQ5YjQ1OWQ2Mzk4NmEwM2MwNTA3MGExODQ3OWYwZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNp
Y3MtZXhwZWN0ZWQudHh0CkBAIC01MCw3ICs1MCwyOCBAQCBQQVNTIHN0b3JlLm5hbWUgaXMgInN0
b3JlTmFtZSIKIFBBU1Mgc3RvcmUua2V5UGF0aCBpcyBudWxsCiBQQVNTIHN0b3JlTmFtZXMuY29u
dGFpbnMoJ3N0b3JlTmFtZScpIGlzIHRydWUKIFBBU1Mgc3RvcmVOYW1lcy5sZW5ndGggaXMgMQot
c3RvcmUuYWRkKCd2YWx1ZScsICdrZXknKQorZXZlbnQucmVzdWx0LmNyZWF0ZUluZGV4KCdpbmRl
eE5hbWUnLCAneCcpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdv
bmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVl
CitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZp
cmUgc2hvcnRseS4uLgorCithZGRJbmRleFN1Y2Nlc3MoKToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6
CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlz
IGZhbHNlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBp
biBldmVudCBpcyB0cnVlCitQQVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1Mg
J29uc3VjY2VzcycgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2
ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUK
K1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRh
cmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK1BBU1MgZXZlbnQuc291cmNl
LmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIGlzIHRydWUKK2V2ZW50LnNvdXJjZS5h
ZGQoe3g6ICd2YWx1ZSd9LCAna2V5JykKIFBBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRy
dWUKIFBBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCiBQQVNTICdhYm9ydCcgaW4gcmVz
dWx0IGlzIHRydWUKQEAgLTkyLDcgKzExMyw3IEBAIFBBU1MgJ2Fib3J0JyBpbiBldmVudC50YXJn
ZXQgaXMgdHJ1ZQogUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKIFBB
U1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKIAotUEFTUyBl
dmVudC5yZXN1bHQgaXMgInZhbHVlIgorUEFTUyBldmVudC5yZXN1bHQueCBpcyAidmFsdWUiCiBz
dG9yZSA9IGV2ZW50LnNvdXJjZQogc3RvcmUucmVtb3ZlKCdrZXknKQogUEFTUyAnb25zdWNjZXNz
JyBpbiByZXN1bHQgaXMgdHJ1ZQpAQCAtMTE4LDMgKzEzOSw0IEBAIFBBU1MgZXZlbnQucmVzdWx0
IGlzIG51bGwKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVz
dHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
c2NyaXB0LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qcwppbmRleCA2MzY3NWFkMDVkMzY5NTY2
MDY4OWQ3YTNmZmE5MjRjZjMxNDcxNTEyLi40OThhNmMxN2M3YzM3MWYyMThlZGY1MGYwMTJiNzMy
NzY3M2I3MDFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3Jp
cHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKQEAgLTM1LDkgKzM1
LDIxIEBAIGZ1bmN0aW9uIGNyZWF0ZVN1Y2Nlc3MoKQogICAgIHNob3VsZEJlTnVsbCgic3RvcmUu
a2V5UGF0aCIpOwogICAgIHNob3VsZEJlKCJzdG9yZU5hbWVzLmNvbnRhaW5zKCdzdG9yZU5hbWUn
KSIsICJ0cnVlIik7CiAgICAgc2hvdWxkQmUoInN0b3JlTmFtZXMubGVuZ3RoIiwgIjEiKTsKLSAg
ICAvLyBGSVhNRTogdGVzdCBzdG9yZS5pbmRleE5hbWVzLCBhcyB3ZWxsIGFzIGFsbCBvYmplY3Qg
c3RvcmUncyBtZXRob2RzLgorICAgIC8vIEZJWE1FOiB0ZXN0IGFsbCBvZiBvYmplY3Qgc3RvcmUn
cyBtZXRob2RzLgogCi0gICAgcmVzdWx0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCd2YWx1ZScs
ICdrZXknKSIpOworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImV2ZW50LnJlc3VsdC5jcmVhdGVJ
bmRleCgnaW5kZXhOYW1lJywgJ3gnKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAg
IHJlc3VsdC5vbnN1Y2Nlc3MgPSBhZGRJbmRleFN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gYWRkSW5kZXhTdWNjZXNz
KCkKK3sKKwlkZWJ1ZygiYWRkSW5kZXhTdWNjZXNzKCk6Iik7CisJdmVyaWZ5U3VjY2Vzc0V2ZW50
KGV2ZW50KTsKKwlzaG91bGRCZVRydWUoImV2ZW50LnNvdXJjZS5pbmRleE5hbWVzLmNvbnRhaW5z
KCdpbmRleE5hbWUnKSIpOworCisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZXZlbnQuc291cmNl
LmFkZCh7eDogJ3ZhbHVlJ30sICdrZXknKSIpOwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwog
ICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBhZGRTdWNjZXNzOwogICAgIHJlc3VsdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CkBAIC02MCw3ICs3Miw3IEBAIGZ1bmN0aW9uIGdldFN1
Y2Nlc3MoKQogewogICAgIGRlYnVnKCJnZXRTdWNjZXNzKCk6Iik7CiAgICAgdmVyaWZ5U3VjY2Vz
c0V2ZW50KGV2ZW50KTsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LnJlc3VsdCIs
ICJ2YWx1ZSIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQucmVzdWx0LngiLCAi
dmFsdWUiKTsKICAgICB2YXIgc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IGV2ZW50LnNvdXJj
ZSIpOwogCiAgICAgcmVzdWx0ID0gZXZhbEFuZExvZygic3RvcmUucmVtb3ZlKCdrZXknKSIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
YzA0ZmI3MzM4MzJhZTJjMDQ5ZDQxMDI5NzAwNzZhNjlhOTU4NGI1Li43N2IwMDQzZDliNTJhNjI5
OGIzYjA5OGFhOWJkNGZkYTYxM2FjMmM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTA4LTI2ICBKZXJl
bXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbmRleCBpbnNlcnRpb24gc3VwcG9ydCB0byBJ
bmRleGVkREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NDY5NQorCisgICAgICAgIFdoZW5ldmVyIHlvdSBpbnNlcnQgYW4gaXRlbSBpbnRvIGFuIE9i
amVjdFN0b3JlLCBpdCBzaG91bGQgdXNlIGFsbAorICAgICAgICBpbmRleGVzJyBrZXkgcGF0aHMg
dG8gaW5zZXJ0IGNvcnJlc3BvbmRpbmcgZW50cmllcyBpbnRvIGVhY2ggaW5kZXguCisgICAgICAg
IEFsc28gZGF0YSBzaG91bGQgYmUgZGVsZXRlZCBvdXQgb2YgdGhlIGluZGV4IHdoZW4gaXQgZ29l
cyBhd2F5LgorCisgICAgICAgIE5vdCBtdWNoIHRlc3RpbmcgeWV0IHNpbmNlIHRoZXJlJ3Mgbm8g
d2F5IHRvIGRpcmVjdGx5IG9ic2VydmUgaW5kZXhlcy4KKyAgICAgICAgTW9yZSB3aWxsIGJlIGlu
IG5leHQgcGF0Y2guCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRhYmxlcyk6CisgICAgICAgICogc3RvcmFnZS9JREJJ
bmRleC5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmJpbmRXaGVy
ZUNsYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdL
ZXlBbGxvd2VkKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmlkKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OndoZXJlU3ludGF4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXk6OmJpbmRXaXRoTnVsbHMpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5Lmg6CisgICAgICAg
ICogc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndoZXJlQ2xhdXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmJpbmRXaGVyZUNsYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hL
ZXlGcm9tS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpwdXRPYmplY3RTdG9yZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6cHV0SW5kZXhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6ZG9EZWxldGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1
cnNvcik6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisK
IDIwMTAtMDgtMjUgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCAyM2JjNDRlOGMzYjFmYzA5YzZmZTllY2YzYjc4YzIyN2YzNTYw
MGU3Li5kN2UyYmI2YjM0MmQ5YzIyNmQ0MDkzYmJjMTlhYWQzNDY3MzUwMTExIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xNzcsOCArMTc3LDggQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SUQKICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGRv
RGVsZXRlKHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUg
aWQgPSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIGRvRGVsZXRlKHNxbGl0ZURhdGFiYXNl
KCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8i
LCBvYmplY3RTdG9yZS0+aWQoKSk7CisgICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRF
TEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkIElOIChTRUxFQ1QgaWQgRlJPTSBJbmRl
eGVzIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/KSIsIG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICBk
b0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgpKTsKLSAgICAvLyBGSVhNRTogRGVsZXRl
IGluZGV4IGRhdGEgYXMgd2VsbC4KICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIAogICAgIG1f
b2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggZDY1NjEyOGJmNTk5ZjlmYjFiZWIxNzZjZTljMWZjZmQxMzBhNjIw
Ny4uYzdkZjgyODZhZmVhMDZjZTBhYmIyYmM0NTI2NGNkOTc2NzQ5YzQwYiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTgzLDE5ICs4MywyNiBAQCBzdGF0
aWMgYm9vbCBjcmVhdGVUYWJsZXMoU1FMaXRlRGF0YWJhc2UqIHNxbGl0ZURhdGFiYXNlKQogICAg
ICAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgTWV0YURhdGEgKGlkIElOVEVHRVIgUFJJ
TUFSWSBLRVksIG5hbWUgVEVYVCBOT1QgTlVMTCwgZGVzY3JpcHRpb24gVEVYVCBOT1QgTlVMTCwg
dmVyc2lvbiBURVhUIE5PVCBOVUxMKSIsCiAKICAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RT
IE9iamVjdFN0b3JlcyIsCi0gICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPYmpl
Y3RTdG9yZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVYVCBOT1QgTlVMTCwga2V5
UGF0aCBURVhULCBkb0F1dG9JbmNyZW1lbnQgSU5URUdFUiBOT1QgTlVMTCkiLAorICAgICAgICAi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgT2JqZWN0U3RvcmVzIChpZCBJTlRFR0VSIFBSSU1B
UlkgS0VZLCBuYW1lIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCBrZXlQYXRoIFRFWFQsIGRvQXV0b0lu
Y3JlbWVudCBJTlRFR0VSIE5PVCBOVUxMKSIsCiAgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNU
UyBPYmplY3RTdG9yZXNfbmFtZSIsCiAgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5P
VCBFWElTVFMgT2JqZWN0U3RvcmVzX25hbWUgT04gT2JqZWN0U3RvcmVzKG5hbWUpIiwKIAogICAg
ICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5kZXhlcyIsCi0gICAgICAgICJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBJbmRleGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RT
dG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIG5hbWUg
VEVYVCBOT1QgTlVMTCwga2V5UGF0aCBURVhULCBpc1VuaXF1ZSBJTlRFR0VSIE5PVCBOVUxMKSIs
CisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJbmRleGVzIChpZCBJTlRFR0VS
IFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBP
YmplY3RTdG9yZShpZCksIG5hbWUgVEVYVCBOT1QgTlVMTCBVTklRVUUsIGtleVBhdGggVEVYVCwg
aXNVbmlxdWUgSU5URUdFUiBOT1QgTlVMTCkiLAogICAgICAgICAiRFJPUCBJTkRFWCBJRiBFWElT
VFMgSW5kZXhlc19jb21wb3NpdCIsCiAgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5P
VCBFWElTVFMgSW5kZXhlc19jb21wb3NpdCBPTiBJbmRleGVzKG9iamVjdFN0b3JlSWQsIG5hbWUp
IiwKIAogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3RvcmVEYXRhIiwKLSAg
ICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlRGF0YSAoaWQgSU5U
RUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5D
RVMgT2JqZWN0U3RvcmUoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBJTlRFR0VSLCBrZXlO
dW1iZXIgSU5URUdFUiwgdmFsdWUgVEVYVCBOT1QgTlVMTCkiLAorICAgICAgICAiQ1JFQVRFIFRB
QkxFIElGIE5PVCBFWElTVFMgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZ
LCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShp
ZCksIGtleVN0cmluZyBURVhUIFVOSVFVRSwga2V5RGF0ZSBJTlRFR0VSIFVOSVFVRSwga2V5TnVt
YmVyIElOVEVHRVIgVU5JUVVFLCB2YWx1ZSBURVhUIE5PVCBOVUxMKSIsCiAgICAgICAgICJEUk9Q
IElOREVYIElGIEVYSVNUUyBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQiLAotICAgICAgICAiQ1JF
QVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCBP
TiBPYmplY3RTdG9yZURhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIG9iamVjdFN0
b3JlSWQpIgorICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIE9iamVj
dFN0b3JlRGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEoa2V5U3RyaW5nLCBrZXlEYXRl
LCBrZXlOdW1iZXIsIG9iamVjdFN0b3JlSWQpIiwKKworICAgICAgICAiRFJPUCBUQUJMRSBJRiBF
WElTVFMgSW5kZXhEYXRhIiwKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIElu
ZGV4RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgaW5kZXhJZCBJTlRFR0VSIE5PVCBOVUxM
IFJFRkVSRU5DRVMgSW5kZXhzKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwg
a2V5TnVtYmVyIElOVEVHRVIsIG9iamVjdFN0b3JlRGF0YUlkIElOVEVHRVIgTk9UIE5VTEwgVU5J
UVVFIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmVEYXRhKGlkKSkiLAorICAgICAgICAiRFJPUCBJTkRF
WCBJRiBFWElTVFMgSW5kZXhEYXRhX2NvbXBvc2l0IiwKKyAgICAgICAgIkNSRUFURSBVTklRVUUg
SU5ERVggSUYgTk9UIEVYSVNUUyBJbmRleERhdGFfY29tcG9zaXQgT04gSW5kZXhEYXRhKGtleVN0
cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkKSIsCisgICAgICAgICJEUk9QIElOREVY
IElGIEVYSVNUUyBJbmRleERhdGFfb2JqZWN0U3RvcmVEYXRhSWQiLAorICAgICAgICAiQ1JFQVRF
IFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIEluZGV4RGF0YV9vYmplY3RTdG9yZURhdGFJZCBP
TiBJbmRleERhdGEob2JqZWN0U3RvcmVEYXRhSWQpIgogICAgICAgICB9OwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoY29tbWFuZHMpOyArK2kpIHsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5pZGwgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXgu
aWRsCmluZGV4IGU3OTZiMDM4ZTQyZDgyYjI5MDJmYmNjOTA5MjBkNzFlNjQ5NmU0MzAuLjYyOTQ4
MWVkNTUxOTAyZTM3MjI4NWE4MTZlZDRlMWQzOGFlNDgzZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleC5pZGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmlkbApA
QCAtMjgsMTEgKzI4LDE2IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAg
ICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCiAgICAgXSBJREJJbmRleCB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBDb21wbGV0ZSB0aGlzIGZpbGUuCi0KICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBuYW1lOworICAgICAgICAvLyBGSVhNRTogQWRkICJzdG9yZU5hbWUi
LgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGtleVBhdGg7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHVuaXF1ZTsKKworICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50LgorICAgICAgICAvL0lEQlJlcXVlc3Qgb3Blbk9iamVjdEN1cnNvcihpbiBbT3B0
aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbikgcmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAgICAvL0lEQlJlcXVlc3Qgb3Bl
bkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbikgcmFpc2VzIChET01FeGNlcHRpb24pOworICAgICAgICAv
L0lEQlJlcXVlc3QgZ2V0T2JqZWN0KGluIElEQktleSBrZXkpIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgLy9JREJSZXF1ZXN0IGdldChpbiBJREJLZXkga2V5KSByYWlzZXMgKERPTUV4
Y2VwdGlvbik7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwu
Y3BwCmluZGV4IDE4MGZmMWQ4YmVkMjc3Y2EwZGE5Mzg1YzgyOTMxMmU4ZGM2NzdiNDUuLjQyYWE2
MmJjNDYzYTgyZGMxYTI2Y2U0NGQ3Mjg1MDc2OTZhM2ZjMjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2ICs0NywzMSBAQCBJREJJbmRl
eEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1wbCgpCiB7CiB9CiAKK3N0YXRpYyBTdHJp
bmcgd2hlcmVDbGF1c2UoSURCS2V5KiBrZXkpCit7CisgICAgcmV0dXJuICJXSEVSRSBpbmRleElk
ID0gPyAgQU5EICAiICsga2V5LT53aGVyZVN5bnRheCgpOworfQorCitzdGF0aWMgdm9pZCBiaW5k
V2hlcmVDbGF1c2UoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50NjRfdCBpZCwgSURCS2V5KiBr
ZXkpCit7CisgICAgcXVlcnkuYmluZEludDY0KDEsIGlkKTsKKyAgICBrZXktPmJpbmQocXVlcnks
IDIpOworfQorCitib29sIElEQkluZGV4QmFja2VuZEltcGw6OmFkZGluZ0tleUFsbG93ZWQoSURC
S2V5KiBrZXkpCit7CisgICAgaWYgKCFtX3VuaXF1ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCBG
Uk9NIEluZGV4RGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5KSk7CisgICAgYm9vbCBvayA9IHF1ZXJ5
LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisgICAgYmluZFdoZXJlQ2xhdXNlKHF1ZXJ5
LCBtX2lkLCBrZXkpOworICAgIGJvb2wgZXhpc3RpbmdWYWx1ZSA9IHF1ZXJ5LnN0ZXAoKSA9PSBT
UUxSZXN1bHRSb3c7CisKKyAgICByZXR1cm4gIWV4aXN0aW5nVmFsdWU7Cit9CisKIFNRTGl0ZURh
dGFiYXNlJiBJREJJbmRleEJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlKCktPnNxbGl0ZURhdGFiYXNlKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCBhY2Y2YjFmMjBmY2E2ZDFjMTJh
YTgwYWEzNWIzNDZkMjEyNjFkMjcxLi45N2M2NWY5ZmU1MDkwM2U1NjMwYmYxYTNkMTIzZmQ1NGI3
NzQ5Yjc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5o
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKQEAgLTMyLDYgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgU1FMaXRlRGF0YWJhc2U7CiAKQEAgLTQzLDYg
KzQ0LDkgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbXBs
KCk7CiAKKyAgICBpbnQ2NF90IGlkKCkgeyByZXR1cm4gbV9pZDsgfQorICAgIGJvb2wgYWRkaW5n
S2V5QWxsb3dlZChJREJLZXkqKTsKKwogICAgIC8vIEltcGxlbWVudHMgSURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlLgogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
ICAgICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRoKCkgeyByZXR1cm4gbV9rZXlQYXRoOyB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJL
ZXkuY3BwCmluZGV4IDhlYzVkZmRhNDg5YTVhZmI0ZjBhMDE3ZjA3NGEzZDRiYjIzMDY1MTIuLmY3
OTVmNTliY2YwYTNmYWU3MGQ3NzI4M2VlZDgwZDVmNGFkN2U0NTEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3RvcmFnZS9JREJLZXkuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1
ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Myw2ICs1NCw2MyBAQCBJREJLZXk6On5JREJL
ZXkoKQogewogfQogCitTdHJpbmcgSURCS2V5Ojp3aGVyZVN5bnRheCgpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAg
cmV0dXJuICJrZXlTdHJpbmcgPSA/IjsKKyAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKKyAg
ICAgICAgcmV0dXJuICJrZXlOdW1iZXIgPSA/IjsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRh
dGUuCisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAgICByZXR1cm4gImtleVN0cmlu
ZyBJUyBOVUxMICBBTkQgIGtleURhdGUgSVMgTlVMTCAgQU5EICBrZXlOdW1iZXIgSVMgTlVMTCI7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQor
CisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgYm91bmQuCitpbnQgSURCS2V5OjpiaW5k
KFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBjb2x1bW4pIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcXVlcnku
YmluZFRleHQoY29sdW1uLCBtX3N0cmluZyk7CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
SURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICBxdWVyeS5iaW5kSW50KGNvbHVtbiwgbV9udW1i
ZXIpOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIElEQktleTo6YmluZFdpdGhOdWxscyhTUUxpdGVTdGF0ZW1lbnQm
IHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgewor
ICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICBxdWVyeS5iaW5kVGV4dChiYXNl
Q29sdW1uICsgMCwgbV9zdHJpbmcpOworICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1u
ICsgMSk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRO
dWxsKGJhc2VDb2x1bW4gKyAwKTsKKyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiAr
IDEpOworICAgICAgICBxdWVyeS5iaW5kSW50KGJhc2VDb2x1bW4gKyAyLCBtX251bWJlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcXVlcnku
YmluZE51bGwoYmFzZUNvbHVtbiArIDApOworICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29s
dW1uICsgMSk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdG9yYWdlL0lEQktleS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCmluZGV4
IGE4NGVhNmE1YTQ4YWVhNjVlZTU2MTE5MWZkZDJhZTM4YjhjZTAwOWYuLjhlYTc3OGI4N2YxNTJk
YjE1NjgxYmVmMGNlMGZlOGUyOTM1MDAyZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJLZXkuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgKQEAgLTMzLDYgKzMzLDggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7CisKIC8vIEZJ
WE1FOiBBZGQgZGF0ZXMuCiBjbGFzcyBJREJLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXk+
IHsKIHB1YmxpYzoKQEAgLTcxLDYgKzczLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
bnVtYmVyOwogICAgIH0KIAorICAgIFN0cmluZyB3aGVyZVN5bnRheCgpIGNvbnN0OworICAgIGlu
dCBiaW5kKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBjb2x1bW4pIGNvbnN0OworICAgIHZv
aWQgYmluZFdpdGhOdWxscyhTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikg
Y29uc3Q7CisKIHByaXZhdGU6CiAgICAgSURCS2V5KCk7CiAgICAgZXhwbGljaXQgSURCS2V5KGlu
dDMyX3QpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBi
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwKaW5kZXggMTY0OWExZGE5YWMyNWUy
MTcyOWYyNjkzMzc5MzMxNTJlZWViZjdmYi4uY2NkMDMxMWM4MGJlYjVmMGVjODQwNzA0ZDZmZDJl
N2U5NGI3MDk2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlk
bAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC0yOCwxMCArMjgs
OCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9u
YWw9SU5ERVhFRF9EQVRBQkFTRQogICAgIF0gSURCT2JqZWN0U3RvcmUgeworICAgICAgICAvLyBG
SVhNRTogTWFueSBvZiB0aGVzZSBzaG91bGQgcmFpc2Ugb24gY2VydGFpbiBlcnJvcnMuCiAgICAg
ICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGdldChpbiBJ
REJLZXkga2V5KTsgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQ29tZSB0byBjb25jZW5zdXMg
cmUgZ2V0QWxsLgotICAgICAgICAvLyBGSVhNRTogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHJhaXNl
cyBhbiBleGNlcHRpb24gaWYgeW91IHBhc3MgaW4gc29tZXRoaW5nIHRoYXQgY2FuJ3QgYmUgc2Vy
aWFsaXplZC4KLSAgICAgICAgLy8gICAgICAgIFdlIG5lZWQgdG8gaW5zdGVhZCAicmFpc2UiIHRo
aXMgZXJyb3IgdmlhIGFuIGVycm9yIGNhbGxiYWNrLgogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpOwogICAgICAgICBbQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gU2VyaWFsaXplZFNjcmlwdFZh
bHVlIHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpOwogICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCByZW1vdmUoaW4gSURCS2V5IGtleSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
MWI5Yjc2YmNhMmZmNjZmMGM2N2RhMjNhMTA4YjM2Y2UxNWVlNDJlMC4uMTk4ZGIzMGViMTk4ZTA0
ZjhhNjIwZGFkYmM2ODJlMDEzMzI4NmEzMyAxMDA3NTUKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIklEQktl
eVJhbmdlLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKQEAgLTY1LDUwICs2NiwyMCBAQCBQYXNzUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4TmFtZXMoKSBjb25zdAog
ICAgIHJldHVybiBpbmRleE5hbWVzLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFN0cmluZyB3aGVy
ZUNsYXVzZShJREJLZXk6OlR5cGUgdHlwZSkKK3N0YXRpYyBTdHJpbmcgd2hlcmVDbGF1c2UoSURC
S2V5KiBrZXkpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0cmlu
Z1R5cGU6Ci0gICAgICAgIHJldHVybiAiV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFORCAga2V5
U3RyaW5nID0gPyI7Ci0gICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIHJldHVy
biAiV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFORCAga2V5TnVtYmVyID0gPyI7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBkYXRlLgotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAg
ICAgcmV0dXJuICJXSEVSRSBvYmplY3RTdG9yZUlkID0gPyAgQU5EICBrZXlTdHJpbmcgSVMgTlVM
TCAgQU5EICBrZXlEYXRlIElTIE5VTEwgIEFORCAga2V5TnVtYmVyIElTIE5VTEwiOwotICAgIH0K
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKLX0KLQotLy8gUmV0
dXJucyBudW1iZXIgb2YgaXRlbXMgYm91bmQuCi1zdGF0aWMgaW50IGJpbmRLZXkoU1FMaXRlU3Rh
dGVtZW50JiBxdWVyeSwgaW50IGNvbHVtbiwgSURCS2V5KiBrZXkpCi17Ci0gICAgc3dpdGNoIChr
ZXktPnR5cGUoKSkgewotICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgotICAgICAgICBxdWVy
eS5iaW5kVGV4dChjb2x1bW4sIGtleS0+c3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAg
ICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKLSAgICAgICAgcXVlcnkuYmluZEludChjb2x1bW4s
IGtleS0+bnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IGRhdGUuCi0gICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gIldIRVJFIG9iamVjdFN0b3JlSWQgPSA/ICBBTkQgICIgKyBrZXktPndoZXJlU3ludGF4
KCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJpbmRXaGVyZUNsYXVzZShTUUxpdGVTdGF0ZW1lbnQmIHF1
ZXJ5LCBpbnQ2NF90IGlkLCBJREJLZXkqIGtleSkKIHsKICAgICBxdWVyeS5iaW5kSW50NjQoMSwg
aWQpOwotICAgIGJpbmRLZXkocXVlcnksIDIsIGtleSk7CisgICAga2V5LT5iaW5kKHF1ZXJ5LCAy
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBrZXlTdHJpbmcs
IGtleURhdGUsIGtleU51bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJl
Q2xhdXNlKGtleS0+dHlwZSgpKSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURh
dGFiYXNlKCksICJTRUxFQ1Qga2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVlIEZS
T00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKICAgICBib29s
IG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQo
b2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIApAQCAtMTI2LDYgKzk3
LDYyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhCiAgICAgQVNTRVJUKHF1ZXJ5LnN0ZXAoKSAh
PSBTUUxSZXN1bHRSb3cpOwogfQogCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5
RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoKQoreworICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IHZh
bHVlczsKKyAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICBWZWN0b3I8UmVmUHRyPElEQktl
eT4gPiBrZXlzOworICAgIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21T
ZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtleXMpOworICAgIGlm
IChrZXlzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKGtleXMuc2l6
ZSgpID09IDEpOworICAgIHJldHVybiBrZXlzWzBdLnJlbGVhc2UoKTsKK30KKworc3RhdGljIHZv
aWQgcHV0T2JqZWN0U3RvcmVEYXRhKFNRTGl0ZURhdGFiYXNlJiBkYiwgYm9vbCBpc0V4aXN0aW5n
VmFsdWUsIElEQktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QqIGRhdGFSb3dJZCkKK3sKKyAgICBTdHJpbmcgc3FsID0g
aXNFeGlzdGluZ1ZhbHVlID8gIlVQREFURSBPYmplY3RTdG9yZURhdGEgU0VUIGtleVN0cmluZyA9
ID8sIGtleURhdGUgPSA/LCBrZXlOdW1iZXIgPSA/LCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0U3Rv
cmVEYXRhIChrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFsdWUsIG9iamVjdFN0b3Jl
SWQpIFZBTFVFUyAoPywgPywgPywgPywgPykiOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShk
Yiwgc3FsKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwor
ICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zz8KKyAgICBrZXktPmJpbmRXaXRoTnVsbHMocXVlcnksIDEpOworICAgIHF1ZXJ5LmJpbmRUZXh0
KDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7CisgICAgaWYgKGlzRXhpc3RpbmdWYWx1ZSkgewor
ICAgICAgICBBU1NFUlQoKmRhdGFSb3dJZCAhPSAtMSk7CisgICAgICAgIHF1ZXJ5LmJpbmRJbnQo
NSwgKmRhdGFSb3dJZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCpkYXRhUm93SWQg
PT0gLTEpOworICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0U3RvcmVJZCk7CisgICAg
fQorCisgICAgb2sgPSBxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBp
ZiAoIWlzRXhpc3RpbmdWYWx1ZSkKKyAgICAgICAgKmRhdGFSb3dJZCA9IGRiLmxhc3RJbnNlcnRS
b3dJRCgpOworfQorCitzdGF0aWMgdm9pZCBwdXRJbmRleERhdGEoU1FMaXRlRGF0YWJhc2UmIGRi
LCBJREJLZXkqIGtleSwgaW50NjRfdCBpbmRleElkLCBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlk
KQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVRdWVyeShkYiwgIkRFTEVURSBGUk9NIElu
ZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURhdGFJZCA9ID8iKTsKKyAgICBib29sIG9rID0gZGVs
ZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ss
IG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5i
aW5kSW50NjQoMSwgb2JqZWN0U3RvcmVEYXRhSWQpOworICAgIG9rID0gZGVsZXRlUXVlcnkuc3Rl
cCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorCisgICAgU1FMaXRlU3RhdGVtZW50IHB1dFF1ZXJ5
KGRiLCAiSU5TRVJUIElOVE8gSW5kZXhEYXRhIChrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJl
ciwgaW5kZXhJZCwgb2JqZWN0U3RvcmVEYXRhSWQpIFZBTFVFUyAoPywgPywgPywgPywgPykiKTsK
KyAgICBvayA9IHB1dFF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisgICAga2V5
LT5iaW5kV2l0aE51bGxzKHB1dFF1ZXJ5LCAxKTsKKyAgICBwdXRRdWVyeS5iaW5kSW50NjQoNCwg
aW5kZXhJZCk7CisgICAgcHV0UXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlRGF0YUlkKTsK
KworICAgIG9rID0gcHV0UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJU
X1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworfQorCiB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIGJvb2wgYWRk
T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwpAQCAtMTM2LDczICsxNjMs
NTYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlIsICJBIGtleSB3YXMgc3VwcGxpZWQgZm9yIGFuIG9iamVjdFN0b3JlIHRoYXQgaGFzIGEg
a2V5UGF0aC4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgVmVj
dG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gdmFsdWVzOwotICAgICAgICB2YWx1
ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaWRiS2V5
czsKLSAgICAgICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlh
bGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywgbV9rZXlQYXRoLCBpZGJLZXlzKTsKLSAgICAg
ICAgaWYgKGlkYktleXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkFuIGludmFsaWQga2V5UGF0aCB3YXMgc3VwcGxpZWQgZm9yIGFuIG9iamVjdFN0b3Jl
LiIpKTsKKyAgICAgICAga2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgbV9r
ZXlQYXRoKTsKKyAgICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05P
V05fRVJSLCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRoLiIp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBrZXkgPSBpZGJLZXlz
WzBdOwotICAgIH0KLQotICAgIGlmICgha2V5KSB7CisgICAgfSBlbHNlIGlmICgha2V5KSB7CiAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTm8ga2V5IHN1cHBsaWVkLiIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBnZXRRdWVyeShzcWxpdGVEYXRh
YmFzZSgpLCAiU0VMRUNUIGlkIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShr
ZXktPnR5cGUoKSkpOworICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5czsKKyAg
ICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBt
X2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gZmV0
Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaXQtPnNlY29uZC0+a2V5UGF0aCgpKTsKKyAg
ICAgICAgaWYgKCFrZXkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiVGhl
IGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIGFuIGluZGV4J3Mga2V5UGF0aC4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5h
ZGRpbmdLZXlBbGxvd2VkKGtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05P
V05fRVJSLCAiT25lIG9mIHRoZSBkZXJpdmVkIChmcm9tIGEga2V5UGF0aCkga2V5cyBmb3IgYW4g
aW5kZXggZG9lcyBub3Qgc2F0aXNmeSBpdHMgdW5pcXVlbmVzcyByZXF1aXJlbWVudHMuIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGluZGV4S2V5cy5hcHBlbmQo
a2V5LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IGdldFF1ZXJ5KHNx
bGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJl
Q2xhdXNlKGtleS5nZXQoKSkpOwogICAgIGJvb2wgb2sgPSBnZXRRdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPwogCiAgICAgYmluZFdoZXJlQ2xhdXNlKGdldFF1ZXJ5LCBtX2lkLCBr
ZXkuZ2V0KCkpOwotICAgIGJvb2wgZXhpc3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0ZXAoKSA9PSBT
UUxSZXN1bHRSb3c7Ci0gICAgaWYgKGFkZE9ubHkgJiYgZXhpc3RpbmdWYWx1ZSkgeworICAgIGJv
b2wgaXNFeGlzdGluZ1ZhbHVlID0gZ2V0UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdzsKKyAg
ICBpZiAoYWRkT25seSAmJiBpc0V4aXN0aW5nVmFsdWUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09O
U1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgc3FsID0gZXhpc3RpbmdWYWx1
ZSA/ICJVUERBVEUgT2JqZWN0U3RvcmVEYXRhIFNFVCBrZXlTdHJpbmcgPSA/LCBrZXlEYXRlID0g
Pywga2V5TnVtYmVyID0gPywgdmFsdWUgPSA/IFdIRVJFIGlkID0gPyIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmlu
Zywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/
LCA/LCA/LCA/KSI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHB1dFF1ZXJ5KHNxbGl0ZURhdGFiYXNl
KCksIHNxbCk7Ci0gICAgb2sgPSBwdXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0g
ICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5n
PwotICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleTo6U3RyaW5nVHlw
ZToKLSAgICAgICAgcHV0UXVlcnkuYmluZFRleHQoMSwga2V5LT5zdHJpbmcoKSk7Ci0gICAgICAg
IHB1dFF1ZXJ5LmJpbmROdWxsKDIpOwotICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlLgotICAgIGNhc2UgSURC
S2V5OjpOdW1iZXJUeXBlOgotICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgxKTsKLSAgICAgICAg
cHV0UXVlcnkuYmluZE51bGwoMik7Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmRJbnQoMywga2V5LT5u
dW1iZXIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAg
ICAgICAgcHV0UXVlcnkuYmluZE51bGwoMSk7Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDIp
OwotICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHB1dFF1ZXJ5
LmJpbmRUZXh0KDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7Ci0gICAgaWYgKGV4aXN0aW5nVmFs
dWUpCi0gICAgICAgIHB1dFF1ZXJ5LmJpbmRJbnQoNSwgZ2V0UXVlcnkuZ2V0Q29sdW1uSW50KDAp
KTsKLSAgICBlbHNlCi0gICAgICAgIHB1dFF1ZXJ5LmJpbmRJbnQ2NCg1LCBtX2lkKTsKKyAgICAv
LyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBw
b2ludCwgZG9uJ3QgZXJyb3Igb3V0LgogCi0gICAgb2sgPSBwdXRRdWVyeS5zdGVwKCkgPT0gU1FM
UmVzdWx0RG9uZTsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIg
ZXJyb3IgaGFuZGxpbmc/CisgICAgaW50NjRfdCBkYXRhUm93SWQgPSBpc0V4aXN0aW5nVmFsdWUg
PyBnZXRRdWVyeS5nZXRDb2x1bW5JbnQoMCkgOiAtMTsKKyAgICBwdXRPYmplY3RTdG9yZURhdGEo
c3FsaXRlRGF0YWJhc2UoKSwgaXNFeGlzdGluZ1ZhbHVlLCBrZXkuZ2V0KCksIHZhbHVlLmdldCgp
LCBtX2lkLCAmZGF0YVJvd0lkKTsKKworICAgIGludCBpID0gMDsKKyAgICBmb3IgKEluZGV4TWFw
OjppdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7
ICsraXQsICsraSkKKyAgICAgICAgcHV0SW5kZXhEYXRhKHNxbGl0ZURhdGFiYXNlKCksIGluZGV4
S2V5c1tpXS5nZXQoKSwgaXQtPnNlY29uZC0+aWQoKSwgZGF0YVJvd0lkKTsKIAogICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURh
dGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtl
eS0+dHlwZSgpKSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCks
ICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkp
OwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwogCkBA
IC0yMzMsMTAgKzI0MywxMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZQogICAgIEFTU0VSVF9V
TlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KICAgICBpbnQ2
NF90IGlkID0gc3FsaXRlRGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKIAotICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6
Y3JlYXRlKHRoaXMsIGlkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUpOworICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSh0aGlz
LCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUoKSA9
PSBuYW1lKTsKICAgICBtX2luZGV4ZXMuc2V0KG5hbWUsIGluZGV4KTsKLSAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhpbmRleC5yZWxlYXNlKCkpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGlu
ZGV4LmdldCgpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTI0
NCwyMiArMjU0LDI5IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChjb25zdCBTdHJpCiAgICAgcmV0dXJuIG1faW5k
ZXhlcy5nZXQobmFtZSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVt
b3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorc3RhdGljIHZvaWQgZG9EZWxldGUoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBj
aGFyKiBzcWwsIGludDY0X3QgaWQpCiB7Ci0gICAgaWYgKCFtX2luZGV4ZXMuY29udGFpbnMobmFt
ZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIkluZGV4IG5hbWUgZG9lcyBu
b3QgZXhpc3QuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU1FMaXRlU3RhdGVt
ZW50IGRlbGV0ZVF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleGVzIFdI
RVJFIG5hbWUgPSA/IEFORCBvYmplY3RTdG9yZUlkID0gPyIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBkZWxldGVRdWVyeShkYiwgc3FsKTsKICAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFy
ZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6
IEJldHRlciBlcnJvciBoYW5kbGluZy4KLSAgICBkZWxldGVRdWVyeS5iaW5kVGV4dCgxLCBuYW1l
KTsKLSAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMiwgbV9pZCk7CisgICAgZGVsZXRlUXVlcnku
YmluZEludDY0KDEsIGlkKTsKICAgICBvayA9IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1
bHREb25lOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZy4KK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCit7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVz
LmdldChuYW1lKTsKKyAgICBpZiAoIWluZGV4KSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VO
RF9FUlIsICJJbmRleCBuYW1lIGRvZXMgbm90IGV4aXN0LiIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIC8vIEZJWE1FOiBEZWxldGUgaW5kZXggZGF0YSBhcyB3ZWxsLgorICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKHNxbGl0ZURhdGFiYXNlKCkpOworICAgIHRyYW5z
YWN0aW9uLmJlZ2luKCk7CisgICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBG
Uk9NIEluZGV4ZXMgV0hFUkUgaWQgPSA/IiwgaW5kZXgtPmlkKCkpOworICAgIGRvRGVsZXRlKHNx
bGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCA9ID8i
LCBpbmRleC0+aWQoKSk7CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAKICAgICBtX2luZGV4
ZXMucmVtb3ZlKG5hbWUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CkBAIC0yNzAsNyAr
Mjg3LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ24KICAgICAvLyBGSVhNRTogRnVsbHkgaW1w
bGVtZW50LgogCiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcmFuZ2UtPmxlZnQoKTsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCwgdmFsdWUg
RlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS0+dHlwZSgpKSk7CisgICAg
U1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQsIHZhbHVl
IEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKICAgICBi
b29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVT
RUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggZTEwNThjOGY2ZmMxMTcw
NzAwNmQxMDExYmVkZjQxNjlkMjQ2YTAwNC4uMzJlZjkyMDMyMjEzMjlmZTVhZTUyN2UxZTNhNjc5
ZWZjY2U5ZWZmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkRh
dGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwogY2xhc3MgU1FM
aXRlRGF0YWJhc2U7CiAKIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJsaWMg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKQEAgLTc1LDcgKzc2LDcgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgbV9rZXlQYXRoOwogICAgIGJvb2wgbV9hdXRvSW5jcmVtZW50OwogCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gPiBJbmRleE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1hcDsKICAgICBJbmRleE1hcCBtX2luZGV4ZXM7CiB9Owog
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCAzOGE5ZjM0MTJlZmQ2MmVhOWRlOGJiYTc3ZWQzMTQzNWI2M2FjMTNl
Li40MmFhNzRiMDNiYTU4ZDMyMDFiNmExZWM5NDFhMzc3NjI3MTdjOTQyIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0yNiAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgaW5kZXggaW5zZXJ0aW9uIHN1cHBvcnQgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2OTUKKworICAgICAgICBBZGQg
YXNzZXJ0cyBvbiB0aGUgW10gb3BlcmF0b3IuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmVjdG9y
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisKIDIwMTAtMDgt
MjUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlZlY3Rvci5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWZWN0b3IuaAppbmRl
eCAwNTIwODk1ZmEyZjYzMGViZTBkNjQ2ZTg5MGFiYmE0OTdlMTY4NmVmLi5jZjNlYzk1ZTg1ZDYy
OTA1YzFlY2Y3ZDY5OWM4YzM0YWNjNWE1MjZmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZlY3Rvci5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9y
LmgKQEAgLTExNSw4ICsxMTUsMTYgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
c2l6ZTsgfQogCi0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9wdHJbaV07
IH0KLSAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3B0
cltpXTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpCisgICAgeworICAgICAgICBXRUJL
SVRfQVNTRVJUKGkgPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9wdHJbaV07CisgICAgfQor
ICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBX
RUJLSVRfQVNTRVJUKGkgPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9wdHJbaV07CisgICAg
fQogCiAgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgY29uc3QgVCogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66046</attachid>
            <date>2010-08-31 06:55:01 -0700</date>
            <delta_ts>2010-09-03 06:24:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44695-20100831145459.patch</filename>
            <type>text/plain</type>
            <size>32314</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNmE3ZWE1MTc4YjIyYjE2OGFiOWJlMzc1OTc5NWM3NzdmYjRjN2UyLi4yMmYzNGU2
NmU5MzJkMWUxZTUxYWFhMTZiYjE0YmE1NjIzZjAwYTA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDgtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGluZGV4IGluc2Vy
dGlvbiBzdXBwb3J0IHRvIEluZGV4ZWREQi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0Njk1CisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9v
YmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL3NjcmlwdC10ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanM6CisgICAgICAgIChjcmVhdGVT
dWNjZXNzKToKKyAgICAgICAgKGFkZEluZGV4U3VjY2Vzcyk6CisgICAgICAgIChnZXRTdWNjZXNz
KToKKwogMjAxMC0wOC0zMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVj
dGVkLnR4dAppbmRleCAxMDUwNThkNzJjMmE0Yzc1MjZkNjJhNDk0Mjk3YzRjZDM5ODA0MjY5Li5h
NjBlODU3NmI2NDliNDU5ZDYzOTg2YTAzYzA1MDcwYTE4NDc5ZjBkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1l
eHBlY3RlZC50eHQKQEAgLTUwLDcgKzUwLDI4IEBAIFBBU1Mgc3RvcmUubmFtZSBpcyAic3RvcmVO
YW1lIgogUEFTUyBzdG9yZS5rZXlQYXRoIGlzIG51bGwKIFBBU1Mgc3RvcmVOYW1lcy5jb250YWlu
cygnc3RvcmVOYW1lJykgaXMgdHJ1ZQogUEFTUyBzdG9yZU5hbWVzLmxlbmd0aCBpcyAxCi1zdG9y
ZS5hZGQoJ3ZhbHVlJywgJ2tleScpCitldmVudC5yZXN1bHQuY3JlYXRlSW5kZXgoJ2luZGV4TmFt
ZScsICd4JykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJy
b3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdhYm9ydCcgaW4gcmVzdWx0IGlzIHRydWUKK1BB
U1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBz
aG9ydGx5Li4uCisKK2FkZEluZGV4U3VjY2VzcygpOgorU3VjY2VzcyBldmVudCBmaXJlZDoKK1BB
U1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFs
c2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2
ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25z
dWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQu
dGFyZ2V0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFT
UyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0
LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworUEFTUyBldmVudC5zb3VyY2UuaW5k
ZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJykgaXMgdHJ1ZQorZXZlbnQuc291cmNlLmFkZCh7
eDogJ3ZhbHVlJ30sICdrZXknKQogUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQog
UEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKIFBBU1MgJ2Fib3J0JyBpbiByZXN1bHQg
aXMgdHJ1ZQpAQCAtOTIsNyArMTEzLDcgQEAgUEFTUyAnYWJvcnQnIGluIGV2ZW50LnRhcmdldCBp
cyB0cnVlCiBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBl
dmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCi1QQVNTIGV2ZW50
LnJlc3VsdCBpcyAidmFsdWUiCitQQVNTIGV2ZW50LnJlc3VsdC54IGlzICJ2YWx1ZSIKIHN0b3Jl
ID0gZXZlbnQuc291cmNlCiBzdG9yZS5yZW1vdmUoJ2tleScpCiBQQVNTICdvbnN1Y2Nlc3MnIGlu
IHJlc3VsdCBpcyB0cnVlCkBAIC0xMTgsMyArMTM5LDQgQEAgUEFTUyBldmVudC5yZXN1bHQgaXMg
bnVsbAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9v
YmplY3RzdG9yZS1iYXNpY3MuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3Jp
cHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCmluZGV4IDYzNjc1YWQwNWQzNjk1NjYwNjg5
ZDdhM2ZmYTkyNGNmMzE0NzE1MTIuLjQ5OGE2YzE3YzdjMzcxZjIxOGVkZjUwZjAxMmI3MzI3Njcz
YjcwMWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10
ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvc2NyaXB0LXRlc3RzL29iamVjdHN0b3JlLWJhc2ljcy5qcwpAQCAtMzUsOSArMzUsMjEg
QEAgZnVuY3Rpb24gY3JlYXRlU3VjY2VzcygpCiAgICAgc2hvdWxkQmVOdWxsKCJzdG9yZS5rZXlQ
YXRoIik7CiAgICAgc2hvdWxkQmUoInN0b3JlTmFtZXMuY29udGFpbnMoJ3N0b3JlTmFtZScpIiwg
InRydWUiKTsKICAgICBzaG91bGRCZSgic3RvcmVOYW1lcy5sZW5ndGgiLCAiMSIpOwotICAgIC8v
IEZJWE1FOiB0ZXN0IHN0b3JlLmluZGV4TmFtZXMsIGFzIHdlbGwgYXMgYWxsIG9iamVjdCBzdG9y
ZSdzIG1ldGhvZHMuCisgICAgLy8gRklYTUU6IHRlc3QgYWxsIG9mIG9iamVjdCBzdG9yZSdzIG1l
dGhvZHMuCiAKLSAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJzdG9yZS5hZGQoJ3ZhbHVlJywgJ2tl
eScpIik7CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZXZlbnQucmVzdWx0LmNyZWF0ZUluZGV4
KCdpbmRleE5hbWUnLCAneCcpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVz
dWx0Lm9uc3VjY2VzcyA9IGFkZEluZGV4U3VjY2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBhZGRJbmRleFN1Y2Nlc3MoKQor
eworCWRlYnVnKCJhZGRJbmRleFN1Y2Nlc3MoKToiKTsKKwl2ZXJpZnlTdWNjZXNzRXZlbnQoZXZl
bnQpOworCXNob3VsZEJlVHJ1ZSgiZXZlbnQuc291cmNlLmluZGV4TmFtZXMuY29udGFpbnMoJ2lu
ZGV4TmFtZScpIik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJldmVudC5zb3VyY2UuYWRk
KHt4OiAndmFsdWUnfSwgJ2tleScpIik7CiAgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CiAgICAg
cmVzdWx0Lm9uc3VjY2VzcyA9IGFkZFN1Y2Nlc3M7CiAgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKQEAgLTYwLDcgKzcyLDcgQEAgZnVuY3Rpb24gZ2V0U3VjY2Vz
cygpCiB7CiAgICAgZGVidWcoImdldFN1Y2Nlc3MoKToiKTsKICAgICB2ZXJpZnlTdWNjZXNzRXZl
bnQoZXZlbnQpOwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQucmVzdWx0IiwgInZh
bHVlIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC5yZXN1bHQueCIsICJ2YWx1
ZSIpOwogICAgIHZhciBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZXZlbnQuc291cmNlIik7
CiAKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJzdG9yZS5yZW1vdmUoJ2tleScpIik7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDExYWI5
OWYyYTE4ZmE4MDgxNGMwMDkxNDA0MmY4ZWNhZWJkZGE3ZDYuLmE4NGY2YzFiOWY3ZjZmZDE1Mjhm
NjcxNjc3ZjI0Y2NhMjJiODNhZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTAtMDgtMjYgIEplcmVteSBP
cmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGluZGV4IGluc2VydGlvbiBzdXBwb3J0IHRvIEluZGV4
ZWREQi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0
Njk1CisKKyAgICAgICAgV2hlbmV2ZXIgeW91IGluc2VydCBhbiBpdGVtIGludG8gYW4gT2JqZWN0
U3RvcmUsIGl0IHNob3VsZCB1c2UgYWxsCisgICAgICAgIGluZGV4ZXMnIGtleSBwYXRocyB0byBp
bnNlcnQgY29ycmVzcG9uZGluZyBlbnRyaWVzIGludG8gZWFjaCBpbmRleC4KKyAgICAgICAgQWxz
byBkYXRhIHNob3VsZCBiZSBkZWxldGVkIG91dCBvZiB0aGUgaW5kZXggd2hlbiBpdCBnb2VzIGF3
YXkuCisKKyAgICAgICAgTm90IG11Y2ggdGVzdGluZyB5ZXQgc2luY2UgdGhlcmUncyBubyB3YXkg
dG8gZGlyZWN0bHkgb2JzZXJ2ZSBpbmRleGVzLgorICAgICAgICBNb3JlIHdpbGwgYmUgaW4gbmV4
dCBwYXRjaC4KKworICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RT
dG9yZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlVGFibGVzKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6d2hlcmVDbGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6YmluZFdoZXJlQ2xh
dXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmFkZGluZ0tleUFs
bG93ZWQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6aWQpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6d2hlcmVTeW50YXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5OjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
YmluZFdpdGhOdWxscyk6CisgICAgICAgICogc3RvcmFnZS9JREJLZXkuaDoKKyAgICAgICAgKiBz
dG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2hlcmVDbGF1c2UpOgorICAg
ICAgICAoV2ViQ29yZTo6YmluZFdoZXJlQ2xhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpmZXRjaEtleUZy
b21LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dE9iamVjdFN0b3JlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpwdXRJbmRleERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpkb0RlbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29y
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKwogMjAx
MC0wOC0zMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggZjRmMjkzNGQ4N2YzZDBjMDMxMjVjMDk3MTE1NTI0MjRi
ODRlNGEyNC4uMDIxZjcwYWE0YjQ4ODExOWU5ZmM5NjE2ZjA0NWQ0OTljYTRiODFhYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTc3LDggKzE3Nyw4
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElECiAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAg
ICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVzIFdI
RVJFIGlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICBkb0RlbGV0ZShzcWxpdGVEYXRh
YmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQg
PSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIGRvRGVsZXRlKHNxbGl0ZURhdGFiYXNlKCks
ICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCBJTiAoU0VMRUNUIGlkIEZST00g
SW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPykiLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAg
ICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4ZXMgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0gICAgLy8gRklYTUU6IERl
bGV0ZSBpbmRleCBkYXRhIGFzIHdlbGwuCiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAKICAg
ICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwCmluZGV4IGQ2NTYxMjhiZjU5OWY5ZmIxYmViMTc2Y2U5YzFmY2ZkMTMw
YTYyMDcuLmM3ZGY4Mjg2YWZlYTA2Y2UwYWJiMmJjNDUyNjRjZDk3Njc0OWM0MGIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC04MywxOSArODMsMjYgQEAg
c3RhdGljIGJvb2wgY3JlYXRlVGFibGVzKFNRTGl0ZURhdGFiYXNlKiBzcWxpdGVEYXRhYmFzZSkK
ICAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE1ldGFEYXRhIChpZCBJTlRFR0VS
IFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQgTk9UIE5VTEwsIGRlc2NyaXB0aW9uIFRFWFQgTk9UIE5V
TEwsIHZlcnNpb24gVEVYVCBOT1QgTlVMTCkiLAogCiAgICAgICAgICJEUk9QIFRBQkxFIElGIEVY
SVNUUyBPYmplY3RTdG9yZXMiLAotICAgICAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg
T2JqZWN0U3RvcmVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQgTk9UIE5VTEws
IGtleVBhdGggVEVYVCwgZG9BdXRvSW5jcmVtZW50IElOVEVHRVIgTk9UIE5VTEwpIiwKKyAgICAg
ICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlcyAoaWQgSU5URUdFUiBQ
UklNQVJZIEtFWSwgbmFtZSBURVhUIE5PVCBOVUxMIFVOSVFVRSwga2V5UGF0aCBURVhULCBkb0F1
dG9JbmNyZW1lbnQgSU5URUdFUiBOT1QgTlVMTCkiLAogICAgICAgICAiRFJPUCBJTkRFWCBJRiBF
WElTVFMgT2JqZWN0U3RvcmVzX25hbWUiLAogICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJ
RiBOT1QgRVhJU1RTIE9iamVjdFN0b3Jlc19uYW1lIE9OIE9iamVjdFN0b3JlcyhuYW1lKSIsCiAK
ICAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZGV4ZXMiLAotICAgICAgICAiQ1JFQVRF
IFRBQkxFIElGIE5PVCBFWElTVFMgSW5kZXhlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2Jq
ZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBu
YW1lIFRFWFQgTk9UIE5VTEwsIGtleVBhdGggVEVYVCwgaXNVbmlxdWUgSU5URUdFUiBOT1QgTlVM
TCkiLAorICAgICAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSW5kZXhlcyAoaWQgSU5U
RUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5D
RVMgT2JqZWN0U3RvcmUoaWQpLCBuYW1lIFRFWFQgTk9UIE5VTEwgVU5JUVVFLCBrZXlQYXRoIFRF
WFQsIGlzVW5pcXVlIElOVEVHRVIgTk9UIE5VTEwpIiwKICAgICAgICAgIkRST1AgSU5ERVggSUYg
RVhJU1RTIEluZGV4ZXNfY29tcG9zaXQiLAogICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJ
RiBOT1QgRVhJU1RTIEluZGV4ZXNfY29tcG9zaXQgT04gSW5kZXhlcyhvYmplY3RTdG9yZUlkLCBu
YW1lKSIsCiAKICAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIE9iamVjdFN0b3JlRGF0YSIs
Ci0gICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPYmplY3RTdG9yZURhdGEgKGlk
IElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZF
UkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwg
a2V5TnVtYmVyIElOVEVHRVIsIHZhbHVlIFRFWFQgTk9UIE5VTEwpIiwKKyAgICAgICAgIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZ
IEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgT2JqZWN0U3Rv
cmUoaWQpLCBrZXlTdHJpbmcgVEVYVCBVTklRVUUsIGtleURhdGUgSU5URUdFUiBVTklRVUUsIGtl
eU51bWJlciBJTlRFR0VSIFVOSVFVRSwgdmFsdWUgVEVYVCBOT1QgTlVMTCkiLAogICAgICAgICAi
RFJPUCBJTkRFWCBJRiBFWElTVFMgT2JqZWN0U3RvcmVEYXRhX2NvbXBvc2l0IiwKLSAgICAgICAg
IkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBPYmplY3RTdG9yZURhdGFfY29tcG9z
aXQgT04gT2JqZWN0U3RvcmVEYXRhKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmpl
Y3RTdG9yZUlkKSIKKyAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBP
YmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0U3RvcmVEYXRhKGtleVN0cmluZywga2V5
RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIsCisKKyAgICAgICAgIkRST1AgVEFCTEUg
SUYgRVhJU1RTIEluZGV4RGF0YSIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU
UyBJbmRleERhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGluZGV4SWQgSU5URUdFUiBOT1Qg
TlVMTCBSRUZFUkVOQ0VTIEluZGV4cyhpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIElOVEVH
RVIsIGtleU51bWJlciBJTlRFR0VSLCBvYmplY3RTdG9yZURhdGFJZCBJTlRFR0VSIE5PVCBOVUxM
IFVOSVFVRSBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlRGF0YShpZCkpIiwKKyAgICAgICAgIkRST1Ag
SU5ERVggSUYgRVhJU1RTIEluZGV4RGF0YV9jb21wb3NpdCIsCisgICAgICAgICJDUkVBVEUgVU5J
UVVFIElOREVYIElGIE5PVCBFWElTVFMgSW5kZXhEYXRhX2NvbXBvc2l0IE9OIEluZGV4RGF0YShr
ZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCkiLAorICAgICAgICAiRFJPUCBJ
TkRFWCBJRiBFWElTVFMgSW5kZXhEYXRhX29iamVjdFN0b3JlRGF0YUlkIiwKKyAgICAgICAgIkNS
RUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBJbmRleERhdGFfb2JqZWN0U3RvcmVEYXRh
SWQgT04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0YUlkKSIKICAgICAgICAgfTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGNvbW1hbmRzKTsgKytpKSB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsIGIvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4LmlkbAppbmRleCBlNzk2YjAzOGU0MmQ4MmIyOTAyZmJjYzkwOTIwZDcxZTY0OTZlNDMwLi42
Mjk0ODFlZDU1MTkwMmUzNzIyODVhODE2ZWQ0ZTFkMzhhZTQ4M2Q0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5p
ZGwKQEAgLTI4LDExICsyOCwxNiBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgaW50ZXJmYWNlIFsK
ICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQogICAgIF0gSURCSW5kZXggewot
ICAgICAgICAvLyBGSVhNRTogQ29tcGxldGUgdGhpcyBmaWxlLgotCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgLy8gRklYTUU6IEFkZCAic3RvcmVO
YW1lIi4KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBrZXlQYXRoOwogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1bmlxdWU7CisKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KKyAgICAgICAgLy9JREJSZXF1ZXN0IG9wZW5PYmplY3RDdXJzb3IoaW4g
W09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24pIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgLy9JREJSZXF1ZXN0
IG9wZW5DdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFs
XSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAg
ICAgLy9JREJSZXF1ZXN0IGdldE9iamVjdChpbiBJREJLZXkga2V5KSByYWlzZXMgKERPTUV4Y2Vw
dGlvbik7CisgICAgICAgIC8vSURCUmVxdWVzdCBnZXQoaW4gSURCS2V5IGtleSkgcmFpc2VzIChE
T01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAppbmRleCAxODBmZjFkOGJlZDI3N2NhMGRhOTM4NWM4MjkzMTJlOGRjNjc3YjQ1Li40
MmFhNjJiYzQ2M2E4MmRjMWEyNmNlNDRkNzI4NTA3Njk2YTNmYzIyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsNiArNDcsMzEgQEAgSURC
SW5kZXhCYWNrZW5kSW1wbDo6fklEQkluZGV4QmFja2VuZEltcGwoKQogewogfQogCitzdGF0aWMg
U3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleSoga2V5KQoreworICAgIHJldHVybiAiV0hFUkUgaW5k
ZXhJZCA9ID8gIEFORCAgIiArIGtleS0+d2hlcmVTeW50YXgoKTsKK30KKworc3RhdGljIHZvaWQg
YmluZFdoZXJlQ2xhdXNlKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQsIElEQktl
eSoga2V5KQoreworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7CisgICAga2V5LT5iaW5kKHF1
ZXJ5LCAyKTsKK30KKworYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2Vk
KElEQktleSoga2V5KQoreworICAgIGlmICghbV91bmlxdWUpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1Qg
aWQgRlJPTSBJbmRleERhdGEgIiArIHdoZXJlQ2xhdXNlKGtleSkpOworICAgIGJvb2wgb2sgPSBx
dWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2sp
OyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworICAgIGJpbmRXaGVyZUNsYXVzZShx
dWVyeSwgbV9pZCwga2V5KTsKKyAgICBib29sIGV4aXN0aW5nVmFsdWUgPSBxdWVyeS5zdGVwKCkg
PT0gU1FMUmVzdWx0Um93OworCisgICAgcmV0dXJuICFleGlzdGluZ1ZhbHVlOworfQorCiBTUUxp
dGVEYXRhYmFzZSYgSURCSW5kZXhCYWNrZW5kSW1wbDo6c3FsaXRlRGF0YWJhc2UoKSBjb25zdAog
ewogICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5kYXRhYmFzZSgpLT5zcWxpdGVEYXRhYmFzZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1dl
YkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKaW5kZXggYWNmNmIxZjIwZmNhNmQx
YzEyYWE4MGFhMzViMzQ2ZDIxMjYxZDI3MS4uOTdjNjVmOWZlNTA5MDNlNTYzMGJmMWEzZDEyM2Zk
NTRiNzc0OWI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZElt
cGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC0zMiw2
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCS2V5OwogY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIFNRTGl0ZURhdGFiYXNlOwogCkBAIC00
Myw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5k
SW1wbCgpOwogCisgICAgaW50NjRfdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KKyAgICBib29sIGFk
ZGluZ0tleUFsbG93ZWQoSURCS2V5Kik7CisKICAgICAvLyBJbXBsZW1lbnRzIElEQkluZGV4QmFj
a2VuZEludGVyZmFjZS4KICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0dXJuIG1fa2V5UGF0aDsgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5LmNwcAppbmRleCA1MGM0YzQ2YzE1Nzg4NGNmYmMzYTU1ZWYxY2I5ZDk0ZDBiZWRkNjE2
Li42YWU3OWJhZDdjMTJjZWM5MzhjYWNiZmZjMDRmY2FlYWJiY2Y1OWJjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNw
cApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzIsNiArNzMsNjMgQEAgYm9vbCBJREJL
ZXk6OmlzRXF1YWwoSURCS2V5KiBvdGhlcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1N0cmlu
ZyBJREJLZXk6OndoZXJlU3ludGF4KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgewor
ICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4gImtleVN0cmluZyA9
ID8iOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4gImtleU51
bWJlciA9ID8iOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4KKyAgICBjYXNlIElEQktl
eTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAga2V5
RGF0ZSBJUyBOVUxMICBBTkQgIGtleU51bWJlciBJUyBOVUxMIjsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKKy8vIFJldHVybnMgdGhlIG51
bWJlciBvZiBpdGVtcyBib3VuZC4KK2ludCBJREJLZXk6OmJpbmQoU1FMaXRlU3RhdGVtZW50JiBx
dWVyeSwgaW50IGNvbHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNh
c2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICBxdWVyeS5iaW5kVGV4dChjb2x1bW4sIG1f
c3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6
CisgICAgICAgIHF1ZXJ5LmJpbmRJbnQoY29sdW1uLCBtX251bWJlcik7CisgICAgICAgIHJldHVy
biAxOworICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
SURCS2V5OjpiaW5kV2l0aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29s
dW1uKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBJREJLZXk6OlN0
cmluZ1R5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGJhc2VDb2x1bW4gKyAwLCBtX3N0cmlu
Zyk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsKKyAgICAgICAgcXVl
cnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElE
QktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDAp
OworICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMSk7CisgICAgICAgIHF1ZXJ5
LmJpbmRJbnQoYmFzZUNvbHVtbiArIDIsIG1fbnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1u
ICsgMCk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsKKyAgICAgICAg
cXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgKaW5kZXggMjI4YjRhNGI0NzEzY2NiMjNh
YmNlNTYwMDAxN2I0YjczMzk3OWFkNC4uYjlhMGJlN2Y1ZjYyYzE0ZTVlMDI0YjI3YzAyMmQ0OGI2
OTliZGJmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCisrKyBiL1dlYkNv
cmUvc3RvcmFnZS9JREJLZXkuaApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIFNRTGl0ZVN0YXRlbWVudDsKKwogLy8gRklYTUU6IEFkZCBkYXRlcy4KIGNs
YXNzIElEQktleSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQktleT4gewogcHVibGljOgpAQCAtNzIs
NiArNzQsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBpc0VxdWFsKElEQktleSogb3Ro
ZXIpOworICAgIFN0cmluZyB3aGVyZVN5bnRheCgpIGNvbnN0OworICAgIGludCBiaW5kKFNRTGl0
ZVN0YXRlbWVudCYgcXVlcnksIGludCBjb2x1bW4pIGNvbnN0OworICAgIHZvaWQgYmluZFdpdGhO
dWxscyhTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgSURCS2V5KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmUuaWRsIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbAppbmRleCAx
NjQ5YTFkYTlhYzI1ZTIxNzI5ZjI2OTMzNzkzMzE1MmVlZWJmN2ZiLi5jY2QwMzExYzgwYmViNWYw
ZWM4NDA3MDRkNmZkMmU3ZTk0YjcwOTZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmUuaWRsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwK
QEAgLTI4LDEwICsyOCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAg
ICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCiAgICAgXSBJREJPYmplY3RTdG9yZSB7
CisgICAgICAgIC8vIEZJWE1FOiBNYW55IG9mIHRoZXNlIHNob3VsZCByYWlzZSBvbiBjZXJ0YWlu
IGVycm9ycy4KICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgZ2V0KGluIElEQktleSBrZXkpOyAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBDb21l
IHRvIGNvbmNlbnN1cyByZSBnZXRBbGwuCi0gICAgICAgIC8vIEZJWE1FOiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB5b3UgcGFzcyBpbiBzb21ldGhpbmcgdGhh
dCBjYW4ndCBiZSBzZXJpYWxpemVkLgotICAgICAgICAvLyAgICAgICAgV2UgbmVlZCB0byBpbnN0
ZWFkICJyYWlzZSIgdGhpcyBlcnJvciB2aWEgYW4gZXJyb3IgY2FsbGJhY2suCiAgICAgICAgIFtD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGFkZChpbiBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSk7CiAgICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHB1dChpbiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSk7CiAgICAg
ICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHJlbW92ZShp
biBJREJLZXkga2V5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCBhZWIzY2VkZDUyNmE3MmZkMWUzYWIxZTMxODU2MmI4MTljZjE1MmZiLi4x
ZDI4OTc2ZWNlODZkM2E2NDM1ZjdiZTM3MDVmZmRjNWIzYmRiYzliIDEwMDc1NQotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9z
dG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgi
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIApAQCAtNjUsNTAgKzY2LDIwIEBAIFBh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhO
YW1lcygpIGNvbnN0CiAgICAgcmV0dXJuIGluZGV4TmFtZXMucmVsZWFzZSgpOwogfQogCi1zdGF0
aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleTo6VHlwZSB0eXBlKQorc3RhdGljIFN0cmluZyB3
aGVyZUNsYXVzZShJREJLZXkqIGtleSkKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IElEQktleTo6U3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuICJXSEVSRSBvYmplY3RTdG9yZUlk
ID0gPyAgQU5EICBrZXlTdHJpbmcgPSA/IjsKLSAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToK
LSAgICAgICAgcmV0dXJuICJXSEVSRSBvYmplY3RTdG9yZUlkID0gPyAgQU5EICBrZXlOdW1iZXIg
PSA/IjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCi0gICAgY2FzZSBJREJLZXk6Ok51
bGxUeXBlOgotICAgICAgICByZXR1cm4gIldIRVJFIG9iamVjdFN0b3JlSWQgPSA/ICBBTkQgIGtl
eVN0cmluZyBJUyBOVUxMICBBTkQgIGtleURhdGUgSVMgTlVMTCAgQU5EICBrZXlOdW1iZXIgSVMg
TlVMTCI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIi
OwotfQotCi0vLyBSZXR1cm5zIG51bWJlciBvZiBpdGVtcyBib3VuZC4KLXN0YXRpYyBpbnQgYmlu
ZEtleShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgY29sdW1uLCBJREJLZXkqIGtleSkKLXsK
LSAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6
Ci0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGNvbHVtbiwga2V5LT5zdHJpbmcoKSk7Ci0gICAgICAg
IHJldHVybiAxOwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICBxdWVyeS5i
aW5kSW50KGNvbHVtbiwga2V5LT5udW1iZXIoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4KLSAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOworICAgIHJldHVybiAiV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFORCAgIiArIGtl
eS0+d2hlcmVTeW50YXgoKTsKIH0KIAogc3RhdGljIHZvaWQgYmluZFdoZXJlQ2xhdXNlKFNRTGl0
ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQsIElEQktleSoga2V5KQogewogICAgIHF1ZXJ5
LmJpbmRJbnQ2NCgxLCBpZCk7Ci0gICAgYmluZEtleShxdWVyeSwgMiwga2V5KTsKKyAgICBrZXkt
PmJpbmQocXVlcnksIDIpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VM
RUNUIGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3Jl
RGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LT50eXBlKCkpKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51
bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQo
KSkpOwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAg
QVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwog
CkBAIC0xMjYsNiArOTcsNjIgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQo
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmEKICAgICBBU1NFUlQo
cXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdyk7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPElE
QktleT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+ID4gdmFsdWVzOworICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOworICAgIFZlY3Rv
cjxSZWZQdHI8SURCS2V5PiA+IGtleXM7CisgICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVh
dGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwg
a2V5cyk7CisgICAgaWYgKGtleXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBB
U1NFUlQoa2V5cy5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuIGtleXNbMF0ucmVsZWFzZSgpOwor
fQorCitzdGF0aWMgdm9pZCBwdXRPYmplY3RTdG9yZURhdGEoU1FMaXRlRGF0YWJhc2UmIGRiLCBi
b29sIGlzRXhpc3RpbmdWYWx1ZSwgSURCS2V5KiBrZXksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
dmFsdWUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCogZGF0YVJvd0lkKQoreworICAg
IFN0cmluZyBzcWwgPSBpc0V4aXN0aW5nVmFsdWUgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0YSBT
RVQga2V5U3RyaW5nID0gPywga2V5RGF0ZSA9ID8sIGtleU51bWJlciA9ID8sIHZhbHVlID0gPyBX
SEVSRSBpZCA9ID8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNFUlQg
SU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1
ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisgICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KGRiLCBzcWwpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPworICAgIGtleS0+YmluZFdpdGhOdWxscyhxdWVyeSwgMSk7CisgICAg
cXVlcnkuYmluZFRleHQoNCwgdmFsdWUtPnRvV2lyZVN0cmluZygpKTsKKyAgICBpZiAoaXNFeGlz
dGluZ1ZhbHVlKSB7CisgICAgICAgIEFTU0VSVCgqZGF0YVJvd0lkICE9IC0xKTsKKyAgICAgICAg
cXVlcnkuYmluZEludCg1LCAqZGF0YVJvd0lkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoKmRhdGFSb3dJZCA9PSAtMSk7CisgICAgICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBvYmplY3RT
dG9yZUlkKTsKKyAgICB9CisKKyAgICBvayA9IHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25l
OworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5k
bGluZz8KKworICAgIGlmICghaXNFeGlzdGluZ1ZhbHVlKQorICAgICAgICAqZGF0YVJvd0lkID0g
ZGIubGFzdEluc2VydFJvd0lEKCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dEluZGV4RGF0YShTUUxp
dGVEYXRhYmFzZSYgZGIsIElEQktleSoga2V5LCBpbnQ2NF90IGluZGV4SWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhSWQpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KGRiLCAi
REVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0b3JlRGF0YUlkID0gPyIpOworICAg
IGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorICAg
IGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZURhdGFJZCk7CisgICAgb2sgPSBk
ZWxldGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCisKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgcHV0UXVlcnkoZGIsICJJTlNFUlQgSU5UTyBJbmRleERhdGEgKGtleVN0cmluZywga2V5
RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkLCBvYmplY3RTdG9yZURhdGFJZCkgVkFMVUVTICg/LCA/
LCA/LCA/LCA/KSIpOworICAgIG9rID0gcHV0UXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9r
OworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5k
bGluZz8KKyAgICBrZXktPmJpbmRXaXRoTnVsbHMocHV0UXVlcnksIDEpOworICAgIHB1dFF1ZXJ5
LmJpbmRJbnQ2NCg0LCBpbmRleElkKTsKKyAgICBwdXRRdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0
U3RvcmVEYXRhSWQpOworCisgICAgb2sgPSBwdXRRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9u
ZTsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFu
ZGxpbmc/Cit9CisKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CkBA
IC0xMzYsNzMgKzE2Myw1NiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkEga2V5IHdhcyBzdXBwbGllZCBmb3IgYW4gb2JqZWN0U3Rv
cmUgdGhhdCBoYXMgYSBrZXlQYXRoLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7
Ci0gICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOwotICAgICAgICBWZWN0b3I8UmVmUHRyPElE
QktleT4gPiBpZGJLZXlzOwotICAgICAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlE
QktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBtX2tleVBhdGgsIGlk
YktleXMpOwotICAgICAgICBpZiAoaWRiS2V5cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiQW4gaW52YWxpZCBrZXlQYXRoIHdhcyBzdXBwbGllZCBmb3Ig
YW4gb2JqZWN0U3RvcmUuIikpOworICAgICAgICBrZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZh
bHVlLmdldCgpLCBtX2tleVBhdGgpOworICAgICAgICBpZiAoIWtleSkgeworICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJUaGUga2V5IGNvdWxkIG5vdCBiZSBmZXRjaGVkIGZyb20g
dGhlIGtleVBhdGguIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGtleSA9IGlkYktleXNbMF07Ci0gICAgfQotCi0gICAgaWYgKCFrZXkpIHsKKyAgICB9IGVsc2Ug
aWYgKCFrZXkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJObyBrZXkgc3VwcGxpZWQu
IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGdldFF1
ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgIiAr
IHdoZXJlQ2xhdXNlKGtleS0+dHlwZSgpKSk7CisgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4g
aW5kZXhLZXlzOworICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJl
Z2luKCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8SURC
S2V5PiBrZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpdC0+c2Vjb25kLT5r
ZXlQYXRoKCkpOworICAgICAgICBpZiAoIWtleSkgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJUaGUga2V5IGNvdWxkIG5vdCBiZSBmZXRjaGVkIGZyb20gYW4gaW5kZXgncyBr
ZXlQYXRoLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWl0LT5zZWNvbmQtPmFkZGluZ0tleUFsbG93ZWQoa2V5LmdldCgpKSkgeworICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJPbmUgb2YgdGhlIGRlcml2ZWQgKGZyb20gYSBrZXlQYXRo
KSBrZXlzIGZvciBhbiBpbmRleCBkb2VzIG5vdCBzYXRpc2Z5IGl0cyB1bmlxdWVuZXNzIHJlcXVp
cmVtZW50cy4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaW5k
ZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgZ2V0UXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3Jl
RGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LmdldCgpKSk7CiAgICAgYm9vbCBvayA9IGdldFF1ZXJ5
LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CiAKICAgICBiaW5kV2hlcmVDbGF1c2UoZ2V0
UXVlcnksIG1faWQsIGtleS5nZXQoKSk7Ci0gICAgYm9vbCBleGlzdGluZ1ZhbHVlID0gZ2V0UXVl
cnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdzsKLSAgICBpZiAoYWRkT25seSAmJiBleGlzdGluZ1Zh
bHVlKSB7CisgICAgYm9vbCBpc0V4aXN0aW5nVmFsdWUgPSBnZXRRdWVyeS5zdGVwKCkgPT0gU1FM
UmVzdWx0Um93OworICAgIGlmIChhZGRPbmx5ICYmIGlzRXhpc3RpbmdWYWx1ZSkgewogICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2Jq
ZWN0IHN0b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBzcWwg
PSBleGlzdGluZ1ZhbHVlID8gIlVQREFURSBPYmplY3RTdG9yZURhdGEgU0VUIGtleVN0cmluZyA9
ID8sIGtleURhdGUgPSA/LCBrZXlOdW1iZXIgPSA/LCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/Igot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIklOU0VSVCBJTlRPIE9iamVjdFN0b3Jl
RGF0YSAoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVlLCBvYmplY3RTdG9yZUlk
KSBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcHV0UXVlcnko
c3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKLSAgICBvayA9IHB1dFF1ZXJ5LnByZXBhcmUoKSA9PSBT
UUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIg
ZXJyb3IgaGFuZGxpbmc/Ci0gICAgc3dpdGNoIChrZXktPnR5cGUoKSkgewotICAgIGNhc2UgSURC
S2V5OjpTdHJpbmdUeXBlOgotICAgICAgICBwdXRRdWVyeS5iaW5kVGV4dCgxLCBrZXktPnN0cmlu
ZygpKTsKLSAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMik7Ci0gICAgICAgIHB1dFF1ZXJ5LmJp
bmROdWxsKDMpOwotICAgICAgICBicmVhazsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUu
Ci0gICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxs
KDEpOwotICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgyKTsKLSAgICAgICAgcHV0UXVlcnkuYmlu
ZEludCgzLCBrZXktPm51bWJlcigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJREJLZXk6
Ok51bGxUeXBlOgotICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgxKTsKLSAgICAgICAgcHV0UXVl
cnkuYmluZE51bGwoMik7Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDMpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgcHV0UXVlcnkuYmluZFRleHQoNCwgdmFsdWUtPnRvV2lyZVN0cmluZygpKTsKLSAgICBp
ZiAoZXhpc3RpbmdWYWx1ZSkKLSAgICAgICAgcHV0UXVlcnkuYmluZEludCg1LCBnZXRRdWVyeS5n
ZXRDb2x1bW5JbnQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgcHV0UXVlcnkuYmluZEludDY0KDUs
IG1faWQpOworICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24u
ICBBZnRlciB0aGlzIHBvaW50LCBkb24ndCBlcnJvciBvdXQuCiAKLSAgICBvayA9IHB1dFF1ZXJ5
LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8g
RklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKyAgICBpbnQ2NF90IGRhdGFSb3dJZCA9IGlz
RXhpc3RpbmdWYWx1ZSA/IGdldFF1ZXJ5LmdldENvbHVtbkludCgwKSA6IC0xOworICAgIHB1dE9i
amVjdFN0b3JlRGF0YShzcWxpdGVEYXRhYmFzZSgpLCBpc0V4aXN0aW5nVmFsdWUsIGtleS5nZXQo
KSwgdmFsdWUuZ2V0KCksIG1faWQsICZkYXRhUm93SWQpOworCisgICAgaW50IGkgPSAwOworICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1f
aW5kZXhlcy5lbmQoKTsgKytpdCwgKytpKQorICAgICAgICBwdXRJbmRleERhdGEoc3FsaXRlRGF0
YWJhc2UoKSwgaW5kZXhLZXlzW2ldLmdldCgpLCBpdC0+c2Vjb25kLT5pZCgpLCBkYXRhUm93SWQp
OwogCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LmdldCgpKTsKIH0KIAogdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSAiICsg
d2hlcmVDbGF1c2Uoa2V5LT50eXBlKCkpKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3Fs
aXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSAiICsgd2hlcmVDbGF1
c2Uoa2V5LmdldCgpKSk7CiAgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1
bHRPazsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3Ig
aGFuZGxpbmc/CiAKQEAgLTIzMywxMCArMjQzLDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRs
aW5nLgogICAgIGludDY0X3QgaWQgPSBzcWxpdGVEYXRhYmFzZSgpLmxhc3RJbnNlcnRSb3dJRCgp
OwogCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBJREJJbmRl
eEJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSk7Cisg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y3JlYXRlKHRoaXMsIGlkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUpOwogICAgIEFTU0VSVChp
bmRleC0+bmFtZSgpID09IG5hbWUpOwogICAgIG1faW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwot
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGluZGV4LnJlbGVhc2UoKSk7CisgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoaW5kZXguZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lKQpAQCAtMjQ0LDIyICsyNTQsMjkgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmkKICAg
ICByZXR1cm4gbV9pbmRleGVzLmdldChuYW1lKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpyZW1vdmVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCitzdGF0aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFz
ZSYgZGIsIGNvbnN0IGNoYXIqIHNxbCwgaW50NjRfdCBpZCkKIHsKLSAgICBpZiAoIW1faW5kZXhl
cy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiSW5k
ZXggbmFtZSBkb2VzIG5vdCBleGlzdC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBG
Uk9NIEluZGV4ZXMgV0hFUkUgbmFtZSA9ID8gQU5EIG9iamVjdFN0b3JlSWQgPSA/Iik7CisgICAg
U1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KGRiLCBzcWwpOwogICAgIGJvb2wgb2sgPSBkZWxl
dGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgotICAgIGRlbGV0ZVF1ZXJ5LmJp
bmRUZXh0KDEsIG5hbWUpOwotICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgyLCBtX2lkKTsKKyAg
ICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwogICAgIG9rID0gZGVsZXRlUXVlcnkuc3Rl
cCgpID09IFNRTFJlc3VsdERvbmU7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnJlbW92ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXggPSBtX2luZGV4ZXMuZ2V0KG5hbWUpOworICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIkluZGV4IG5hbWUgZG9lcyBub3QgZXhpc3QuIikpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gRklYTUU6IERlbGV0ZSBpbmRleCBkYXRhIGFz
IHdlbGwuCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oc3FsaXRlRGF0YWJhc2Uo
KSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFz
ZSgpLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBpZCA9ID8iLCBpbmRleC0+aWQoKSk7Cisg
ICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVS
RSBpbmRleElkID0gPyIsIGluZGV4LT5pZCgpKTsKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
IAogICAgIG1faW5kZXhlcy5yZW1vdmUobmFtZSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKQEAgLTMzNyw5ICszNTQsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9w
ZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbgogCiAgICAgaW50
IGN1cnJlbnRDb2x1bW4gPSAxOwogICAgIGlmIChyYW5nZS0+ZmxhZ3MoKSAmIElEQktleVJhbmdl
OjpMRUZUX0JPVU5EIHx8IHJhbmdlLT5mbGFncygpID09IElEQktleVJhbmdlOjpTSU5HTEUpCi0g
ICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gYmluZEtleSgqcXVlcnksIGN1cnJlbnRDb2x1bW4sIHJh
bmdlLT5sZWZ0KCkuZ2V0KCkpOworICAgICAgICBjdXJyZW50Q29sdW1uICs9IHJhbmdlLT5sZWZ0
KCktPmJpbmQoKnF1ZXJ5LCBjdXJyZW50Q29sdW1uKTsKICAgICBpZiAocmFuZ2UtPmZsYWdzKCkg
JiBJREJLZXlSYW5nZTo6UklHSFRfQk9VTkQgfHwgcmFuZ2UtPmZsYWdzKCkgPT0gSURCS2V5UmFu
Z2U6OlNJTkdMRSkKLSAgICAgICAgY3VycmVudENvbHVtbiArPSBiaW5kS2V5KCpxdWVyeSwgY3Vy
cmVudENvbHVtbiwgcmFuZ2UtPnJpZ2h0KCkuZ2V0KCkpOworICAgICAgICBjdXJyZW50Q29sdW1u
ICs9IHJhbmdlLT5yaWdodCgpLT5iaW5kKCpxdWVyeSwgY3VycmVudENvbHVtbik7CiAgICAgcXVl
cnktPmJpbmRJbnQ2NChjdXJyZW50Q29sdW1uLCBtX2lkKTsKIAogICAgIGlmIChxdWVyeS0+c3Rl
cCgpICE9IFNRTFJlc3VsdFJvdykgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKaW5kZXggZTEwNThjOGY2ZmMxMTcwNzAwNmQxMDExYmVkZjQxNjlkMjQ2YTAw
NC4uMzJlZjkyMDMyMjEzMjlmZTVhZTUyN2UxZTNhNjc5ZWZjY2U5ZWZmZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0zNSw2ICszNSw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFz
cyBJREJJbmRleEJhY2tlbmRJbXBsOwogY2xhc3MgU1FMaXRlRGF0YWJhc2U7CiAKIGNsYXNzIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlIHsKQEAgLTc1LDcgKzc2LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9rZXlQYXRo
OwogICAgIGJvb2wgbV9hdXRvSW5jcmVtZW50OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gPiBJbmRleE1hcDsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gPiBJbmRleE1h
cDsKICAgICBJbmRleE1hcCBtX2luZGV4ZXM7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxZjViMmY3
YjFlNjBjMjdjOWEzYzlhYWViYjE4NGIzOGUwM2VkYmNhLi5mYTJhZjkyYThiM2Y3ZDM1MjZiNmQ1
NDRkMmNhN2ZlMTUwMjA1Mzk1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0w
OC0yNiAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW5kZXggaW5zZXJ0aW9uIHN1
cHBvcnQgdG8gSW5kZXhlZERCLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQ2OTUKKworICAgICAgICBBZGQgYXNzZXJ0cyBvbiB0aGUgW10gb3BlcmF0
b3IuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmVjdG9yLmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisKIDIwMTAtMDgtMjQgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWZWN0b3IuaAppbmRleCAwNTIwODk1ZmEyZjYzMGViZTBkNjQ2ZTg5MGFi
YmE0OTdlMTY4NmVmLi5jZjNlYzk1ZTg1ZDYyOTA1YzFlY2Y3ZDY5OWM4YzM0YWNjNWE1MjZmIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmgKQEAgLTExNSw4ICsxMTUsMTYgQEAgcHVibGlj
OgogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQogCi0gICAgVCYgb3BlcmF0b3JbXShz
aXplX3QgaSkgeyByZXR1cm4gbV9wdHJbaV07IH0KLSAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNp
emVfdCBpKSBjb25zdCB7IHJldHVybiBtX3B0cltpXTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6
ZV90IGkpCisgICAgeworICAgICAgICBXRUJLSVRfQVNTRVJUKGkgPCBtX3NpemUpOworICAgICAg
ICByZXR1cm4gbV9wdHJbaV07CisgICAgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0CisgICAgeworICAgICAgICBXRUJLSVRfQVNTRVJUKGkgPCBtX3NpemUpOworICAg
ICAgICByZXR1cm4gbV9wdHJbaV07CisgICAgfQogCiAgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1f
cHRyOyB9CiAgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66486</attachid>
            <date>2010-09-03 06:24:20 -0700</date>
            <delta_ts>2010-09-03 06:59:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44695-20100903142417.patch</filename>
            <type>text/plain</type>
            <size>32319</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZjVhMjYwN2FkYjg5ZjY4ZjhiYmZmOTA2MDhiMjQ5MGIxYjE5MzcwLi43MzIwZTE0
ZTg2YjQ3NDhmNjkxYzViNzY2MmI0MTM1NGMwY2U5Yzg0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDgtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGluZGV4IGluc2Vy
dGlvbiBzdXBwb3J0IHRvIEluZGV4ZWREQi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0Njk1CisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9v
YmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL3NjcmlwdC10ZXN0cy9vYmplY3RzdG9yZS1iYXNpY3MuanM6CisgICAgICAgIChjcmVhdGVT
dWNjZXNzKToKKyAgICAgICAgKGFkZEluZGV4U3VjY2Vzcyk6CisgICAgICAgIChnZXRTdWNjZXNz
KToKKwogMjAxMC0wOC0zMSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0
CmluZGV4IDEwNTA1OGQ3MmMyYTRjNzUyNmQ2MmE0OTQyOTdjNGNkMzk4MDQyNjkuLmE2MGU4NTc2
YjY0OWI0NTlkNjM5ODZhMDNjMDUwNzBhMTg0NzlmMGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVk
LnR4dApAQCAtNTAsNyArNTAsMjggQEAgUEFTUyBzdG9yZS5uYW1lIGlzICJzdG9yZU5hbWUiCiBQ
QVNTIHN0b3JlLmtleVBhdGggaXMgbnVsbAogUEFTUyBzdG9yZU5hbWVzLmNvbnRhaW5zKCdzdG9y
ZU5hbWUnKSBpcyB0cnVlCiBQQVNTIHN0b3JlTmFtZXMubGVuZ3RoIGlzIDEKLXN0b3JlLmFkZCgn
dmFsdWUnLCAna2V5JykKK2V2ZW50LnJlc3VsdC5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJ3gn
KQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4g
cmVzdWx0IGlzIHRydWUKK1BBU1MgJ2Fib3J0JyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVh
ZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHku
Li4KKworYWRkSW5kZXhTdWNjZXNzKCk6CitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVz
dWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFT
UyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMg
dHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3Mn
IGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQg
aXMgdHJ1ZQorUEFTUyAnYWJvcnQnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdyZWFk
eVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQucmVhZHlT
dGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCitQQVNTIGV2ZW50LnNvdXJjZS5pbmRleE5hbWVz
LmNvbnRhaW5zKCdpbmRleE5hbWUnKSBpcyB0cnVlCitldmVudC5zb3VyY2UuYWRkKHt4OiAndmFs
dWUnfSwgJ2tleScpCiBQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCiBQQVNTICdv
bmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQogUEFTUyAnYWJvcnQnIGluIHJlc3VsdCBpcyB0cnVl
CkBAIC05Miw3ICsxMTMsNyBAQCBQQVNTICdhYm9ydCcgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUK
IFBBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCiBQQVNTIGV2ZW50LnRh
cmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCiAKLVBBU1MgZXZlbnQucmVzdWx0
IGlzICJ2YWx1ZSIKK1BBU1MgZXZlbnQucmVzdWx0LnggaXMgInZhbHVlIgogc3RvcmUgPSBldmVu
dC5zb3VyY2UKIHN0b3JlLnJlbW92ZSgna2V5JykKIFBBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0
IGlzIHRydWUKQEAgLTExOCwzICsxMzksNCBAQCBQQVNTIGV2ZW50LnJlc3VsdCBpcyBudWxsCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29iamVjdHN0
b3JlLWJhc2ljcy5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0
cy9vYmplY3RzdG9yZS1iYXNpY3MuanMKaW5kZXggNjM2NzVhZDA1ZDM2OTU2NjA2ODlkN2EzZmZh
OTI0Y2YzMTQ3MTUxMi4uNDk4YTZjMTdjN2MzNzFmMjE4ZWRmNTBmMDEyYjczMjc2NzNiNzAxYyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL29i
amVjdHN0b3JlLWJhc2ljcy5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9z
Y3JpcHQtdGVzdHMvb2JqZWN0c3RvcmUtYmFzaWNzLmpzCkBAIC0zNSw5ICszNSwyMSBAQCBmdW5j
dGlvbiBjcmVhdGVTdWNjZXNzKCkKICAgICBzaG91bGRCZU51bGwoInN0b3JlLmtleVBhdGgiKTsK
ICAgICBzaG91bGRCZSgic3RvcmVOYW1lcy5jb250YWlucygnc3RvcmVOYW1lJykiLCAidHJ1ZSIp
OwogICAgIHNob3VsZEJlKCJzdG9yZU5hbWVzLmxlbmd0aCIsICIxIik7Ci0gICAgLy8gRklYTUU6
IHRlc3Qgc3RvcmUuaW5kZXhOYW1lcywgYXMgd2VsbCBhcyBhbGwgb2JqZWN0IHN0b3JlJ3MgbWV0
aG9kcy4KKyAgICAvLyBGSVhNRTogdGVzdCBhbGwgb2Ygb2JqZWN0IHN0b3JlJ3MgbWV0aG9kcy4K
IAotICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInN0b3JlLmFkZCgndmFsdWUnLCAna2V5JykiKTsK
KyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJldmVudC5yZXN1bHQuY3JlYXRlSW5kZXgoJ2luZGV4
TmFtZScsICd4JykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25z
dWNjZXNzID0gYWRkSW5kZXhTdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGFkZEluZGV4U3VjY2VzcygpCit7CisJZGVi
dWcoImFkZEluZGV4U3VjY2VzcygpOiIpOworCXZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisJ
c2hvdWxkQmVUcnVlKCJldmVudC5zb3VyY2UuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1l
JykiKTsKKworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImV2ZW50LnNvdXJjZS5hZGQoe3g6ICd2
YWx1ZSd9LCAna2V5JykiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKICAgICByZXN1bHQu
b25zdWNjZXNzID0gYWRkU3VjY2VzczsKICAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOwpAQCAtNjAsNyArNzIsNyBAQCBmdW5jdGlvbiBnZXRTdWNjZXNzKCkKIHsK
ICAgICBkZWJ1ZygiZ2V0U3VjY2VzcygpOiIpOwogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVu
dCk7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC5yZXN1bHQiLCAidmFsdWUiKTsK
KyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LnJlc3VsdC54IiwgInZhbHVlIik7CiAg
ICAgdmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBldmVudC5zb3VyY2UiKTsKIAogICAg
IHJlc3VsdCA9IGV2YWxBbmRMb2coInN0b3JlLnJlbW92ZSgna2V5JykiKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JmNjdiOWIwYjRl
ZDNjOTA2MjZhMGMyMGI3OGNjZDEwYmZlYjI5ZC4uOWQxNWNhMmUxNDY2YzdiMjc5MjlkYTE3Mzkw
YzQ0M2M5ZGViMTI0MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wOC0yNiAgSmVyZW15IE9ybG93ICA8
am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgaW5kZXggaW5zZXJ0aW9uIHN1cHBvcnQgdG8gSW5kZXhlZERCLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2OTUKKwor
ICAgICAgICBXaGVuZXZlciB5b3UgaW5zZXJ0IGFuIGl0ZW0gaW50byBhbiBPYmplY3RTdG9yZSwg
aXQgc2hvdWxkIHVzZSBhbGwKKyAgICAgICAgaW5kZXhlcycga2V5IHBhdGhzIHRvIGluc2VydCBj
b3JyZXNwb25kaW5nIGVudHJpZXMgaW50byBlYWNoIGluZGV4LgorICAgICAgICBBbHNvIGRhdGEg
c2hvdWxkIGJlIGRlbGV0ZWQgb3V0IG9mIHRoZSBpbmRleCB3aGVuIGl0IGdvZXMgYXdheS4KKwor
ICAgICAgICBOb3QgbXVjaCB0ZXN0aW5nIHlldCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBkaXJl
Y3RseSBvYnNlcnZlIGluZGV4ZXMuCisgICAgICAgIE1vcmUgd2lsbCBiZSBpbiBuZXh0IHBhdGNo
LgorCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVUYWJsZXMpOgorICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXguaWRsOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjp3aGVyZUNsYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpiaW5kV2hlcmVDbGF1c2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6YWRkaW5nS2V5QWxsb3dlZCk6
CisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjppZCk6CisgICAgICAgICogc3RvcmFnZS9JREJLZXku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5Ojp3aGVyZVN5bnRheCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXk6OmJpbmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpiaW5kV2l0
aE51bGxzKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aGVyZUNsYXVzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpiaW5kV2hlcmVDbGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmZldGNoS2V5RnJvbUtleVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6cHV0T2JqZWN0U3RvcmVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OnB1dEluZGV4RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmRvRGVsZXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorCiAyMDEwLTA4LTMx
ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCmluZGV4IGY0ZjI5MzRkODdmM2QwYzAzMTI1YzA5NzExNTUyNDI0Yjg0ZTRhMjQuLjAyMWY3
MGFhNGI0ODgxMTllOWZjOTYxNmYwNDVkNDk5Y2E0YjgxYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTE3Nyw4ICsxNzcsOCBAQCB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJRAogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZG9EZWxldGUoc3Fs
aXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlcyBXSEVSRSBpZCA9ID8iLCBv
YmplY3RTdG9yZS0+aWQoKSk7CiAgICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVU
RSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0
b3JlLT5pZCgpKTsKKyAgICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00g
SW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgSU4gKFNFTEVDVCBpZCBGUk9NIEluZGV4ZXMgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIGRvRGVsZXRlKHNx
bGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0b3JlSWQg
PSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIC8vIEZJWE1FOiBEZWxldGUgaW5kZXggZGF0
YSBhcyB3ZWxsLgogICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogCiAgICAgbV9vYmplY3RTdG9y
ZXMucmVtb3ZlKG5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cAppbmRleCBkNjU2MTI4YmY1OTlmOWZiMWJlYjE3NmNlOWMxZmNmZDEzMGE2MjA3Li41MGNmNzc4
ZjE2MmE3MDk5MDBiOWQwMjUwYTdiMzY0NjEzYjFhOGE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtODMsMTkgKzgzLDI4IEBAIHN0YXRpYyBib29sIGNy
ZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSogc3FsaXRlRGF0YWJhc2UpCiAgICAgICAgICJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBNZXRhRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwg
bmFtZSBURVhUIE5PVCBOVUxMLCBkZXNjcmlwdGlvbiBURVhUIE5PVCBOVUxMLCB2ZXJzaW9uIFRF
WFQgTk9UIE5VTEwpIiwKIAogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3Rv
cmVzIiwKLSAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9iamVjdFN0b3JlcyAo
aWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUIE5PVCBOVUxMLCBrZXlQYXRoIFRFWFQs
IGRvQXV0b0luY3JlbWVudCBJTlRFR0VSIE5PVCBOVUxMKSIsCisgICAgICAgICJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBPYmplY3RTdG9yZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5h
bWUgVEVYVCBOT1QgTlVMTCBVTklRVUUsIGtleVBhdGggVEVYVCwgZG9BdXRvSW5jcmVtZW50IElO
VEVHRVIgTk9UIE5VTEwpIiwKICAgICAgICAgIkRST1AgSU5ERVggSUYgRVhJU1RTIE9iamVjdFN0
b3Jlc19uYW1lIiwKICAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBP
YmplY3RTdG9yZXNfbmFtZSBPTiBPYmplY3RTdG9yZXMobmFtZSkiLAogCiAgICAgICAgICJEUk9Q
IFRBQkxFIElGIEVYSVNUUyBJbmRleGVzIiwKLSAgICAgICAgIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIEluZGV4ZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5U
RUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwgbmFtZSBURVhUIE5PVCBO
VUxMLCBrZXlQYXRoIFRFWFQsIGlzVW5pcXVlIElOVEVHRVIgTk9UIE5VTEwpIiwKKyAgICAgICAg
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEluZGV4ZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3Jl
KGlkKSwgbmFtZSBURVhUIE5PVCBOVUxMIFVOSVFVRSwga2V5UGF0aCBURVhULCBpc1VuaXF1ZSBJ
TlRFR0VSIE5PVCBOVUxMKSIsCiAgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNUUyBJbmRleGVz
X2NvbXBvc2l0IiwKICAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBJ
bmRleGVzX2NvbXBvc2l0IE9OIEluZGV4ZXMob2JqZWN0U3RvcmVJZCwgbmFtZSkiLAogCiAgICAg
ICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RTdG9yZURhdGEiLAotICAgICAgICAiQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VSIFBSSU1B
UlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RT
dG9yZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIElOVEVHRVIsIGtleU51bWJlciBJTlRF
R0VSLCB2YWx1ZSBURVhUIE5PVCBOVUxMKSIsCisgICAgICAgICJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBPYmplY3RTdG9yZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0
b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5U3Ry
aW5nIFRFWFQgVU5JUVVFLCBrZXlEYXRlIElOVEVHRVIgVU5JUVVFLCBrZXlOdW1iZXIgSU5URUdF
UiBVTklRVUUsIHZhbHVlIFRFWFQgTk9UIE5VTEwpIiwKICAgICAgICAgIkRST1AgSU5ERVggSUYg
RVhJU1RTIE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCIsCi0gICAgICAgICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgT2JqZWN0U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0
b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCkiCisg
ICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgT2JqZWN0U3RvcmVEYXRh
X2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJl
ciwgb2JqZWN0U3RvcmVJZCkiLAorCisgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBJbmRl
eERhdGEiLAorICAgICAgICAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSW5kZXhEYXRhIChp
ZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBpbmRleElkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNF
UyBJbmRleHMoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBJTlRFR0VSLCBrZXlOdW1iZXIg
SU5URUdFUiwgb2JqZWN0U3RvcmVEYXRhSWQgSU5URUdFUiBOT1QgTlVMTCBVTklRVUUgUkVGRVJF
TkNFUyBPYmplY3RTdG9yZURhdGEoaWQpKSIsCisgICAgICAgICJEUk9QIElOREVYIElGIEVYSVNU
UyBJbmRleERhdGFfY29tcG9zaXQiLAorICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBO
T1QgRVhJU1RTIEluZGV4RGF0YV9jb21wb3NpdCBPTiBJbmRleERhdGEoa2V5U3RyaW5nLCBrZXlE
YXRlLCBrZXlOdW1iZXIsIGluZGV4SWQpIiwKKyAgICAgICAgIkRST1AgSU5ERVggSUYgRVhJU1RT
IEluZGV4RGF0YV9vYmplY3RTdG9yZURhdGFJZCIsCisgICAgICAgICJDUkVBVEUgVU5JUVVFIElO
REVYIElGIE5PVCBFWElTVFMgSW5kZXhEYXRhX29iamVjdFN0b3JlRGF0YUlkIE9OIEluZGV4RGF0
YShvYmplY3RTdG9yZURhdGFJZCkiLAorICAgICAgICAiRFJPUCBJTkRFWCBJRiBFWElTVFMgSW5k
ZXhEYXRhX2luZGV4SWQiLAorICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJ
U1RTIEluZGV4RGF0YV9pbmRleElkIE9OIEluZGV4RGF0YShpbmRleElkKSIKICAgICAgICAgfTsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGNvbW1hbmRzKTsgKytpKSB7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQkluZGV4LmlkbAppbmRleCBlNzk2YjAzOGU0MmQ4MmIyOTAyZmJjYzkwOTIwZDcxZTY0
OTZlNDMwLi42Mjk0ODFlZDU1MTkwMmUzNzIyODVhODE2ZWQ0ZTFkMzhhZTQ4M2Q0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaWRsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleC5pZGwKQEAgLTI4LDExICsyOCwxNiBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgaW50
ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQogICAgIF0gSURC
SW5kZXggewotICAgICAgICAvLyBGSVhNRTogQ29tcGxldGUgdGhpcyBmaWxlLgotCiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgLy8gRklYTUU6IEFk
ZCAic3RvcmVOYW1lIi4KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBrZXlQ
YXRoOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB1bmlxdWU7CisKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICAgICAgLy9JREJSZXF1ZXN0IG9wZW5PYmplY3RD
dXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlvbmFsXSB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24pIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgLy9J
REJSZXF1ZXN0IG9wZW5DdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4g
W09wdGlvbmFsXSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgLy9JREJSZXF1ZXN0IGdldE9iamVjdChpbiBJREJLZXkga2V5KSByYWlzZXMg
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIC8vSURCUmVxdWVzdCBnZXQoaW4gSURCS2V5IGtleSkg
cmFpc2VzIChET01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcAppbmRleCAxODBmZjFkOGJlZDI3N2NhMGRhOTM4NWM4MjkzMTJlOGRj
Njc3YjQ1Li40MmFhNjJiYzQ2M2E4MmRjMWEyNmNlNDRkNzI4NTA3Njk2YTNmYzIyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsNiArNDcs
MzEgQEAgSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQkluZGV4QmFja2VuZEltcGwoKQogewogfQog
CitzdGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleSoga2V5KQoreworICAgIHJldHVybiAi
V0hFUkUgaW5kZXhJZCA9ID8gIEFORCAgIiArIGtleS0+d2hlcmVTeW50YXgoKTsKK30KKworc3Rh
dGljIHZvaWQgYmluZFdoZXJlQ2xhdXNlKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3Qg
aWQsIElEQktleSoga2V5KQoreworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7CisgICAga2V5
LT5iaW5kKHF1ZXJ5LCAyKTsKK30KKworYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdL
ZXlBbGxvd2VkKElEQktleSoga2V5KQoreworICAgIGlmICghbV91bmlxdWUpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCks
ICJTRUxFQ1QgaWQgRlJPTSBJbmRleERhdGEgIiArIHdoZXJlQ2xhdXNlKGtleSkpOworICAgIGJv
b2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNF
RChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworICAgIGJpbmRXaGVy
ZUNsYXVzZShxdWVyeSwgbV9pZCwga2V5KTsKKyAgICBib29sIGV4aXN0aW5nVmFsdWUgPSBxdWVy
eS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OworCisgICAgcmV0dXJuICFleGlzdGluZ1ZhbHVlOwor
fQorCiBTUUxpdGVEYXRhYmFzZSYgSURCSW5kZXhCYWNrZW5kSW1wbDo6c3FsaXRlRGF0YWJhc2Uo
KSBjb25zdAogewogICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5kYXRhYmFzZSgpLT5zcWxpdGVE
YXRhYmFzZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZElt
cGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmgKaW5kZXggYWNmNmIx
ZjIwZmNhNmQxYzEyYWE4MGFhMzViMzQ2ZDIxMjYxZDI3MS4uOTdjNjVmOWZlNTA5MDNlNTYzMGJm
MWEzZDEyM2ZkNTRiNzc0OWI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4
QmFja2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5o
CkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCS2V5
OwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIFNRTGl0ZURhdGFiYXNl
OwogCkBAIC00Myw2ICs0NCw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+SURCSW5k
ZXhCYWNrZW5kSW1wbCgpOwogCisgICAgaW50NjRfdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KKyAg
ICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURCS2V5Kik7CisKICAgICAvLyBJbXBsZW1lbnRzIElE
QkluZGV4QmFja2VuZEludGVyZmFjZS4KICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgeyByZXR1
cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0aCgpIHsgcmV0dXJuIG1fa2V5
UGF0aDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAgYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5LmNwcAppbmRleCA1MGM0YzQ2YzE1Nzg4NGNmYmMzYTU1ZWYxY2I5ZDk0
ZDBiZWRkNjE2Li42YWU3OWJhZDdjMTJjZWM5MzhjYWNiZmZjMDRmY2FlYWJiY2Y1OWJjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzIsNiArNzMsNjMgQEAg
Ym9vbCBJREJLZXk6OmlzRXF1YWwoSURCS2V5KiBvdGhlcikKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK1N0cmluZyBJREJLZXk6OndoZXJlU3ludGF4KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1f
dHlwZSkgeworICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4gImtl
eVN0cmluZyA9ID8iOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1
cm4gImtleU51bWJlciA9ID8iOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4KKyAgICBj
YXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiAia2V5U3RyaW5nIElTIE5VTEwg
IEFORCAga2V5RGF0ZSBJUyBOVUxMICBBTkQgIGtleU51bWJlciBJUyBOVUxMIjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKKy8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBpdGVtcyBib3VuZC4KK2ludCBJREJLZXk6OmJpbmQoU1FMaXRlU3Rh
dGVtZW50JiBxdWVyeSwgaW50IGNvbHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICBxdWVyeS5iaW5kVGV4dChj
b2x1bW4sIG1fc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBJREJLZXk6Ok51
bWJlclR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRJbnQoY29sdW1uLCBtX251bWJlcik7CisgICAg
ICAgIHJldHVybiAxOworICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgSURCS2V5OjpiaW5kV2l0aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGlu
dCBiYXNlQ29sdW1uKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBJ
REJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGJhc2VDb2x1bW4gKyAw
LCBtX3N0cmluZyk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsKKyAg
ICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNv
bHVtbiArIDApOworICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMSk7CisgICAg
ICAgIHF1ZXJ5LmJpbmRJbnQoYmFzZUNvbHVtbiArIDIsIG1fbnVtYmVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAgICBxdWVyeS5iaW5kTnVsbChi
YXNlQ29sdW1uICsgMCk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsK
KyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5LmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgKaW5kZXggMjI4YjRhNGI0
NzEzY2NiMjNhYmNlNTYwMDAxN2I0YjczMzk3OWFkNC4uYjlhMGJlN2Y1ZjYyYzE0ZTVlMDI0YjI3
YzAyMmQ0OGI2OTliZGJmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCisr
KyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaApAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNRTGl0ZVN0YXRlbWVudDsKKwogLy8gRklYTUU6IEFkZCBk
YXRlcy4KIGNsYXNzIElEQktleSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQktleT4gewogcHVibGlj
OgpAQCAtNzIsNiArNzQsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBpc0VxdWFsKElE
QktleSogb3RoZXIpOworICAgIFN0cmluZyB3aGVyZVN5bnRheCgpIGNvbnN0OworICAgIGludCBi
aW5kKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBjb2x1bW4pIGNvbnN0OworICAgIHZvaWQg
YmluZFdpdGhOdWxscyhTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgSURCS2V5KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmUuaWRsIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlk
bAppbmRleCAxNjQ5YTFkYTlhYzI1ZTIxNzI5ZjI2OTMzNzkzMzE1MmVlZWJmN2ZiLi5jY2QwMzEx
YzgwYmViNWYwZWM4NDA3MDRkNmZkMmU3ZTk0YjcwOTZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5pZGwKQEAgLTI4LDEwICsyOCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZh
Y2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCiAgICAgXSBJREJPYmpl
Y3RTdG9yZSB7CisgICAgICAgIC8vIEZJWE1FOiBNYW55IG9mIHRoZXNlIHNob3VsZCByYWlzZSBv
biBjZXJ0YWluIGVycm9ycy4KICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3QgZ2V0KGluIElEQktleSBrZXkpOyAgICAgICAgCi0gICAgICAgIC8vIEZJ
WE1FOiBDb21lIHRvIGNvbmNlbnN1cyByZSBnZXRBbGwuCi0gICAgICAgIC8vIEZJWE1FOiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB5b3UgcGFzcyBpbiBzb21l
dGhpbmcgdGhhdCBjYW4ndCBiZSBzZXJpYWxpemVkLgotICAgICAgICAvLyAgICAgICAgV2UgbmVl
ZCB0byBpbnN0ZWFkICJyYWlzZSIgdGhpcyBlcnJvciB2aWEgYW4gZXJyb3IgY2FsbGJhY2suCiAg
ICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGFkZChp
biBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSk7
CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHB1
dChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtl
eSk7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0
IHJlbW92ZShpbiBJREJLZXkga2V5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAppbmRleCBhZWIzY2VkZDUyNmE3MmZkMWUzYWIxZTMxODU2MmI4MTlj
ZjE1MmZiLi5kOWE0NzkxMGJkNDJhNTUyYTc3YTM4MTFlMTMxZWFmYjRhYWY0MGQzIDEwMDc1NQot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5z
YWN0aW9uLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIApAQCAtNjUsNTAgKzY2
LDIwIEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgcmV0dXJuIGluZGV4TmFtZXMucmVsZWFzZSgpOwog
fQogCi1zdGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleTo6VHlwZSB0eXBlKQorc3RhdGlj
IFN0cmluZyB3aGVyZUNsYXVzZShJREJLZXkqIGtleSkKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuICJXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPyAgQU5EICBrZXlTdHJpbmcgPSA/IjsKLSAgICBjYXNlIElEQktleTo6TnVt
YmVyVHlwZToKLSAgICAgICAgcmV0dXJuICJXSEVSRSBvYmplY3RTdG9yZUlkID0gPyAgQU5EICBr
ZXlOdW1iZXIgPSA/IjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGUuCi0gICAgY2FzZSBJ
REJLZXk6Ok51bGxUeXBlOgotICAgICAgICByZXR1cm4gIldIRVJFIG9iamVjdFN0b3JlSWQgPSA/
ICBBTkQgIGtleVN0cmluZyBJUyBOVUxMICBBTkQgIGtleURhdGUgSVMgTlVMTCAgQU5EICBrZXlO
dW1iZXIgSVMgTlVMTCI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuICIiOwotfQotCi0vLyBSZXR1cm5zIG51bWJlciBvZiBpdGVtcyBib3VuZC4KLXN0YXRp
YyBpbnQgYmluZEtleShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgY29sdW1uLCBJREJLZXkq
IGtleSkKLXsKLSAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0
cmluZ1R5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGNvbHVtbiwga2V5LT5zdHJpbmcoKSk7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAg
ICBxdWVyeS5iaW5kSW50KGNvbHVtbiwga2V5LT5udW1iZXIoKSk7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZS4KLSAgICBjYXNlIElEQktleTo6TnVsbFR5
cGU6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiAwOworICAgIHJldHVybiAiV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFO
RCAgIiArIGtleS0+d2hlcmVTeW50YXgoKTsKIH0KIAogc3RhdGljIHZvaWQgYmluZFdoZXJlQ2xh
dXNlKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQsIElEQktleSoga2V5KQogewog
ICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7Ci0gICAgYmluZEtleShxdWVyeSwgMiwga2V5KTsK
KyAgICBrZXktPmJpbmQocXVlcnksIDIpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRhYmFz
ZSgpLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9i
amVjdFN0b3JlRGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LT50eXBlKCkpKTsKKyAgICBTUUxpdGVT
dGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBrZXlTdHJpbmcsIGtleURh
dGUsIGtleU51bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNl
KGtleS5nZXQoKSkpOwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0
T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhh
bmRsaW5nPwogCkBAIC0xMjYsNiArOTcsNTkgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmEKICAg
ICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdyk7CiB9CiAKK3N0YXRpYyBQYXNz
UmVmUHRyPElEQktleT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTZXJpYWxpemVkU2NyaXB0VmFsdWUq
IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgVmVjdG9yPFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+ID4gdmFsdWVzOworICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOwor
ICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGtleXM7CisgICAgSURCS2V5UGF0aEJhY2tlbmRJ
bXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywg
a2V5UGF0aCwga2V5cyk7CisgICAgaWYgKGtleXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBBU1NFUlQoa2V5cy5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuIGtleXNbMF0ucmVs
ZWFzZSgpOworfQorCitzdGF0aWMgdm9pZCBwdXRPYmplY3RTdG9yZURhdGEoU1FMaXRlRGF0YWJh
c2UmIGRiLCBJREJLZXkqIGtleSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90KiBkYXRhUm93SWQpCit7CisgICAgU3RyaW5nIHNxbCA9
ICpkYXRhUm93SWQgIT0gLTEgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0YSBTRVQga2V5U3RyaW5n
ID0gPywga2V5RGF0ZSA9ID8sIGtleU51bWJlciA9ID8sIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0
U3RvcmVEYXRhIChrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFsdWUsIG9iamVjdFN0
b3JlSWQpIFZBTFVFUyAoPywgPywgPywgPywgPykiOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShkYiwgc3FsKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9r
OworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5k
bGluZz8KKyAgICBrZXktPmJpbmRXaXRoTnVsbHMocXVlcnksIDEpOworICAgIHF1ZXJ5LmJpbmRU
ZXh0KDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7CisgICAgaWYgKCpkYXRhUm93SWQgIT0gLTEp
CisgICAgICAgIHF1ZXJ5LmJpbmRJbnQoNSwgKmRhdGFSb3dJZCk7CisgICAgZWxzZQorICAgICAg
ICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0U3RvcmVJZCk7CisKKyAgICBvayA9IHF1ZXJ5LnN0
ZXAoKSA9PSBTUUxSZXN1bHREb25lOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklY
TUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKy8KKyAgICBpZiAoKmRhdGFSb3dJZCA9PSAtMSkK
KyAgICAgICAgKmRhdGFSb3dJZCA9IGRiLmxhc3RJbnNlcnRSb3dJRCgpOworfQorCitzdGF0aWMg
dm9pZCBwdXRJbmRleERhdGEoU1FMaXRlRGF0YWJhc2UmIGRiLCBJREJLZXkqIGtleSwgaW50NjRf
dCBpbmRleElkLCBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKQoreworICAgIFNRTGl0ZVN0YXRl
bWVudCBkZWxldGVRdWVyeShkYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RT
dG9yZURhdGFJZCA9ID8iKTsKKyAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09
IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRl
ciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgb2JqZWN0U3Rv
cmVEYXRhSWQpOworICAgIG9rID0gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7
CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRs
aW5nLgorCisgICAgU1FMaXRlU3RhdGVtZW50IHB1dFF1ZXJ5KGRiLCAiSU5TRVJUIElOVE8gSW5k
ZXhEYXRhIChrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCwgb2JqZWN0U3Rv
cmVEYXRhSWQpIFZBTFVFUyAoPywgPywgPywgPywgPykiKTsKKyAgICBvayA9IHB1dFF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJ
WE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisgICAga2V5LT5iaW5kV2l0aE51bGxzKHB1dFF1
ZXJ5LCAxKTsKKyAgICBwdXRRdWVyeS5iaW5kSW50NjQoNCwgaW5kZXhJZCk7CisgICAgcHV0UXVl
cnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlRGF0YUlkKTsKKworICAgIG9rID0gcHV0UXVlcnku
c3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBG
SVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworfQorCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOwpAQCAtMTM2LDczICsxNjAsNTYgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBy
cFZhbHVlLAogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJBIGtleSB3YXMgc3Vw
cGxpZWQgZm9yIGFuIG9iamVjdFN0b3JlIHRoYXQgaGFzIGEga2V5UGF0aC4iKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+ID4gdmFsdWVzOwotICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAg
ICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaWRiS2V5czsKLSAgICAgICAgSURCS2V5UGF0
aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRo
KHZhbHVlcywgbV9rZXlQYXRoLCBpZGJLZXlzKTsKLSAgICAgICAgaWYgKGlkYktleXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkFuIGludmFsaWQga2V5
UGF0aCB3YXMgc3VwcGxpZWQgZm9yIGFuIG9iamVjdFN0b3JlLiIpKTsKKyAgICAgICAga2V5ID0g
ZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgbV9rZXlQYXRoKTsKKyAgICAgICAgaWYg
KCFrZXkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiVGhlIGtleSBjb3Vs
ZCBub3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRoLiIpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBrZXkgPSBpZGJLZXlzWzBdOwotICAgIH0KLQotICAgIGlm
ICgha2V5KSB7CisgICAgfSBlbHNlIGlmICgha2V5KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSLCAiTm8ga2V5IHN1cHBsaWVkLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBnZXRRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkIEZS
T00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXktPnR5cGUoKSkpOworICAgIFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5czsKKyAgICBmb3IgKEluZGV4TWFwOjppdGVy
YXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1
ZS5nZXQoKSwgaXQtPnNlY29uZC0+a2V5UGF0aCgpKTsKKyAgICAgICAgaWYgKCFrZXkpIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0
Y2hlZCBmcm9tIGFuIGluZGV4J3Mga2V5UGF0aC4iKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5hZGRpbmdLZXlBbGxvd2VkKGtleS5n
ZXQoKSkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiT25lIG9mIHRoZSBk
ZXJpdmVkIChmcm9tIGEga2V5UGF0aCkga2V5cyBmb3IgYW4gaW5kZXggZG9lcyBub3Qgc2F0aXNm
eSBpdHMgdW5pcXVlbmVzcyByZXF1aXJlbWVudHMuIikpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7CisgICAg
fQorCisgICAgU1FMaXRlU3RhdGVtZW50IGdldFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxF
Q1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOwog
ICAgIGJvb2wgb2sgPSBnZXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwogCiAg
ICAgYmluZFdoZXJlQ2xhdXNlKGdldFF1ZXJ5LCBtX2lkLCBrZXkuZ2V0KCkpOwotICAgIGJvb2wg
ZXhpc3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7Ci0gICAgaWYg
KGFkZE9ubHkgJiYgZXhpc3RpbmdWYWx1ZSkgeworICAgIGJvb2wgaXNFeGlzdGluZ1ZhbHVlID0g
Z2V0UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdzsKKyAgICBpZiAoYWRkT25seSAmJiBpc0V4
aXN0aW5nVmFsdWUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxy
ZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBTdHJpbmcgc3FsID0gZXhpc3RpbmdWYWx1ZSA/ICJVUERBVEUgT2JqZWN0U3Rv
cmVEYXRhIFNFVCBrZXlTdHJpbmcgPSA/LCBrZXlEYXRlID0gPywga2V5TnVtYmVyID0gPywgdmFs
dWUgPSA/IFdIRVJFIGlkID0gPyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJ
TlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVy
LCB2YWx1ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHB1dFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksIHNxbCk7Ci0gICAgb2sgPSBw
dXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotICAgIHN3aXRjaCAoa2V5LT50
eXBlKCkpIHsKLSAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKLSAgICAgICAgcHV0UXVlcnku
YmluZFRleHQoMSwga2V5LT5zdHJpbmcoKSk7Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDIp
OwotICAgICAgICBwdXRRdWVyeS5iaW5kTnVsbCgzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBkYXRlLgotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAg
ICAgICBwdXRRdWVyeS5iaW5kTnVsbCgxKTsKLSAgICAgICAgcHV0UXVlcnkuYmluZE51bGwoMik7
Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmRJbnQoMywga2V5LT5udW1iZXIoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAgICAgcHV0UXVlcnkuYmluZE51
bGwoMSk7Ci0gICAgICAgIHB1dFF1ZXJ5LmJpbmROdWxsKDIpOwotICAgICAgICBwdXRRdWVyeS5i
aW5kTnVsbCgzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHB1dFF1ZXJ5LmJpbmRUZXh0KDQsIHZhbHVlLT50
b1dpcmVTdHJpbmcoKSk7Ci0gICAgaWYgKGV4aXN0aW5nVmFsdWUpCi0gICAgICAgIHB1dFF1ZXJ5
LmJpbmRJbnQoNSwgZ2V0UXVlcnkuZ2V0Q29sdW1uSW50KDApKTsKLSAgICBlbHNlCi0gICAgICAg
IHB1dFF1ZXJ5LmJpbmRJbnQ2NCg1LCBtX2lkKTsKKyAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwg
ZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2ludCwgZG9uJ3QgZXJyb3Igb3V0
LgogCi0gICAgb2sgPSBwdXRRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NF
UlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisgICAg
aW50NjRfdCBkYXRhUm93SWQgPSBpc0V4aXN0aW5nVmFsdWUgPyBnZXRRdWVyeS5nZXRDb2x1bW5J
bnQoMCkgOiAtMTsKKyAgICBwdXRPYmplY3RTdG9yZURhdGEoc3FsaXRlRGF0YWJhc2UoKSwga2V5
LmdldCgpLCB2YWx1ZS5nZXQoKSwgbV9pZCwgJmRhdGFSb3dJZCk7CisKKyAgICBpbnQgaSA9IDA7
CisgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gbV9pbmRleGVzLmVuZCgpOyArK2l0LCArK2kpCisgICAgICAgIHB1dEluZGV4RGF0YShzcWxp
dGVEYXRhYmFzZSgpLCBpbmRleEtleXNbaV0uZ2V0KCksIGl0LT5zZWNvbmQtPmlkKCksIGRhdGFS
b3dJZCk7CiAKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkuZ2V0KCkpOwogfQogCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIFNRTGl0ZVN0YXRl
bWVudCBxdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRh
ICIgKyB3aGVyZUNsYXVzZShrZXktPnR5cGUoKSkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVy
ZUNsYXVzZShrZXkuZ2V0KCkpKTsKICAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZz8KIApAQCAtMjMzLDEwICsyNDAsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2UKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3Ig
aGFuZGxpbmcuCiAgICAgaW50NjRfdCBpZCA9IHNxbGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJv
d0lEKCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IElE
QkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVl
KTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tl
bmRJbXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSk7CiAgICAgQVNT
RVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7CiAgICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRl
eCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoaW5kZXgucmVsZWFzZSgpKTsKKyAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhpbmRleC5nZXQoKSk7CiB9CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChjb25zdCBT
dHJpbmcmIG5hbWUpCkBAIC0yNDQsMjIgKzI1MSwyOSBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoY29uc3QgU3Ry
aQogICAgIHJldHVybiBtX2luZGV4ZXMuZ2V0KG5hbWUpOwogfQogCi12b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3N0YXRpYyB2b2lkIGRvRGVsZXRlKFNRTGl0ZURh
dGFiYXNlJiBkYiwgY29uc3QgY2hhciogc3FsLCBpbnQ2NF90IGlkKQogewotICAgIGlmICghbV9p
bmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlIs
ICJJbmRleCBuYW1lIGRvZXMgbm90IGV4aXN0LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiREVM
RVRFIEZST00gSW5kZXhlcyBXSEVSRSBuYW1lID0gPyBBTkQgb2JqZWN0U3RvcmVJZCA9ID8iKTsK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlUXVlcnkoZGIsIHNxbCk7CiAgICAgYm9vbCBvayA9
IGRlbGV0ZVF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgZGVsZXRlUXVl
cnkuYmluZFRleHQoMSwgbmFtZSk7Ci0gICAgZGVsZXRlUXVlcnkuYmluZEludDY0KDIsIG1faWQp
OworICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7CiAgICAgb2sgPSBkZWxldGVRdWVy
eS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8v
IEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7CisgICAgaWYgKCFpbmRleCkgeworICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiSW5kZXggbmFtZSBkb2VzIG5vdCBleGlzdC4iKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAvLyBGSVhNRTogRGVsZXRlIGluZGV4IGRh
dGEgYXMgd2VsbC4KKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRh
YmFzZSgpKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGRvRGVsZXRlKHNxbGl0ZURh
dGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleGVzIFdIRVJFIGlkID0gPyIsIGluZGV4LT5pZCgp
KTsKKyAgICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhEYXRh
IFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXgtPmlkKCkpOworICAgIHRyYW5zYWN0aW9uLmNvbW1p
dCgpOwogCiAgICAgbV9pbmRleGVzLnJlbW92ZShuYW1lKTsKICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcygpOwpAQCAtMzM3LDkgKzM1MSw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduCiAKICAg
ICBpbnQgY3VycmVudENvbHVtbiA9IDE7CiAgICAgaWYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5
UmFuZ2U6OkxFRlRfQk9VTkQgfHwgcmFuZ2UtPmZsYWdzKCkgPT0gSURCS2V5UmFuZ2U6OlNJTkdM
RSkKLSAgICAgICAgY3VycmVudENvbHVtbiArPSBiaW5kS2V5KCpxdWVyeSwgY3VycmVudENvbHVt
biwgcmFuZ2UtPmxlZnQoKS5nZXQoKSk7CisgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gcmFuZ2Ut
PmxlZnQoKS0+YmluZCgqcXVlcnksIGN1cnJlbnRDb2x1bW4pOwogICAgIGlmIChyYW5nZS0+Zmxh
Z3MoKSAmIElEQktleVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJL
ZXlSYW5nZTo6U0lOR0xFKQotICAgICAgICBjdXJyZW50Q29sdW1uICs9IGJpbmRLZXkoKnF1ZXJ5
LCBjdXJyZW50Q29sdW1uLCByYW5nZS0+cmlnaHQoKS5nZXQoKSk7CisgICAgICAgIGN1cnJlbnRD
b2x1bW4gKz0gcmFuZ2UtPnJpZ2h0KCktPmJpbmQoKnF1ZXJ5LCBjdXJyZW50Q29sdW1uKTsKICAg
ICBxdWVyeS0+YmluZEludDY0KGN1cnJlbnRDb2x1bW4sIG1faWQpOwogCiAgICAgaWYgKHF1ZXJ5
LT5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaAppbmRleCBlMTA1OGM4ZjZmYzExNzA3MDA2ZDEwMTFiZWRmNDE2OWQy
NDZhMDA0Li4zMmVmOTIwMzIyMTMyOWZlNWFlNTI3ZTFlM2E2NzllZmNjZTllZmZlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTM1LDYgKzM1LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsK
K2NsYXNzIElEQkluZGV4QmFja2VuZEltcGw7CiBjbGFzcyBTUUxpdGVEYXRhYmFzZTsKIAogY2xh
c3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UgewpAQCAtNzUsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2tl
eVBhdGg7CiAgICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiA+IEluZGV4TWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiA+IElu
ZGV4TWFwOwogICAgIEluZGV4TWFwIG1faW5kZXhlczsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDll
MDAzMDJlYTkzODAxZTQ2YmZiNzdkY2I2MjM1YjFlZWRjMDBkNzUuLmVmZmFmYTNkMzM4ZDRiMjE1
YjI0N2RiMzQyNDk0YzcxMjEzZjQ3NDggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA4LTI2ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbmRleCBpbnNlcnRp
b24gc3VwcG9ydCB0byBJbmRleGVkREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NDY5NQorCisgICAgICAgIEFkZCBhc3NlcnRzIG9uIHRoZSBbXSBv
cGVyYXRvci4KKworICAgICAgICAqIHB1YmxpYy9XZWJWZWN0b3IuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmVjdG9yOjpvcGVyYXRvcltdKToKKwogMjAxMC0wOC0zMSAgSmVyZW15IE9ybG93ICA8
am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCmluZGV4IDA1MjA4OTVmYTJmNjMwZWJlMGQ2NDZl
ODkwYWJiYTQ5N2UxNjg2ZWYuLmNmM2VjOTVlODVkNjI5MDVjMWVjZjdkNjk5YzhjMzRhY2M1YTUy
NmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWZWN0b3IuaApAQCAtMTE1LDggKzExNSwxNiBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CiAKLSAgICBUJiBvcGVyYXRv
cltdKHNpemVfdCBpKSB7IHJldHVybiBtX3B0cltpXTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9y
W10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fcHRyW2ldOyB9CisgICAgVCYgb3BlcmF0b3Jb
XShzaXplX3QgaSkKKyAgICB7CisgICAgICAgIFdFQktJVF9BU1NFUlQoaSA8IG1fc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBtX3B0cltpXTsKKyAgICB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShz
aXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIFdFQktJVF9BU1NFUlQoaSA8IG1fc2l6ZSk7
CisgICAgICAgIHJldHVybiBtX3B0cltpXTsKKyAgICB9CiAKICAgICBUKiBkYXRhKCkgeyByZXR1
cm4gbV9wdHI7IH0KICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0K
</data>
<flag name="review"
          id="55523"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>