<?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>34150</bug_id>
          
          <creation_ts>2010-01-25 17:54:38 -0800</creation_ts>
          <short_desc>WebKit needs a mechanism to catch stale HashMap entries</short_desc>
          <delta_ts>2010-01-27 15:42:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184459</commentid>
    <comment_count>0</comment_count>
      <attachid>47379</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-25 17:54:38 -0800</bug_when>
    <thetext>Created attachment 47379
work in progress

Having e.g. HashMap&lt;AtomicStringImpl*, ValueType&gt;, it is extremely difficult to catch stale AtomicStringImpl pointers in map keys. In most cases, they can just sit there making the map larger, and only cause issues if another AtomicStringImpl gets allocated at exactly the same address.

Even running with CHECK_HASHTABLE_CONSISTENCY won&apos;t catch this, since pointer&apos;s hash is just its value, so the table remains perfectly consistent. And we (I?) don&apos;t usually enable CHECK_HASHTABLE_CONSISTENCY, even when hunting down mystery crashers.

Making things more complicated, we often allow stale pointers in such HashMaps to exist for a while (a cache only needs to be reset when accessed, not every time something invalidates it).

Attached is a work in progress patch that I think is a reasonable solution. I need to add checkConsistency() calls to more suspect places, check how it affects test execution time, and maybe add more specialized checks besides the &quot;memory is allocated&quot; one. All kinds of comments are welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184471</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-01-25 19:19:48 -0800</bug_when>
    <thetext>+        static void checkValue(const P* p)

Might want to name this &quot;checkValueConsistency&quot; for, well, consistency :).

+            ASSERT(malloc_size(p) &gt;= sizeof(P));

Would this have caught the bug that inspired you to write the patch. I don&apos;t think it would. As long as the block is recycled for an object of similar size (which is malloc&apos;s custom), this ASSERT won&apos;t fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184476</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-25 20:10:07 -0800</bug_when>
    <thetext>&gt;Might want to name this &quot;checkValueConsistency&quot; for, well, consistency :).

Indeed!

&gt; Would this have caught the bug that inspired you to write the patch. I don&apos;t
&gt; think it would.

The assert does fire on thedorchester.com. For each run when an AtomicStringImpl gets allocated at the same address, there are many runs when something else (or nothing at all) does.

I&apos;m actually considering making this even weaker: ASSERT(malloc_size(p)). Saves the need to include AtomicStringImpl.h where we didn&apos;t need to include it before. That also catches the bug at thedorchester.com.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184850</commentid>
    <comment_count>3</comment_count>
      <attachid>47471</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-26 17:18:15 -0800</bug_when>
    <thetext>Created attachment 47471
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184853</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-26 17:22:26 -0800</bug_when>
    <thetext>An example of how a custom check can be done:

// AtomicStringImpl itself never goes into HashTable; this just adds a check for AtomicStringImpl* keys.
template&lt;&gt; struct HashTraits&lt;WebCore::AtomicStringImpl&gt; {
    static void checkValueConsistency(const WebCore::AtomicStringImpl* impl)
    {
        ASSERT(impl-&gt;existingHash() == WebCore::AtomicStringImpl::computeHash(impl-&gt;characters(), impl-&gt;length()));
    }
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184940</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-26 21:58:02 -0800</bug_when>
    <thetext>Committed revision 53899.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184993</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-27 01:08:37 -0800</bug_when>
    <thetext>Reverted in r53912. SVG animation tests crash in release mode (and the same tests crash in debug mode in Safari, weird). Need to fix SMIL before I can land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184995</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-27 01:09:48 -0800</bug_when>
    <thetext>Thank you for all the follow-up and attempted fixerage.  hopefully the bots will go back go green now. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185207</commentid>
    <comment_count>8</comment_count>
      <attachid>47562</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-27 13:43:06 -0800</bug_when>
    <thetext>Created attachment 47562
updated patch

Reverted changes in ContainerNodeAlgorithms, clear m_elementsById in Document::removedLastRef() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185208</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-27 13:48:31 -0800</bug_when>
    <thetext>Attachment 47562 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/css/CSSStyleSelector.cpp:364:  More than one command on the same line  [whitespace/newline] [4]
WebCore/css/CSSStyleSelector.cpp:365:  More than one command on the same line  [whitespace/newline] [4]
WebCore/css/CSSStyleSelector.cpp:366:  More than one command on the same line  [whitespace/newline] [4]
WebCore/html/HTMLSelectElement.h:79:  More than one command on the same line  [whitespace/newline] [4]
WebCore/html/CollectionCache.h:65:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 5


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185250</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-27 15:42:18 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/53957&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47379</attachid>
            <date>2010-01-25 17:54:38 -0800</date>
            <delta_ts>2010-01-26 17:18:15 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>StalePointerAssert.txt</filename>
            <type>text/plain</type>
            <size>10615</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvd3RmL0hhc2hNYXAuaAkocmV2aXNpb24gNTM4MTEpCisrKyBKYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25z
dCBUJiwgdW5zaWduZWQgaGFzaENvZGUpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFQm
LCBjb25zdCBNYXBwZWRUeXBlJik7CiAKKyAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7
CisKICAgICBwcml2YXRlOgogICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBpbmxpbmVBZGQo
Y29uc3QgS2V5VHlwZSYsIGNvbnN0IE1hcHBlZFR5cGUmKTsKIApAQCAtMjgxLDcgKzI4Myw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwu
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faW1wbC5jaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgbV9pbXBsLmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCk7CiAgICAgICAgIG1faW1wbC5yZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0
Lm1faW1wbCk7CiAgICAgfQogCkBAIC0zMTEsNiArMzEzLDEzIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CisgICAgaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6Y2hlY2tDb25zaXN0ZW5jeSgpCisgICAgeworICAgICAgICBtX2ltcGwuY2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCk7CisgICAgfQorCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+JiBiKQogICAgIHsKICAgICAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6
ZSgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvSGFzaFNldC5oCShyZXZpc2lvbiA1MzgxMSkKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7CisgICAgICAgIG1faW1wbC5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OwogICAgICAgICBtX2ltcGwucmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdC5t
X2ltcGwpOwogICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gNTM4
MTEpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBXVEYgewogCiAjZGVmaW5lIERVTVBfSEFTSFRBQkxF
X1NUQVRTIDAKKy8vIEVuYWJsZXMgaW50ZXJuYWwgV1RGIGNvbnNpc3RlbmN5IGNoZWNrcyB0aGF0
IGFyZSBpbnZva2VkIGF1dG9tYXRpY2FsbHkuIE5vbi1XVEYgY2FsbGVycyBjYW4gY2FsbCBjaGVj
a1RhYmxlQ29uc2lzdGVuY3koKSBldmVuIGlmIGludGVybmFsIGNoZWNrcyBhcmUgZGlzYWJsZWQu
CiAjZGVmaW5lIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWSAwCiAKICNpZmRlZiBOREVCVUcK
QEAgLTM0MCwxMSArMzQxLDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBWYWx1ZVR5cGUq
IGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPEtleSwgSWRlbnRpdHlUcmFu
c2xhdG9yVHlwZT4oa2V5KTsgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvcj4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYpOwogCi0jaWYgQ0hF
Q0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICB2
b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgc3RhdGlj
IHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CiAjZW5kaWYKKyNpZiBDSEVDS19IQVNI
VEFCTEVfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7IH0KKyAgICAgICAgdm9pZCBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdCB7IGNoZWNrVGFi
bGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsgfQorI2Vsc2UKKyAgICAgICAgc3RhdGljIHZvaWQg
aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisgICAgICAgIHN0
YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisjZW5kaWYKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUoaW50
IHNpemUpOwpAQCAtMzgzLDEwICszOTEsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0
ZXJhdG9yIG1ha2VLbm93bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRl
cmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUsIEhhc2hJdGVtS25vd25Hb29k
KTsgfQogICAgICAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihW
YWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBt
X3RhYmxlICsgbV90YWJsZVNpemUsIEhhc2hJdGVtS25vd25Hb29kKTsgfQogCi0jaWYgQ0hFQ0tf
SEFTSFRBQkxFX0NPTlNJU1RFTkNZCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICB2b2lk
IGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdDsKICNlbHNlCi0gICAgICAg
IHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICAg
ICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0IHsg
fQogI2VuZGlmCiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCkBAIC02MjQsNyArNjMy
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAg
IGV4cGFuZCgpOwogCi0gICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogCiAgICAgICAgIEFTU0VSVChtX3RhYmxl
KTsKIApAQCAtNjkzLDcgKzcwMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgcmV0
dXJuIHA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRy
eSksIHRydWUpOwogICAgIH0KQEAgLTcwOSw3ICs3MTcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CiAKLSAgICAgICAgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CiAKICAgICAgICAgRnVsbExvb2t1cFR5cGUgbG9va3VwUmVzdWx0ID0gZnVsbExvb2t1
cEZvcldyaXRpbmc8VCwgSGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKQEAgLTczOCw3ICs3NDYsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICB9CiAKLSAg
ICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIGludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CiAKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1ha2VLbm93
bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOwogICAgIH0KQEAgLTgwNSw3ICs4MTMsNyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShW
YWx1ZVR5cGUqIHBvcykKICAgICB7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSAg
ICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIGludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIApAQCAtODIzLDcg
KzgzMSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCiAg
ICAgICAgICAgICBzaHJpbmsoKTsKIAotICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgpAQCAtODkyLDcgKzkwMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAg
dm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OnJlaGFzaChpbnQgbmV3VGFibGVTaXplKQogICAgIHsKLSAgICAgICAg
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworICAgICAgICBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAogICAgICAgICBpbnQgb2xkVGFibGVTaXpl
ID0gbV90YWJsZVNpemU7CiAgICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwpA
QCAtOTE0LDcgKzkyMiw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgICAgIGRlYWxsb2NhdGVU
YWJsZShvbGRUYWJsZSwgb2xkVGFibGVTaXplKTsKIAotICAgICAgICBjaGVja1RhYmxlQ29uc2lz
dGVuY3koKTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgpAQCAtOTgxLDcgKzk4OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZ
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QKQEAgLTEwMTIsNiArMTAyMCw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpKTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bv
c2l0aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7CisKKyAgICAgICAgICAgIEtleVRyYWl0czo6
Y2hlY2tWYWx1ZShpdC0+Zmlyc3QpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGNvdW50
ID09IG1fa2V5Q291bnQpOwpAQCAtMTAyMSw3ICsxMDMxLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIEFTU0VSVChtX3RhYmxlU2l6ZSA9PSBtX3RhYmxlU2l6ZU1hc2sgKyAxKTsKICAgICB9
CiAKLSNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kKKyNlbmRpZiAvLyBBU1NF
UlRfRElTQUJMRUQKIAogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIApJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lvbiA1MzgxMSkKKysrIEphdmFTY3JpcHRDb3JlL3d0
Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEwIEBACiAjaW5jbHVk
ZSA8dXRpbGl0eT4KICNpbmNsdWRlIDxsaW1pdHM+CiAKKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVk
ZSA8bWFsbG9jL21hbGxvYy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdXNp
bmcgc3RkOjpwYWlyOwpAQCAtNTEsNiArNTUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY0hhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRy
YWl0c0Jhc2U8SXNJbnRlZ2VyPFQ+Ojp2YWx1ZSwgVD4gewogICAgICAgICB0eXBlZGVmIFQgVHJh
aXRUeXBlOwogICAgICAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gVCgpOyB9Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVmFsdWUoY29uc3QgVCYpIHsgfQogICAgIH07CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNoVHJh
aXRzPFQ+IHsgfTsKQEAgLTc5LDYgKzg0LDE5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CiAgICAgICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShQKiYgc2xvdCkgeyBzbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDxQKj4oLTEpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKFAq
IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSByZWludGVycHJldF9jYXN0PFAqPigtMSk7IH0KKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVmFsdWUoY29uc3Qg
UCogcCkKKyAgICAgICAgeworI2lmIChkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0Vf
U1lTVEVNX01BTExPQykgfHwgIWRlZmluZWQoTkRFQlVHKQorI2lmIE9TKERBUldJTikKKyAgICAg
ICAgICAgIEFTU0VSVChtYWxsb2Nfc2l6ZShwKSA+PSBzaXplb2YoUCkpOworI2VsaWYgQ09NUElM
RVIoTVNWQykKKyAgICAgICAgICAgIEFTU0VSVChfbXNpemUocCkgPj0gc2l6ZW9mKFApKTsKKyNl
bmRpZgorI2VuZGlmCisgICAgICAgICAgICBIYXNoVHJhaXRzPFA+OjpjaGVja1ZhbHVlKCpwKTsK
KyAgICAgICAgfQorI2VuZGlmCiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0
cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPiA+IDogR2VuZXJpY0hhc2hUcmFpdHM8UmVmUHRyPFA+
ID4gewpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUmVmUHRySGFzaE1hcC5oCShyZXZpc2lvbiA1MzgxMSkK
KysrIEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHJIYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4NSw3ICsyODUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB7CiAgICAgICAgIGlmIChpdC5t
X2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2lt
cGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIG1faW1wbC5pbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICBtX2ltcGwucmVtb3ZlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0Nv
bGxlY3Rpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25D
YWNoZS5jcHAJKHJldmlzaW9uIDUzODExKQorKysgV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25DYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDQgKzg1LDEyIEBAIHZvaWQgQ29sbGVjdGlvbkNh
Y2hlOjpyZXNldCgpCiAgICAgaGFzTmFtZUNhY2hlID0gZmFsc2U7CiB9CiAKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECit2b2lkIENvbGxlY3Rpb25DYWNoZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCit7Cisg
ICAgaWRDYWNoZS5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgbmFtZUNhY2hlLmNoZWNrQ29uc2lz
dGVuY3koKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2h0bWwvQ29sbGVjdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Nv
bGxlY3Rpb25DYWNoZS5oCShyZXZpc2lvbiA1MzgxMSkKKysrIFdlYkNvcmUvaHRtbC9Db2xsZWN0
aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBzdHJ1Y3QgQ29sbGVj
dGlvbkNhY2hlIDogRmFzdEFsbG9jQmFzZSB7CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQg
c3dhcChDb2xsZWN0aW9uQ2FjaGUmKTsKIAorICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwor
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBWZWN0b3I8RWxlbWVudCo+
Kj4gTm9kZUNhY2hlTWFwOwogCiAgICAgdW5zaWduZWQgdmVyc2lvbjsKQEAgLTU5LDYgKzYxLDEw
IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY29weUNhY2hlTWFwKE5vZGVDYWNoZU1hcCYs
IGNvbnN0IE5vZGVDYWNoZU1hcCYpOwogfTsKIAorI2lmIEFTU0VSVF9ESVNBQkxFRAorICAgIGlu
bGluZSB2b2lkIENvbGxlY3Rpb25DYWNoZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIHsgfQorI2VuZGlm
CisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
CShyZXZpc2lvbiA1MzgxMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1OCw3ICszNTgsOCBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjpuYW1l
ZEl0ZW1zKGNvbnN0IEF0CiAKICAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7CiAgICAgdXBkYXRl
TmFtZUNhY2hlKCk7Ci0gICAgCisgICAgbV9pbmZvLT5jaGVja0NvbnNpc3RlbmN5KCk7CisKICAg
ICBWZWN0b3I8RWxlbWVudCo+KiBpZFJlc3VsdHMgPSBtX2luZm8tPmlkQ2FjaGUuZ2V0KG5hbWUu
aW1wbCgpKTsKICAgICBWZWN0b3I8RWxlbWVudCo+KiBuYW1lUmVzdWx0cyA9IG1faW5mby0+bmFt
ZUNhY2hlLmdldChuYW1lLmltcGwoKSk7CiAgICAgCkBAIC0zNzMsNiArMzc0LDcgQEAgdm9pZCBI
VE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtcyhjb25zdCBBdAogTm9kZSogSFRNTENvbGxlY3Rpb246
Om5leHROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIHJl
c2V0Q29sbGVjdGlvbkluZm8oKTsKKyAgICBtX2luZm8tPmNoZWNrQ29uc2lzdGVuY3koKTsKIAog
ICAgIGZvciAoRWxlbWVudCogZSA9IGl0ZW1BZnRlcihtX2luZm8tPmN1cnJlbnQpOyBlOyBlID0g
aXRlbUFmdGVyKGUpKSB7CiAgICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChlLCBtX2lkc0Rv
bmUsIG5hbWUpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47471</attachid>
            <date>2010-01-26 17:18:15 -0800</date>
            <delta_ts>2010-01-27 13:43:06 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>CheckConsistency.txt</filename>
            <type>text/plain</type>
            <size>37512</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzODcyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMDEtMjYgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MTUwCisgICAgICAgIFdlYktpdCBuZWVkcyBhIG1lY2hhbmlzbSB0byBjYXRjaCBzdGFs
ZSBIYXNoTWFwIGVudHJpZXMKKworICAgICAgICBJdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBjYXRj
aCBzdGFsZSBwb2ludGVycyB0aGF0IGFyZSBIYXNoTWFwIGtleXMgLSBzaW5jZSBhIHBvaW50ZXIn
cyBoYXNoCisgICAgICAgIGlzIGp1c3QgaXRzIHZhbHVlLCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRo
YXQgYW55IG9ic2VydmFibGUgcHJvYmxlbSBpcyByZXByb2R1Y2libGUuCisKKyAgICAgICAgVGhp
cyBleHRlbmRzIGhhc2ggdGFibGUgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGNoZWNrIHRoYXQgcG9p
bnRlcnMgYXJlIHJlZmVyZW5jaW5nIGFsbG9jYXRlZAorICAgICAgICBtZW1vcnkgYmxvY2tzLCBh
bmQgbWFrZXMgaXQgcG9zc2libGUgdG8gaW52b2tlIHRoZSBjaGVja3MgZXhwbGljaXRseSAoaXQg
aXMgbm90IGZlYXNpYmxlCisgICAgICAgIHRvIGVuYWJsZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lT
VEVOQ1kgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGF0IGFmZmVjdHMgcGVyZm9ybWFuY2UgdG9vIG11
Y2gpLgorCisgICAgICAgICogd3RmL0hhc2hNYXAuaDogKFdURjo6OjpjaGVja0NvbnNpc3RlbmN5
KTogQ2FsbCB0aHJvdWdoIHRvIEhhc2hUYWJsZSBpbXBsZW1lbnRhdGlvbi4gV2UgY2FuCisgICAg
ICAgIGFkZCBzaW1pbGFyIGNhbGxzIHRvIEhhc2hTZXQgYW5kIEhhc2hDb3VudGVkU2V0LCBidXQg
SSBoYXZlbid0IHNlZW4gaGFyZCB0byBkZWJ1ZyBwcm9ibGVtcworICAgICAgICB3aXRoIHRob3Nl
IHlldC4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6IChXVEY6Ojo6cmVtb3ZlKTogVGhlIHZl
cnNpb24gb2YgY2hlY2tUYWJsZUNvbnNpc3RlbmN5IHRoYXQncyBndWFyZGVkIGJ5CisgICAgICAg
IENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWSBpcyBub3cgY2FsbGVkIGludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCkuCisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAg
ICAoV1RGOjpIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0
U2l6ZSk6CisgICAgICAgIEV4cG9zZSBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSBldmVuIGlmIENI
RUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWSBpcyBvZmYuCisgICAgICAgIChXVEY6Ojo6YWRkKTog
VXBkYXRlZCBmb3IgY2hlY2tUYWJsZUNvbnNpc3RlbmN5IHJlbmFtaW5nLgorICAgICAgICAoV1RG
Ojo6OmFkZFBhc3NpbmdIYXNoQ29kZSk6IERpdHRvLgorICAgICAgICAoV1RGOjo6OnJlbW92ZUFu
ZEludmFsaWRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOiBEaXR0by4KKyAg
ICAgICAgKFdURjo6OjpyZWhhc2gpOiBEaXR0by4KKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxl
Q29uc2lzdGVuY3kpOiBUaGUgYXNzZXJ0aW9uIGZvciAhc2hvdWxkRXhwYW5kKCkgd2FzIG5vdCBj
b3JyZWN0IC0gdGhpcworICAgICAgICBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHRhYmxlcyB3
aXRoIG1fdGFibGUgPT0gMC4KKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lF
eGNlcHRTaXplKTogQ2FsbCBjaGVja1ZhbHVlQ29uc2lzdGVuY3kgZm9yIGtleS4gUG90ZW50aWFs
bHksCisgICAgICAgIHdlIGNvdWxkIGRvIHRoZSBzYW1lIGZvciB2YWx1ZXMuCisKKyAgICAgICAg
KiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGOjpHZW5lcmljSGFzaFRyYWl0czo6Y2hl
Y2tWYWx1ZUNvbnNpc3RlbmN5KTogQW4gZW1wdHkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgb3ZlcnJp
ZGRlbgorICAgICAgICB0byBhZGQgY2hlY2tzLiBDdXJyZW50bHksIHRoZSBvbmx5IG92ZXJyaWRl
IGlzIGZvciBwb2ludGVyIGhhc2hlcy4KKworICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFwLmg6
IChXVEY6Ojo6cmVtb3ZlKTogVXBkYXRlZCBmb3IgY2hlY2tUYWJsZUNvbnNpc3RlbmN5IHJlbmFt
aW5nLgorCiAyMDEwLTAxLTI2ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFw
LmgJKHJldmlzaW9uIDUzODExKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAv
LyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVUeXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hD
b2RlKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3I+IHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBUJiwgY29uc3QgTWFwcGVkVHlwZSYp
OwogCisgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKGNvbnN0IEtleVR5cGUm
LCBjb25zdCBNYXBwZWRUeXBlJik7CiAKQEAgLTI4MSw3ICsyODMsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cisg
ICAgICAgIG1faW1wbC5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICBt
X2ltcGwucmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOwogICAg
IH0KIApAQCAtMzExLDYgKzMxMywxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgorICAgIGlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNr
Q29uc2lzdGVuY3koKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworICAgIH0KKworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPiYgYikKICAgICB7CiAgICAgICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gNTM4MTEpCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgewogICAgICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OworICAgICAgICBtX2ltcGwuaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAg
ICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXQubV9pbXBsKTsK
ICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDUzODExKQorKysg
SmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUUyAw
CisvLyBFbmFibGVzIGludGVybmFsIFdURiBjb25zaXN0ZW5jeSBjaGVja3MgdGhhdCBhcmUgaW52
b2tlZCBhdXRvbWF0aWNhbGx5LiBOb24tV1RGIGNhbGxlcnMgY2FuIGNhbGwgY2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCkgZXZlbiBpZiBpbnRlcm5hbCBjaGVja3MgYXJlIGRpc2FibGVkLgogI2RlZmlu
ZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMAogCiAjaWZkZWYgTkRFQlVHCkBAIC0zNDAs
MTEgKzM0MSwxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBsb29rdXAo
Y29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxLZXksIElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KGtleSk7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3I+IFZhbHVlVHlwZSogbG9va3VwKGNvbnN0IFQmKTsKIAotI2lmIENIRUNLX0hBU0hU
QUJMRV9DT05TSVNURU5DWQorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgdm9pZCBjaGVj
a1RhYmxlQ29uc2lzdGVuY3koKSBjb25zdDsKICNlbHNlCiAgICAgICAgIHN0YXRpYyB2b2lkIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQogI2VuZGlmCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0NP
TlNJU1RFTkNZCisgICAgICAgIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKSBj
b25zdCB7IGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOyB9CisgICAgICAgIHZvaWQgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lz
dGVuY3lFeGNlcHRTaXplKCk7IH0KKyNlbHNlCisgICAgICAgIHN0YXRpYyB2b2lkIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorICAgICAgICBzdGF0aWMgdm9p
ZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorI2VuZGlmCiAKICAgICBwcml2
YXRlOgogICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKGludCBzaXplKTsK
QEAgLTM4MywxMCArMzkxLDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBt
YWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRo
aXMsIHBvcywgbV90YWJsZSArIG1fdGFibGVTaXplLCBIYXNoSXRlbUtub3duR29vZCk7IH0KICAg
ICAgICAgY29uc3RfaXRlcmF0b3IgbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoVmFsdWVUeXBl
KiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSAr
IG1fdGFibGVTaXplLCBIYXNoSXRlbUtub3duR29vZCk7IH0KIAotI2lmIENIRUNLX0hBU0hUQUJM
RV9DT05TSVNURU5DWQorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgdm9pZCBjaGVja1Rh
YmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CiAjZWxzZQotICAgICAgICBzdGF0aWMg
dm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisgICAgICAgIHN0YXRp
YyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdCB7IH0KICNlbmRp
ZgogCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwpAQCAtNjI0LDcgKzYzMiw3IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQo
KTsKIAotICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICAgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIAogICAgICAgICBBU1NFUlQobV90YWJsZSk7CiAKQEAg
LTY5Myw3ICs3MDEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBwOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVl
KTsKICAgICB9CkBAIC03MDksNyArNzE3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlm
ICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZCgpOwogCi0gICAgICAgIGNoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwog
CiAgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1bGxMb29rdXBGb3JXcml0
aW5nPFQsIEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCkBAIC03MzgsNyArNzQ2LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgfQogCi0gICAgICAgIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOwogCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCB0cnVlKTsKICAgICB9CkBAIC04MDUsNyArODEzLDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBl
KiBwb3MpCiAgICAgewogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOwogICAgICAgICByZW1vdmUocG9zKTsKICAgICB9CiAKQEAgLTgyMyw3ICs4MzEsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQogICAgICAgICAg
ICAgc2hyaW5rKCk7CiAKLSAgICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KQEAg
LTg5Miw3ICs5MDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSkKICAgICB7Ci0gICAgICAgIGNoZWNrVGFi
bGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKCk7CiAKICAgICAgICAgaW50IG9sZFRhYmxlU2l6ZSA9IG1fdGFi
bGVTaXplOwogICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKQEAgLTkxNCw3
ICs5MjIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBkZWFsbG9jYXRlVGFibGUob2xk
VGFibGUsIG9sZFRhYmxlU2l6ZSk7CiAKLSAgICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CisgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KQEAgLTk4MSwxMyArOTg5LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgfQogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrVGFibGVDb25zaXN0
ZW5jeUV4Y2VwdFNpemUoKTsKLSAgICAgICAgQVNTRVJUKCFzaG91bGRFeHBhbmQoKSk7CisgICAg
ICAgIEFTU0VSVCghbV90YWJsZSB8fCAhc2hvdWxkRXhwYW5kKCkpOwogICAgICAgICBBU1NFUlQo
IXNob3VsZFNocmluaygpKTsKICAgICB9CiAKQEAgLTEwMTIsNiArMTAyMCw4IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKEV4dHJhY3Rvcjo6
ZXh0cmFjdCgqZW50cnkpKTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0
aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7CisKKyAgICAgICAgICAgIEtleVRyYWl0czo6Y2hl
Y2tWYWx1ZUNvbnNpc3RlbmN5KGl0LT5maXJzdCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NF
UlQoY291bnQgPT0gbV9rZXlDb3VudCk7CkBAIC0xMDIxLDcgKzEwMzEsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgQVNTRVJUKG1fdGFibGVTaXplID09IG1fdGFibGVTaXplTWFzayArIDEp
OwogICAgIH0KIAotI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQorI2VuZGlm
IC8vIEFTU0VSVF9ESVNBQkxFRAogCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9uIDUzODExKQorKysgSmF2YVNjcmlw
dENvcmUvd3RmL0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAK
ICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPGxpbWl0cz4KIAorI2lmIE9TKERBUldJTikK
KyNpbmNsdWRlIDxtYWxsb2MvbWFsbG9jLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAK
ICAgICB1c2luZyBzdGQ6OnBhaXI7CkBAIC01MSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFzaFRyYWl0cyA6IEdlbmVy
aWNIYXNoVHJhaXRzQmFzZTxJc0ludGVnZXI8VD46OnZhbHVlLCBUPiB7CiAgICAgICAgIHR5cGVk
ZWYgVCBUcmFpdFR5cGU7CiAgICAgICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiBU
KCk7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tWYWx1ZUNvbnNpc3RlbmN5KGNvbnN0IFQm
KSB7IH0KICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFp
dHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7IH07CkBAIC03OSw2ICs4NCwxOSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZh
bHNlOwogICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoUComIHNsb3Qp
IHsgc2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UCo+KC0xKTsgfQogICAgICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShQKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gcmVpbnRlcnByZXRf
Y2FzdDxQKj4oLTEpOyB9CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBzdGF0aWMgdm9p
ZCBjaGVja1ZhbHVlQ29uc2lzdGVuY3koY29uc3QgUCogcCkKKyAgICAgICAgeworI2lmIChkZWZp
bmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQykgfHwgIWRlZmluZWQo
TkRFQlVHKQorI2lmIE9TKERBUldJTikKKyAgICAgICAgICAgIEFTU0VSVChtYWxsb2Nfc2l6ZShw
KSk7CisjZWxpZiBDT01QSUxFUihNU1ZDKQorICAgICAgICAgICAgQVNTRVJUKF9tc2l6ZShwKSk7
CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgICAgSGFzaFRyYWl0czxQPjo6Y2hlY2tWYWx1ZUNv
bnNpc3RlbmN5KCpwKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPiA+IDogR2VuZXJpY0hhc2hU
cmFpdHM8UmVmUHRyPFA+ID4gewpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUmVmUHRySGFzaE1hcC5oCShy
ZXZpc2lvbiA1MzgxMSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHJIYXNoTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4NSw3ICsyODUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB7CiAg
ICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIG1faW1w
bC5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICBtX2ltcGwucmVtb3Zl
V2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOwogICAgIH0KIApJbmRleDog
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDUzODcyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw4MCBAQAorMjAxMC0wMS0yNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNTAKKyAgICAgICAgV2ViS2l0IG5l
ZWRzIGEgbWVjaGFuaXNtIHRvIGNhdGNoIHN0YWxlIEhhc2hNYXAgZW50cmllcworCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBDb250YWluZXJOb2Rl
QWxnb3JpdGhtcy5oIHRvIHRoZSBwcm9qZWN0IHRvIG1ha2UKKyAgICAgICAgaXQgZWFzaWVyIHRv
IHNlYXJjaCBmb3IuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NSdWxlU2V0OjpnZXRJRFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1J1bGVTZXQ6OmdldENsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZVNl
dDo6Z2V0VGFnUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6a2V5
ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0
b25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrZWRSYWRpb0J1dHRvbnM6OmNoZWNrZWRC
dXR0b25Gb3JHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpy
ZW1vdmVCdXR0b24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnJlbW92ZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1v
dmVJbWFnZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0SW1hZ2VNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5hbWVDb2xsZWN0aW9uSW5mbyk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29sbGVjdGlv
bkluZm8pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNob3VsZEFkZE5hbWVzcGFjZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kTmFtZXNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFN0YXJ0TWFya3VwKToKKyAgICAgICAgKiBo
dG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9u
OjpuYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpuZXh0TmFt
ZWRJdGVtKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OmZvcm1Db2xsZWN0aW9uSW5mbyk6CisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OmNvbGxlY3Rpb25JbmZvKToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6
bm9uQ2FjaGVSZXF1ZXN0SW5GbGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpub25D
YWNoZVJlcXVlc3RDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmNhbmNlbFJl
cXVlc3RzKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmlt
YXRpbmdQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnBh
dXNlQW5pbWF0aW9uQXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgQWRkZWQgY2hlY2tDb25zaXN0
ZW5jeSBjaGVja3MgYmVmb3JlIGxvb2t1cHMgaW4gSGFzaE1hcHMgd2l0aCBBdG9taWNTdHJpbmdJ
bXBsKiBrZXlzLgorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmg6IChX
ZWJDb3JlOjpyZW1vdmVBbGxDaGlsZHJlbkluQ29udGFpbmVyKTogQmUgc3VyZSB0byBub3RpZnkK
KyAgICAgICAgYWJvdXQgcmVtb3ZlZCBjaGlsZCBub2RlcyB0aGF0IGNhbiBiZSBkZWxldGVkIGlt
bWVkaWF0ZWx5LgorCisgICAgICAgICogaHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sbGVjdGlvbkNhY2hlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAg
KiBodG1sL0NvbGxlY3Rpb25DYWNoZS5oOgorICAgICAgICBBZGRlZCBhIGNoZWNrQ29uc2lzdGVu
Y3koKSBtZXRob2QgdGhhdCBjaGVja3MgYm90aCBIYXNoTWFwcyBpbiB0aGUgY2FjaGUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9UcmVlU2hhcmVkLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2hh
cmVkOjp+VHJlZVNoYXJlZCk6IEFzc2VydCB0aGF0IG1fcmVmQ291bnQgaXMgbnVsbC4gU2luY2Ug
Tm9kZXMgY2FuIGJlCisgICAgICAgIGRlc3Ryb3llZCB3aXRoIG9wZXJhdG9yIGRlbGV0ZSAoYXMg
ZG9uZSBpbiBDb250YWluZXJOb2RlQWxnb3JpdGhtcyksIHRoaXMgaXMgaW1wb3J0YW50IHRvIGNo
ZWNrLgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNoYXJlZDo6ZGVyZWYpOiBBc3NlcnQgdGhhdCBt
X3JlZkNvdW50IGlzbid0IGFscmVhZHkgbmVnYXRpdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNoYXJhY3Rl
cnMpOiBNYWRlIHRoaXMgbWV0aG9kIGNvbnN0IChiZWNhdXNlIEkgbmVlZGVkIHRoYXQgd2hlbgor
ICAgICAgICBleHBlcmltZW50aW5nIHdpdGggYSBjdXN0b20gY2hlY2tWYWx1ZUNvbnNpc3RlbmN5
IGZvciBBdG9taWNTdHJpbmdJbXBsLCBhbmQgYmVjYXVzZSBpdCdzIGEKKyAgICAgICAgZ29vZCB0
aGluZykuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpsZW5ndGgpOiBEaXR0by4KKwog
MjAxMC0wMS0yNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MzgxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjY4LDYgKzQ2NjgsNyBA
QAogCQlFMEZFRjM3MkI1N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUI1
N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgKi87IH07CiAJCUUwRkVG
MzcyQjY3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUwRkVGMzcxQjY3QzUzRUFD
MUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJRTBGRUYzNzJC
NzdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUI3N0M1M0VBQzFD
MUZCRUUgLyogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJRTEwM0FGQjEx
MTBGQTg5OTAwRUI3NjVFIC8qIENvbnRhaW5lck5vZGVBbGdvcml0aG1zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAzQUZCMDExMEZBODk5MDBFQjc2
NUUgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCAqLzsgfTsKIAkJRTEwNzQwMEQwRTc3QkRD
MDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwNzQwMEIwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVz
c2FnZUNoYW5uZWwuY3BwICovOyB9OwogCQlFMTA3NDAwRTBFNzdCREMwMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTEwNzQwMEMwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCAqLzsg
fTsKIAkJRTEwNzQzMjQwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTA3NDMyMzBFNzgzNTgzMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNw
cCAqLzsgfTsKQEAgLTk5MzEsNiArOTkzMiw3IEBACiAJCUUwRkVGMzcxQjU3QzUzRUFDMUMxRkJF
RSAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMEZFRjM3MUI2N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUNvbnN0cnVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDb25z
dHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMEZFRjM3MUI3N0M1M0VB
QzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMDNBRkIwMTEwRkE4OTkwMEVCNzY1RSAvKiBDb250
YWluZXJOb2RlQWxnb3JpdGhtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250YWluZXJOb2RlQWxnb3JpdGhtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTA3NDAwQjBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNzQwMEMwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVz
c2FnZUNoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZXNzYWdl
Q2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTA3NDMyMzBFNzgzNTgz
MDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTgwMCw2ICsxNTgwMiw3IEBACiAJCQkJ
NzlGMkY1QTAxMDkxOTM5QTAwMEQ4N0NCIC8qIENvbXBvc2l0aW9uRXZlbnQuaWRsICovLAogCQkJ
CUE4MTg3MjE0MDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLywKIAkJCQlB
ODE4NzIxMTA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5oICovLAorCQkJCUUxMDNB
RkIwMTEwRkE4OTkwMEVCNzY1RSAvKiBDb250YWluZXJOb2RlQWxnb3JpdGhtcy5oICovLAogCQkJ
CUE4QzRBN0Y4MDlENTYzMjcwMDAzQUM4RCAvKiBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlv
bi5jcHAgKi8sCiAJCQkJQThDNEE3RjcwOUQ1NjMyNzAwMDNBQzhEIC8qIENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJQTgxODVGMzQwOTc2NTc2NTAwNTgyNkQ5IC8qIERv
Y3VtZW50LmNwcCAqLywKQEAgLTE4NDc1LDYgKzE4NDc4LDcgQEAKIAkJCQk1OUI1OTc3NTExMDg2
NTc5MDA3MTU5RTggLyogQnJpZGdlSlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0M0RjZFQjEx
MDhGOUE1MDA5OUQwREIgLyogQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDgyRkNBQzQxMTA5MjdDRTAwQ0M0ODIxIC8qIEpTU1ZHQ29udGV4dENhY2hlLmggaW4g
SGVhZGVycyAqLywKKwkJCQlFMTAzQUZCMTExMEZBODk5MDBFQjc2NUUgLyogQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAJKHJldmlzaW9uIDUzODExKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2MSw5ICszNjEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRU
b1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAogICAgICAg
ICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CiAg
ICAgCi0gICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRJRFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSkgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9Ci0gICAgQ1NTUnVsZURhdGFMaXN0KiBn
ZXRDbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV9jbGFzc1J1bGVz
LmdldChrZXkpOyB9Ci0gICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRUYWdSdWxlcyhBdG9taWNTdHJp
bmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBDU1NSdWxl
RGF0YUxpc3QqIGdldElEUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IG1faWRSdWxlcy5j
aGVja0NvbnNpc3RlbmN5KCk7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBDU1NS
dWxlRGF0YUxpc3QqIGdldENsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IG1fY2xh
c3NSdWxlcy5jaGVja0NvbnNpc3RlbmN5KCk7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7
IH0KKyAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSkgeyBtX3RhZ1J1bGVzLmNoZWNrQ29uc2lzdGVuY3koKTsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0
KGtleSk7IH0KICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVzKCkgeyByZXR1
cm4gbV91bml2ZXJzYWxSdWxlczsgfQogICAgIAogcHVibGljOgpAQCAtMTI5OCw3ICsxMjk4LDkg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvcgogICAgIC8vIEdldCB0
aGUga2V5ZnJhbWVzUnVsZSBmb3IgdGhpcyBuYW1lCiAgICAgaWYgKCFlIHx8IGxpc3QuYW5pbWF0
aW9uTmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCisKKyAg
ICBtX2tleWZyYW1lc1J1bGVNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgCiAgICAgaWYgKCFt
X2tleWZyYW1lc1J1bGVNYXAuY29udGFpbnMobGlzdC5hbmltYXRpb25OYW1lKCkuaW1wbCgpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRp
b0J1dHRvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCShyZXZpc2lvbiA1MzgxMSkKKysrIFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw4IEBAIEhUTUxJbnB1dEVsZW1lbnQq
IENoZWNrZWRSYWRpb0J1dHRvbnM6OmMKIHsKICAgICBpZiAoIW1fbmFtZVRvQ2hlY2tlZFJhZGlv
QnV0dG9uTWFwKQogICAgICAgICByZXR1cm4gMDsKKworICAgIG1fbmFtZVRvQ2hlY2tlZFJhZGlv
QnV0dG9uTWFwLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgCiAgICAgcmV0dXJuIG1fbmFtZVRv
Q2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5nZXQobmFtZS5pbXBsKCkpOwogfQpAQCAtNjksNiArNzEs
OCBAQCB2b2lkIENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihICiAgICAgaWYgKGVs
ZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkgfHwgIW1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFw
KQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25N
YXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIE5hbWVUb0lucHV0TWFwOjppdGVyYXRvciBp
dCA9IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5maW5kKGVsZW1lbnQtPm5hbWUoKS5p
bXBsKCkpOwogICAgIGlmIChpdCA9PSBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+ZW5k
KCkgfHwgaXQtPnNlY29uZCAhPSBlbGVtZW50KQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJKHJldmlzaW9uIDUzODExKQorKysgV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsMTIgQEAgbmFtZXNwYWNlIFByaXZhdGUgewogICAgIHRlbXBsYXRlPGNsYXNzIEdlbmVyaWNO
b2RlLCBjbGFzcyBHZW5lcmljTm9kZUNvbnRhaW5lcj4KICAgICB2b2lkIGFkZENoaWxkTm9kZXNU
b0RlbGV0aW9uUXVldWUoR2VuZXJpY05vZGUqJiBoZWFkLCBHZW5lcmljTm9kZSomIHRhaWwsIEdl
bmVyaWNOb2RlQ29udGFpbmVyKiBjb250YWluZXIpOwogCisgICAgdGVtcGxhdGU8Y2xhc3MgR2Vu
ZXJpY05vZGUsIGJvb2wgZGlzcGF0Y2hSZW1vdmFsTm90aWZpY2F0aW9uPgorICAgIHN0cnVjdCBO
b2RlUmVtb3ZhbERpc3BhdGNoZXI7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBHZW5lcmljTm9kZT4K
KyAgICBzdHJ1Y3QgU2hvdWxkRGlzcGF0Y2hSZW1vdmFsTm90aWZpY2F0aW9uOworCiB9OwogCiAv
LyBIZWxwZXIgZnVuY3Rpb25zIGZvciBUcmVlU2hhcmVkLWRlcml2ZWQgY2xhc3Nlcywgd2hpY2gg
aGF2ZSBhICdOb2RlJyBzdHlsZSBpbnRlcmZhY2UKQEAgLTYxLDYgKzY3LDcgQEAgdm9pZCByZW1v
dmVBbGxDaGlsZHJlbkluQ29udGFpbmVyKEdlbmVyaQogICAgICAgICBpZiAobi0+aGFzQ2hpbGRO
b2RlcygpKQogICAgICAgICAgICAgUHJpdmF0ZTo6YWRkQ2hpbGROb2Rlc1RvRGVsZXRpb25RdWV1
ZTxHZW5lcmljTm9kZSwgR2VuZXJpY05vZGVDb250YWluZXI+KGhlYWQsIHRhaWwsIHN0YXRpY19j
YXN0PEdlbmVyaWNOb2RlQ29udGFpbmVyKj4obikpOwogCisgICAgICAgIFByaXZhdGU6Ok5vZGVS
ZW1vdmFsRGlzcGF0Y2hlcjxHZW5lcmljTm9kZSwgUHJpdmF0ZTo6U2hvdWxkRGlzcGF0Y2hSZW1v
dmFsTm90aWZpY2F0aW9uPEdlbmVyaWNOb2RlPjo6dmFsdWU+OjpkaXNwYXRjaChuKTsKICAgICAg
ICAgZGVsZXRlIG47CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNTM4MTEpCisr
KyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw2ICs4Nzgs
OCBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgCiAgICAgaWYgKGVs
ZW1lbnRJZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgbV9lbGVtZW50c0J5
SWQuY2hlY2tDb25zaXN0ZW5jeSgpOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVu
dHNCeUlkLmdldChlbGVtZW50SWQuaW1wbCgpKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7CkBAIC0xMDY5LDYgKzEwNzEsOCBAQCB2b2lkIERvY3VtZW50OjphZGRF
bGVtZW50QnlJZChjb25zdCBBdG9tCiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlk
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQogeworICAg
IG1fZWxlbWVudHNCeUlkLmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIGlmIChtX2VsZW1lbnRz
QnlJZC5nZXQoZWxlbWVudElkLmltcGwoKSkgPT0gZWxlbWVudCkKICAgICAgICAgbV9lbGVtZW50
c0J5SWQucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCkpOwogICAgIGVsc2UKQEAgLTMzMzIsNiArMzMz
Niw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGUKICAgICBpZiAo
IW5hbWUuaW1wbCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2ltYWdlTWFwc0J5TmFtZS5j
aGVja0NvbnNpc3RlbmN5KCk7CisKICAgICBJbWFnZU1hcHNCeU5hbWU6Oml0ZXJhdG9yIGl0ID0g
bV9pbWFnZU1hcHNCeU5hbWUuZmluZChuYW1lLmltcGwoKSk7CiAgICAgaWYgKGl0ICE9IG1faW1h
Z2VNYXBzQnlOYW1lLmVuZCgpICYmIGl0LT5zZWNvbmQgPT0gaW1hZ2VNYXApCiAgICAgICAgIG1f
aW1hZ2VNYXBzQnlOYW1lLnJlbW92ZShpdCk7CkBAIC0zMzQ0LDYgKzMzNTAsNyBAQCBIVE1MTWFw
RWxlbWVudCAqRG9jdW1lbnQ6OmdldEltYWdlTWFwKGNvCiAgICAgaW50IGhhc2hQb3MgPSB1cmwu
ZmluZCgnIycpOwogICAgIFN0cmluZyBuYW1lID0gKGhhc2hQb3MgPCAwID8gdXJsIDogdXJsLnN1
YnN0cmluZyhoYXNoUG9zICsgMSkpLmltcGwoKTsKICAgICBBdG9taWNTdHJpbmcgbWFwTmFtZSA9
IGlzSFRNTERvY3VtZW50KCkgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOworICAgIG1faW1hZ2VNYXBz
QnlOYW1lLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUu
Z2V0KG1hcE5hbWUuaW1wbCgpKTsKIH0KIApAQCAtNDE0OSw2ICs0MTU2LDcgQEAgQ29sbGVjdGlv
bkNhY2hlKiBEb2N1bWVudDo6bmFtZUNvbGxlY3RpbwogICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6
aXRlcmF0b3IgaXRlciA9IG1hcC5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoaXRlciA9PSBt
YXAuZW5kKCkpCiAgICAgICAgIGl0ZXIgPSBtYXAuYWRkKG5hbWUuaW1wbCgpLCBuZXcgQ29sbGVj
dGlvbkNhY2hlKS5maXJzdDsKKyAgICBpdGVyLT5zZWNvbmQtPmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICByZXR1cm4gaXRlci0+c2Vjb25kOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDUzODEx
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHR5cGUgPj0gRmlyc3RVbm5hbWVkRG9jdW1l
bnRDYWNoZWRUeXBlKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSB0eXBlIC0gRmlyc3RVbm5h
bWVkRG9jdW1lbnRDYWNoZWRUeXBlOwogICAgICAgICBBU1NFUlQoaW5kZXggPCBOdW1Vbm5hbWVk
RG9jdW1lbnRDYWNoZWRUeXBlcyk7CisgICAgICAgIG1fY29sbGVjdGlvbkluZm9baW5kZXhdLmNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmV0dXJuICZtX2NvbGxlY3Rpb25JbmZvW2luZGV4
XTsgCiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNTM4MTEpCisrKyBXZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDYgKzMxNSw4IEBA
IHN0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW0oY29uc3QKIAogc3RhdGljIGJvb2wg
c2hvdWxkQWRkTmFtZXNwYWNlQXR0cihjb25zdCBBdHRyaWJ1dGUqIGF0dHIsIEhhc2hNYXA8QXRv
bWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKIHsKKyAgICBu
YW1lc3BhY2VzLmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIC8vIERvbid0IGFkZCBuYW1lc3Bh
Y2UgYXR0cmlidXRlcyB0d2ljZQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gWE1MTlNOYW1lczo6
eG1sbnNBdHRyKSB7CiAgICAgICAgIG5hbWVzcGFjZXMuc2V0KGVtcHR5QXRvbS5pbXBsKCksIGF0
dHItPnZhbHVlKCkuaW1wbCgpKTsKQEAgLTMzMiw2ICszMzQsNyBAQCBzdGF0aWMgYm9vbCBzaG91
bGRBZGROYW1lc3BhY2VBdHRyKGNvbnN0CiAKIHN0YXRpYyB2b2lkIGFwcGVuZE5hbWVzcGFjZShW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIG5zLCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJ
bXBsKj4mIG5hbWVzcGFjZXMpCiB7CisgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgaWYgKG5zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTM5
Miw2ICszOTUsOSBAQCBlbnVtIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSB7IERvZXNGdWxseVNlCiAK
IHN0YXRpYyB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29u
c3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIEhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDAsIFJh
bmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxl
Y3ROb2RlKQogeworICAgIGlmIChuYW1lc3BhY2VzKQorICAgICAgICBuYW1lc3BhY2VzLT5jaGVj
a0NvbnNpc3RlbmN5KCk7CisKICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gbm9kZS0+ZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsK
ICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6IHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9Db2xs
ZWN0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2Fj
aGUuY3BwCShyZXZpc2lvbiA1MzgxMSkKKysrIFdlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw0ICs4NSwxMiBAQCB2b2lkIENvbGxlY3Rpb25DYWNo
ZTo6cmVzZXQoKQogICAgIGhhc05hbWVDYWNoZSA9IGZhbHNlOwogfQogCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAordm9pZCBDb2xsZWN0aW9uQ2FjaGU6OmNoZWNrQ29uc2lzdGVuY3koKQoreworICAg
IGlkQ2FjaGUuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIG5hbWVDYWNoZS5jaGVja0NvbnNpc3Rl
bmN5KCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9odG1sL0NvbGxlY3Rpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Db2xs
ZWN0aW9uQ2FjaGUuaAkocmV2aXNpb24gNTM4MTEpCisrKyBXZWJDb3JlL2h0bWwvQ29sbGVjdGlv
bkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgc3RydWN0IENvbGxlY3Rp
b25DYWNoZSA6IEZhc3RBbGxvY0Jhc2UgewogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIHN3
YXAoQ29sbGVjdGlvbkNhY2hlJik7CiAKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKKwog
ICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9yPEVsZW1lbnQqPio+
IE5vZGVDYWNoZU1hcDsKIAogICAgIHVuc2lnbmVkIHZlcnNpb247CkBAIC01OSw2ICs2MSwxMCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNvcHlDYWNoZU1hcChOb2RlQ2FjaGVNYXAmLCBj
b25zdCBOb2RlQ2FjaGVNYXAmKTsKIH07CiAKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICBpbmxp
bmUgdm9pZCBDb2xsZWN0aW9uQ2FjaGU6OmNoZWNrQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAko
cmV2aXNpb24gNTM4MTEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDggQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJ
dGVtcyhjb25zdCBBdAogCiAgICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwogICAgIHVwZGF0ZU5h
bWVDYWNoZSgpOwotICAgIAorICAgIG1faW5mby0+Y2hlY2tDb25zaXN0ZW5jeSgpOworCiAgICAg
VmVjdG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gbV9pbmZvLT5pZENhY2hlLmdldChuYW1lLmlt
cGwoKSk7CiAgICAgVmVjdG9yPEVsZW1lbnQqPiogbmFtZVJlc3VsdHMgPSBtX2luZm8tPm5hbWVD
YWNoZS5nZXQobmFtZS5pbXBsKCkpOwogICAgIApAQCAtMzczLDYgKzM3NCw3IEBAIHZvaWQgSFRN
TENvbGxlY3Rpb246Om5hbWVkSXRlbXMoY29uc3QgQXQKIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpu
ZXh0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXNl
dENvbGxlY3Rpb25JbmZvKCk7CisgICAgbV9pbmZvLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKICAg
ICBmb3IgKEVsZW1lbnQqIGUgPSBpdGVtQWZ0ZXIobV9pbmZvLT5jdXJyZW50KTsgZTsgZSA9IGl0
ZW1BZnRlcihlKSkgewogICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2goZSwgbV9pZHNEb25l
LCBuYW1lKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDUzODExKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDcgQEAgaW5saW5lIENvbGxlY3Rpb25DYWNoZSogSFRNTEZvcm1D
b2xsZWN0aQogewogICAgIGlmICghZm9ybS0+Y29sbGVjdGlvbkluZm8pCiAgICAgICAgIGZvcm0t
PmNvbGxlY3Rpb25JbmZvID0gbmV3IENvbGxlY3Rpb25DYWNoZTsKKyAgICBmb3JtLT5jb2xsZWN0
aW9uSW5mby0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiBmb3JtLT5jb2xsZWN0aW9u
SW5mbzsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDUzODEx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIE5vZGUqIG5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpOwogICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCi0gICAgQ29s
bGVjdGlvbkNhY2hlKiBjb2xsZWN0aW9uSW5mbygpIHsgcmV0dXJuICZtX2NvbGxlY3Rpb25JbmZv
OyB9CisgICAgQ29sbGVjdGlvbkNhY2hlKiBjb2xsZWN0aW9uSW5mbygpIHsgbV9jb2xsZWN0aW9u
SW5mby5jaGVja0NvbnNpc3RlbmN5KCk7IHJldHVybiAmbV9jb2xsZWN0aW9uSW5mbzsgfQogCiAg
ICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9u
IDUzODExKQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI1LDYgKzEyNSw3IEBAIHZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZG9jTG9hZGVyLCAK
ICAgICBSZWZQdHI8SG9zdD4gaG9zdDsKICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIHJl
c291cmNlLT51cmwoKSk7CiAgICAgaWYgKHVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7Cisg
ICAgICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBdG9taWNTdHJpbmcg
aG9zdE5hbWUgPSB1cmwuaG9zdCgpOwogICAgICAgICBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5h
bWUuaW1wbCgpKTsKICAgICAgICAgaWYgKCFob3N0KSB7CkBAIC0xNjksNiArMTcwLDcgQEAgdm9p
ZCBMb2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFByaW9yaQogICAgIG1fbm9uSFRUUFByb3Rv
Y29sSG9zdC0+c2VydmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KTsKIAogICAgIFZl
Y3RvcjxIb3N0Kj4gaG9zdHNUb1NlcnZlOworICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX2hvc3RzLmJlZ2luKCk7CiAgICAgSG9zdE1h
cDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKICAgICBmb3IgKDtpICE9IGVuZDsgKytp
KQpAQCAtMjA1LDYgKzIwNyw3IEBAIHZvaWQgTG9hZGVyOjpub25DYWNoZVJlcXVlc3RJbkZsaWdo
dChjb24KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEF0b21pY1N0cmluZyBob3N0TmFtZSA9
IHVybC5ob3N0KCk7CisgICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgUmVmUHRy
PEhvc3Q+IGhvc3QgPSBtX2hvc3RzLmdldChob3N0TmFtZS5pbXBsKCkpOwogICAgIGlmICghaG9z
dCkgewogICAgICAgICBob3N0ID0gSG9zdDo6Y3JlYXRlKGhvc3ROYW1lLCBtYXhSZXF1ZXN0c0lu
RmxpZ2h0UGVySG9zdCk7CkBAIC0yMjAsNiArMjIzLDcgQEAgdm9pZCBMb2FkZXI6Om5vbkNhY2hl
UmVxdWVzdENvbXBsZXRlKGNvbgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQXRvbWljU3Ry
aW5nIGhvc3ROYW1lID0gdXJsLmhvc3QoKTsKKyAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICBSZWZQdHI8SG9zdD4gaG9zdCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lLmltcGwoKSk7
CiAgICAgQVNTRVJUKGhvc3QpOwogICAgIGlmICghaG9zdCkKQEAgLTIzNiw2ICsyNDAsNyBAQCB2
b2lkIExvYWRlcjo6Y2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVyKiBkCiAgICAgICAgIG1fbm9uSFRU
UFByb3RvY29sSG9zdC0+Y2FuY2VsUmVxdWVzdHMoZG9jTG9hZGVyKTsKICAgICAKICAgICBWZWN0
b3I8SG9zdCo+IGhvc3RzVG9DYW5jZWw7CisgICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgSG9zdE1hcDo6aXRlcmF0b3IgaSA9IG1faG9zdHMuYmVnaW4oKTsKICAgICBIb3N0TWFw
OjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOwogICAgIGZvciAoO2kgIT0gZW5kOyArK2kp
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
CShyZXZpc2lvbiA1MzgxMSkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFt
X2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZUFuaW1h
dGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAg
ICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CkBAIC0x
ODYsNiArMTg3LDggQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQog
ICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5o
YXNBbmltYXRpb25zKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgCiAgICAgaWYg
KGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRT
dHlsZS0+aGFzQW5pbWF0aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09
ICoodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKQEAgLTI2Miw2ICsyNjUsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpCiAgICAgLy8gV2UgZG9uJ3QgZG8g
YW55IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0
dXApLgogICAgIHVwZGF0ZVRyYW5zaXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdl
dFN0eWxlKTsKICAgICB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMocmVuZGVyZXIsIGN1cnJlbnRT
dHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lz
dGVuY3koKTsKIAogICAgIGlmIChjdXJyZW50U3R5bGUpIHsKICAgICAgICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSB0cmFuc2l0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhl
IG5ldyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCkBAIC0yOTUsNiArMjk5LDggQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aQogICAgICAgICAgICAgaW1wbGljaXRB
bmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwogICAgIH0KIAorICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIGZvciAoVmVjdG9y
PEF0b21pY1N0cmluZ0ltcGwqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0
aW9uT3JkZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVB
bmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQoKml0KTsKICAgICAgICAgaWYgKGtl
eWZyYW1lQW5pbWF0aW9uKQpAQCAtMzE1LDYgKzMyMSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjpzZXRBbmltYXRpbmcoYm8KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fa2V5ZnJh
bWVBbmltYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
aGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAg
Zm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgICAg
IEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKQEAgLTM0MSw2ICsz
NDgsNyBAQCBkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VyCiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7CiAgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9u
ID0gaXQtPnNlY29uZC5nZXQoKTsKQEAgLTM2Miw2ICszNzAsNyBAQCBQYXNzUmVmUHRyPEtleWZy
YW1lQW5pbWF0aW9uPiBDb21wb3NpdGVBCiAgICAgLy8gV2Ugd2FudCB0byBzZW5kIGJhY2sgdGhl
IGxhc3QgYW5pbWF0aW9uIHdpdGggdGhlIHByb3BlcnR5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZXMu
CiAgICAgLy8gU28gd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGFuaW1hdGlvbnMKICAg
ICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBtX2tleWZy
YW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5l
bmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQp
IHsKICAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT5zZWNv
bmQ7CkBAIC0zODEsNiArMzkwLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRB
bmltYXRpbwogICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwogCiAgICAgaWYgKCFtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAgICAgICAgICAgICBp
ZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQpAQCAtNDA1LDYg
KzQxNSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb24KICAgICBt
X2lzU3VzcGVuZGVkID0gZmFsc2U7CiAKICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlz
RW1wdHkoKSkgeworICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNF
bmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25O
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKQEAgLTQ1MCw2ICs0NjEsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlCiBib29sIENvbXBvc2l0ZUFuaW1hdGlv
bjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93KSBj
b25zdAogewogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewogICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kLmdldCgpOwpAQCAtNDc0LDYgKzQ4Niw4IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9u
OjpwYXVzZUFuaW1hdGlvbkEKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuZ2V0KG5hbWUuaW1wbCgpKTsKICAgICBpZiAoIWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVB
bmltLT5ydW5uaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUwOSw2ICs1MjMsNyBA
QCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0CiAgICAgdW5zaWduZWQg
Y291bnQgPSAwOwogICAgIAogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewogICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgJKHJldmlzaW9u
IDUzODExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflRyZWVTaGFyZWQoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKCFtX3Jl
ZkNvdW50KTsKICAgICAgICAgQVNTRVJUKG1fZGVsZXRpb25IYXNCZWd1bik7CiAgICAgfQogCkBA
IC01OCw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChtX3JlZkNvdW50ID49IDAp
OwogICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1bik7CiAgICAgICAgIEFTU0VSVCgh
bV9pblJlbW92ZWRMYXN0UmVmRnVuY3Rpb24pOwogICAgICAgICBpZiAoLS1tX3JlZkNvdW50IDw9
IDAgJiYgIW1fcGFyZW50KSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHJl
dmlzaW9uIDUzODExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFNoYXJl
ZFVDaGFyKiBzaGFyZWRCdWZmZXIoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIHsg
cmV0dXJuIG1fZGF0YTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCiAg
ICAgYm9vbCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZEJ1ZmZlckFuZEZsYWdzLmlzRmxhZ1NldChIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIp
OyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47562</attachid>
            <date>2010-01-27 13:43:06 -0800</date>
            <delta_ts>2010-01-27 15:24:29 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>CheckConsistency.txt</filename>
            <type>text/plain</type>
            <size>32092</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzOTQ1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMDEtMjcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MTUwCisgICAgICAgIFdlYktpdCBuZWVkcyBhIG1lY2hhbmlzbSB0byBjYXRjaCBzdGFs
ZSBIYXNoTWFwIGVudHJpZXMKKworICAgICAgICBJdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBjYXRj
aCBzdGFsZSBwb2ludGVycyB0aGF0IGFyZSBIYXNoTWFwIGtleXMgLSBzaW5jZSBhIHBvaW50ZXIn
cyBoYXNoCisgICAgICAgIGlzIGp1c3QgaXRzIHZhbHVlLCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRo
YXQgYW55IG9ic2VydmFibGUgcHJvYmxlbSBpcyByZXByb2R1Y2libGUuCisKKyAgICAgICAgVGhp
cyBleHRlbmRzIGhhc2ggdGFibGUgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGNoZWNrIHRoYXQgcG9p
bnRlcnMgYXJlIHJlZmVyZW5jaW5nIGFsbG9jYXRlZAorICAgICAgICBtZW1vcnkgYmxvY2tzLCBh
bmQgbWFrZXMgaXQgcG9zc2libGUgdG8gaW52b2tlIHRoZSBjaGVja3MgZXhwbGljaXRseSAoaXQg
aXMgbm90IGZlYXNpYmxlCisgICAgICAgIHRvIGVuYWJsZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lT
VEVOQ1kgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGF0IGFmZmVjdHMgcGVyZm9ybWFuY2UgdG9vIG11
Y2gpLgorCisgICAgICAgICogd3RmL0hhc2hNYXAuaDogKFdURjo6OjpjaGVja0NvbnNpc3RlbmN5
KTogQ2FsbCB0aHJvdWdoIHRvIEhhc2hUYWJsZSBpbXBsZW1lbnRhdGlvbi4gV2UgY2FuCisgICAg
ICAgIGFkZCBzaW1pbGFyIGNhbGxzIHRvIEhhc2hTZXQgYW5kIEhhc2hDb3VudGVkU2V0LCBidXQg
SSBoYXZlbid0IHNlZW4gaGFyZCB0byBkZWJ1ZyBwcm9ibGVtcworICAgICAgICB3aXRoIHRob3Nl
IHlldC4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6IChXVEY6Ojo6cmVtb3ZlKTogVGhlIHZl
cnNpb24gb2YgY2hlY2tUYWJsZUNvbnNpc3RlbmN5IHRoYXQncyBndWFyZGVkIGJ5CisgICAgICAg
IENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWSBpcyBub3cgY2FsbGVkIGludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCkuCisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAg
ICAoV1RGOjpIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0
U2l6ZSk6CisgICAgICAgIEV4cG9zZSBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSBldmVuIGlmIENI
RUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWSBpcyBvZmYuCisgICAgICAgIChXVEY6Ojo6YWRkKTog
VXBkYXRlZCBmb3IgY2hlY2tUYWJsZUNvbnNpc3RlbmN5IHJlbmFtaW5nLgorICAgICAgICAoV1RG
Ojo6OmFkZFBhc3NpbmdIYXNoQ29kZSk6IERpdHRvLgorICAgICAgICAoV1RGOjo6OnJlbW92ZUFu
ZEludmFsaWRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOiBEaXR0by4KKyAg
ICAgICAgKFdURjo6OjpyZWhhc2gpOiBEaXR0by4KKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxl
Q29uc2lzdGVuY3kpOiBUaGUgYXNzZXJ0aW9uIGZvciAhc2hvdWxkRXhwYW5kKCkgd2FzIG5vdCBj
b3JyZWN0IC0gdGhpcworICAgICAgICBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIHRhYmxlcyB3
aXRoIG1fdGFibGUgPT0gMC4KKyAgICAgICAgKFdURjo6OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lF
eGNlcHRTaXplKTogQ2FsbCBjaGVja1ZhbHVlQ29uc2lzdGVuY3kgZm9yIGtleS4gUG90ZW50aWFs
bHksCisgICAgICAgIHdlIGNvdWxkIGRvIHRoZSBzYW1lIGZvciB2YWx1ZXMuCisKKyAgICAgICAg
KiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGOjpHZW5lcmljSGFzaFRyYWl0czo6Y2hl
Y2tWYWx1ZUNvbnNpc3RlbmN5KTogQW4gZW1wdHkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgb3ZlcnJp
ZGRlbgorICAgICAgICB0byBhZGQgY2hlY2tzLiBDdXJyZW50bHksIHRoZSBvbmx5IG92ZXJyaWRl
IGlzIGZvciBwb2ludGVyIGhhc2hlcy4KKworICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFwLmg6
IChXVEY6Ojo6cmVtb3ZlKTogVXBkYXRlZCBmb3IgY2hlY2tUYWJsZUNvbnNpc3RlbmN5IHJlbmFt
aW5nLgorCiAyMDEwLTAxLTI3ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFw
LmgJKHJldmlzaW9uIDUzOTQ1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAv
LyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVUeXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hD
b2RlKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3I+IHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBUJiwgY29uc3QgTWFwcGVkVHlwZSYp
OwogCisgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKGNvbnN0IEtleVR5cGUm
LCBjb25zdCBNYXBwZWRUeXBlJik7CiAKQEAgLTI4MSw3ICsyODMsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cisg
ICAgICAgIG1faW1wbC5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICBt
X2ltcGwucmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOwogICAg
IH0KIApAQCAtMzExLDYgKzMxMywxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgorICAgIGlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNr
Q29uc2lzdGVuY3koKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworICAgIH0KKworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPiYgYikKICAgICB7CiAgICAgICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gNTM5NDUpCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgewogICAgICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OworICAgICAgICBtX2ltcGwuaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAg
ICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXQubV9pbXBsKTsK
ICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDUzOTQ1KQorKysg
SmF2YVNjcmlwdENvcmUvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUUyAw
CisvLyBFbmFibGVzIGludGVybmFsIFdURiBjb25zaXN0ZW5jeSBjaGVja3MgdGhhdCBhcmUgaW52
b2tlZCBhdXRvbWF0aWNhbGx5LiBOb24tV1RGIGNhbGxlcnMgY2FuIGNhbGwgY2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCkgZXZlbiBpZiBpbnRlcm5hbCBjaGVja3MgYXJlIGRpc2FibGVkLgogI2RlZmlu
ZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMAogCiAjaWZkZWYgTkRFQlVHCkBAIC0zNDAs
MTEgKzM0MSwxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBsb29rdXAo
Y29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxLZXksIElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KGtleSk7IH0KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3I+IFZhbHVlVHlwZSogbG9va3VwKGNvbnN0IFQmKTsKIAotI2lmIENIRUNLX0hBU0hU
QUJMRV9DT05TSVNURU5DWQorI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgdm9pZCBjaGVj
a1RhYmxlQ29uc2lzdGVuY3koKSBjb25zdDsKICNlbHNlCiAgICAgICAgIHN0YXRpYyB2b2lkIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQogI2VuZGlmCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0NP
TlNJU1RFTkNZCisgICAgICAgIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKSBj
b25zdCB7IGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOyB9CisgICAgICAgIHZvaWQgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lz
dGVuY3lFeGNlcHRTaXplKCk7IH0KKyNlbHNlCisgICAgICAgIHN0YXRpYyB2b2lkIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorICAgICAgICBzdGF0aWMgdm9p
ZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorI2VuZGlmCiAKICAgICBwcml2
YXRlOgogICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKGludCBzaXplKTsK
QEAgLTM4Myw3ICszOTEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgbWFr
ZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlz
LCBwb3MsIG1fdGFibGUgKyBtX3RhYmxlU2l6ZSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CiAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyBt
X3RhYmxlU2l6ZSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CiAKLSNpZiBDSEVDS19IQVNIVEFCTEVf
Q09OU0lTVEVOQ1kKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIHZvaWQgY2hlY2tUYWJs
ZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0OwogI2Vsc2UKICAgICAgICAgc3RhdGljIHZv
aWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQpAQCAtNjI0LDcgKzYzMiw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBl
eHBhbmQoKTsKIAotICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICAgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIAogICAgICAgICBBU1NFUlQobV90YWJsZSk7
CiAKQEAgLTY5Myw3ICs3MDEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVy
biBwOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkp
LCB0cnVlKTsKICAgICB9CkBAIC03MDksNyArNzE3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZCgpOwogCi0gICAgICAgIGNoZWNr
VGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOwogCiAgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1bGxMb29rdXBG
b3JXcml0aW5nPFQsIEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCkBAIC03MzgsNyArNzQ2LDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgfQogCi0gICAg
ICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOwogCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKICAgICB9CkBAIC04MDUsNyArODEzLDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFs
dWVUeXBlKiBwb3MpCiAgICAgewogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAg
ICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOwogICAgICAgICByZW1vdmUocG9zKTsKICAgICB9CiAKQEAgLTgyMyw3ICs4
MzEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQogICAg
ICAgICAgICAgc2hyaW5rKCk7CiAKLSAgICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cisg
ICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KQEAgLTg5Miw3ICs5MDAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZv
aWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSkKICAgICB7Ci0gICAgICAgIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7CiAKICAgICAgICAgaW50IG9sZFRhYmxlU2l6ZSA9
IG1fdGFibGVTaXplOwogICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKQEAg
LTkxNCw3ICs5MjIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBkZWFsbG9jYXRlVGFi
bGUob2xkVGFibGUsIG9sZFRhYmxlU2l6ZSk7CiAKLSAgICAgICAgY2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CisgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KQEAgLTk4MSwxMyArOTg5LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZ
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKLSAgICAgICAgQVNTRVJUKCFzaG91bGRFeHBhbmQoKSk7
CisgICAgICAgIEFTU0VSVCghbV90YWJsZSB8fCAhc2hvdWxkRXhwYW5kKCkpOwogICAgICAgICBB
U1NFUlQoIXNob3VsZFNocmluaygpKTsKICAgICB9CiAKQEAgLTEwMTIsNiArMTAyMCw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKEV4dHJh
Y3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5t
X3Bvc2l0aW9uKTsKICAgICAgICAgICAgICsrY291bnQ7CisKKyAgICAgICAgICAgIEtleVRyYWl0
czo6Y2hlY2tWYWx1ZUNvbnNpc3RlbmN5KGl0LT5maXJzdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBBU1NFUlQoY291bnQgPT0gbV9rZXlDb3VudCk7CkBAIC0xMDIxLDcgKzEwMzEsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgQVNTRVJUKG1fdGFibGVTaXplID09IG1fdGFibGVTaXplTWFz
ayArIDEpOwogICAgIH0KIAotI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQor
I2VuZGlmIC8vIEFTU0VSVF9ESVNBQkxFRAogCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9S
UwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9uIDUzOTQ1KQorKysgSmF2
YVNjcmlwdENvcmUvd3RmL0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
MTMgQEAKICNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPGxpbWl0cz4KIAorLy8gRm9yIG1h
bGxvY19zaXplIGFuZCBfbXNpemUuCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hbGxvYy9t
YWxsb2MuaD4KKyNlbGlmIENPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdURiB7CiAKICAgICB1c2luZyBzdGQ6OnBhaXI7CkBAIC01MSw2ICs1
OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBH
ZW5lcmljSGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNoVHJhaXRzQmFzZTxJc0ludGVnZXI8VD46OnZh
bHVlLCBUPiB7CiAgICAgICAgIHR5cGVkZWYgVCBUcmFpdFR5cGU7CiAgICAgICAgIHN0YXRpYyBU
IGVtcHR5VmFsdWUoKSB7IHJldHVybiBUKCk7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tW
YWx1ZUNvbnNpc3RlbmN5KGNvbnN0IFQmKSB7IH0KICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7IH07CkBA
IC03OSw2ICs4NywxOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1
Y3REZWxldGVkVmFsdWUoUComIHNsb3QpIHsgc2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UCo+KC0x
KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShQKiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUgPT0gcmVpbnRlcnByZXRfY2FzdDxQKj4oLTEpOyB9CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1ZhbHVlQ29uc2lzdGVuY3koY29uc3QgUCog
cCkKKyAgICAgICAgeworI2lmIChkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lT
VEVNX01BTExPQykgfHwgIWRlZmluZWQoTkRFQlVHKQorI2lmIE9TKERBUldJTikKKyAgICAgICAg
ICAgIEFTU0VSVChtYWxsb2Nfc2l6ZShwKSk7CisjZWxpZiBDT01QSUxFUihNU1ZDKQorICAgICAg
ICAgICAgQVNTRVJUKF9tc2l6ZShjb25zdF9jYXN0PFAqPihwKSkpOworI2VuZGlmCisjZW5kaWYK
KyAgICAgICAgICAgIEhhc2hUcmFpdHM8UD46OmNoZWNrVmFsdWVDb25zaXN0ZW5jeSgqcCk7Cisg
ICAgICAgIH0KKyNlbmRpZgogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1
Y3QgSGFzaFRyYWl0czxSZWZQdHI8UD4gPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFJlZlB0cjxQPiA+
IHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHJIYXNoTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaAkocmV2aXNpb24gNTM5NDUpCisr
KyBKYXZhU2NyaXB0Q29yZS93dGYvUmVmUHRySGFzaE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNyArMjg1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgewogICAgICAgICBpZiAoaXQubV9p
bXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbXBs
LmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgICAgICBtX2ltcGwuaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNp
c3RlbmN5Q2hlY2soaXQubV9pbXBsKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA1Mzk1MSkKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTAtMDEt
MjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM0MTUwCisgICAgICAgIFdlYktpdCBuZWVkcyBhIG1lY2hhbmlzbSB0
byBjYXRjaCBzdGFsZSBIYXNoTWFwIGVudHJpZXMKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTZXQ6OmdldElEUnVsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZVNldDo6Z2V0Q2xhc3NSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NSdWxlU2V0OjpnZXRUYWdSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6CisgICAgICAgICogZG9t
L0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hlY2tlZFJhZGlv
QnV0dG9uczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNr
ZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbik6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQWRkTmFtZXNwYWNlQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmROYW1lc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kU3Rh
cnRNYXJrdXApOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbGxlY3Rpb246Om5leHROYW1lZEl0ZW0pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1D
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6Zm9y
bUNvbGxlY3Rpb25JbmZvKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6Y29sbGVjdGlvbkluZm8pOgorICAg
ICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGVyOjpub25DYWNoZVJlcXVlc3RJbkZsaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkZXI6Om5vbkNhY2hlUmVxdWVzdENvbXBsZXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRlcjo6Y2FuY2VsUmVxdWVzdHMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OmNsZWFyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1h
dGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRp
b246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1h
dGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb25BdFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOgorICAg
ICAgICBBZGRlZCBjaGVja0NvbnNpc3RlbmN5IGNoZWNrcyBiZWZvcmUgbG9va3VwcyBpbiBIYXNo
TWFwcyB3aXRoIEF0b21pY1N0cmluZ0ltcGwqIGtleXMuCisKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKTogQ2xl
YXIgbV9lbGVtZW50c0J5SWQgbWFwLCBiZWNhdXNlIHJlbW92ZUFsbENoaWxkcmVuKCkKKyAgICAg
ICAgZG9lc24ndCBhbHdheXMgdXBkYXRlIGl0IGNvcnJlY3RseSB3aGVuIGNhbGxlZCBkdXJpbmcg
ZG9jdWVtbnQgZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0RWxl
bWVudEJ5SWQpOiBBZGRlZCBjaGVja0NvbnNpc3RlbmN5KCkuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVtb3ZlRWxlbWVudEJ5SWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZW1vdmVJbWFnZU1hcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmdldEltYWdlTWFwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bmFt
ZUNvbGxlY3Rpb25JbmZvKTogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29sbGVjdGlvbkluZm8pOiBEaXR0by4KKworICAgICAg
ICAqIGh0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbGxlY3Rp
b25DYWNoZTo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgICogaHRtbC9Db2xsZWN0aW9uQ2Fj
aGUuaDoKKyAgICAgICAgQWRkZWQgYSBjaGVja0NvbnNpc3RlbmN5KCkgbWV0aG9kIHRoYXQgY2hl
Y2tzIGJvdGggSGFzaE1hcHMgaW4gdGhlIGNhY2hlLgorCisgICAgICAgICogcGxhdGZvcm0vVHJl
ZVNoYXJlZC5oOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNoYXJlZDo6flRyZWVTaGFyZWQpOiBB
c3NlcnQgdGhhdCBtX3JlZkNvdW50IGlzIG51bGwuIFNpbmNlIE5vZGVzIGNhbiBiZQorICAgICAg
ICBkZXN0cm95ZWQgd2l0aCBvcGVyYXRvciBkZWxldGUgKGFzIGRvbmUgaW4gQ29udGFpbmVyTm9k
ZUFsZ29yaXRobXMpLCB0aGlzIGlzIGltcG9ydGFudCB0byBjaGVjay4KKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTaGFyZWQ6OmRlcmVmKTogQXNzZXJ0IHRoYXQgbV9yZWZDb3VudCBpc24ndCBhbHJl
YWR5IG5lZ2F0aXZlLgorCiAyMDEwLTAxLTI3ICBEYXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgRml4IENocm9taXVtIGJ1aWxkIGJ1c3RhZ2UuCkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNTM5NDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDkgKzM2MSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxl
TWFwJiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NT
ZWxlY3Rvciogc2VsKTsKICAgICAKLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoQXRv
bWljU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldENsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IHJl
dHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRh
Z1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5
KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBr
ZXkpIHsgbV9pZFJ1bGVzLmNoZWNrQ29uc2lzdGVuY3koKTsgcmV0dXJuIG1faWRSdWxlcy5nZXQo
a2V5KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0Q2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJ
bXBsKiBrZXkpIHsgbV9jbGFzc1J1bGVzLmNoZWNrQ29uc2lzdGVuY3koKTsgcmV0dXJuIG1fY2xh
c3NSdWxlcy5nZXQoa2V5KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoQXRv
bWljU3RyaW5nSW1wbCoga2V5KSB7IG1fdGFnUnVsZXMuY2hlY2tDb25zaXN0ZW5jeSgpOyByZXR1
cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQogICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VW5pdmVy
c2FsUnVsZXMoKSB7IHJldHVybiBtX3VuaXZlcnNhbFJ1bGVzOyB9CiAgICAgCiBwdWJsaWM6CkBA
IC0xMzAxLDcgKzEzMDEsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVz
Rm9yCiAgICAgLy8gR2V0IHRoZSBrZXlmcmFtZXNSdWxlIGZvciB0aGlzIG5hbWUKICAgICBpZiAo
IWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAKKworICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5jaGVja0NvbnNpc3RlbmN5KCk7
CisgICAKICAgICBpZiAoIW1fa2V5ZnJhbWVzUnVsZU1hcC5jb250YWlucyhsaXN0LmFuaW1hdGlv
bk5hbWUoKS5pbXBsKCkpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRleDogV2ViQ29y
ZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDggQEAg
SFRNTElucHV0RWxlbWVudCogQ2hlY2tlZFJhZGlvQnV0dG9uczo6YwogewogICAgIGlmICghbV9u
YW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIHJldHVybiAwOworCisgICAgbV9u
YW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAKICAg
ICByZXR1cm4gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmdldChuYW1lLmltcGwoKSk7
CiB9CkBAIC02OSw2ICs3MSw4IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0
dG9uKEgKICAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSB8fCAhbV9uYW1lVG9DaGVj
a2VkUmFkaW9CdXR0b25NYXApCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBtX25hbWVUb0No
ZWNrZWRSYWRpb0J1dHRvbk1hcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworCiAgICAgTmFtZVRvSW5w
dXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25NYXAtPmZpbmQo
ZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1fbmFtZVRvQ2hlY2tlZFJh
ZGlvQnV0dG9uTWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9IGVsZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsNiArNDc1LDkgQEAgdm9pZCBEb2N1bWVu
dDo6cmVtb3ZlZExhc3RSZWYoKQogICAgICAgICBtX3RpdGxlRWxlbWVudCA9IDA7CiAgICAgICAg
IG1fZG9jdW1lbnRFbGVtZW50ID0gMDsKIAorICAgICAgICAvLyByZW1vdmVBbGxDaGlsZHJlbigp
IGRvZXNuJ3QgYWx3YXlzIHVucmVnaXN0ZXIgSURzLCBkbyBpdCB1cGZyb250IHRvIGF2b2lkIGhh
dmluZyBzdGFsZSByZWZlcmVuY2VzIGluIHRoZSBtYXAuCisgICAgICAgIG1fZWxlbWVudHNCeUlk
LmNsZWFyKCk7CisKICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKIAogICAgICAgICBkZWxl
dGVBbGxWYWx1ZXMobV9tYXJrZXJzKTsKQEAgLTg4NCw2ICs4ODcsOCBAQCBFbGVtZW50KiBEb2N1
bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgCiAgICAgaWYgKGVsZW1lbnRJZC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiAwOwogCisgICAgbV9lbGVtZW50c0J5SWQuY2hlY2tDb25zaXN0ZW5j
eSgpOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVudHNCeUlkLmdldChlbGVtZW50
SWQuaW1wbCgpKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CkBA
IC0xMDc1LDYgKzEwODAsOCBAQCB2b2lkIERvY3VtZW50OjphZGRFbGVtZW50QnlJZChjb25zdCBB
dG9tCiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQogeworICAgIG1fZWxlbWVudHNCeUlkLmNo
ZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIGlmIChtX2VsZW1lbnRzQnlJZC5nZXQoZWxlbWVudElk
LmltcGwoKSkgPT0gZWxlbWVudCkKICAgICAgICAgbV9lbGVtZW50c0J5SWQucmVtb3ZlKGVsZW1l
bnRJZC5pbXBsKCkpOwogICAgIGVsc2UKQEAgLTMzNTcsNiArMzM2NCw4IEBAIHZvaWQgRG9jdW1l
bnQ6OnJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGUKICAgICBpZiAoIW5hbWUuaW1wbCgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBtX2ltYWdlTWFwc0J5TmFtZS5jaGVja0NvbnNpc3RlbmN5KCk7
CisKICAgICBJbWFnZU1hcHNCeU5hbWU6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZU1hcHNCeU5hbWUu
ZmluZChuYW1lLmltcGwoKSk7CiAgICAgaWYgKGl0ICE9IG1faW1hZ2VNYXBzQnlOYW1lLmVuZCgp
ICYmIGl0LT5zZWNvbmQgPT0gaW1hZ2VNYXApCiAgICAgICAgIG1faW1hZ2VNYXBzQnlOYW1lLnJl
bW92ZShpdCk7CkBAIC0zMzY5LDYgKzMzNzgsNyBAQCBIVE1MTWFwRWxlbWVudCAqRG9jdW1lbnQ6
OmdldEltYWdlTWFwKGNvCiAgICAgaW50IGhhc2hQb3MgPSB1cmwuZmluZCgnIycpOwogICAgIFN0
cmluZyBuYW1lID0gKGhhc2hQb3MgPCAwID8gdXJsIDogdXJsLnN1YnN0cmluZyhoYXNoUG9zICsg
MSkpLmltcGwoKTsKICAgICBBdG9taWNTdHJpbmcgbWFwTmFtZSA9IGlzSFRNTERvY3VtZW50KCkg
PyBuYW1lLmxvd2VyKCkgOiBuYW1lOworICAgIG1faW1hZ2VNYXBzQnlOYW1lLmNoZWNrQ29uc2lz
dGVuY3koKTsKICAgICByZXR1cm4gbV9pbWFnZU1hcHNCeU5hbWUuZ2V0KG1hcE5hbWUuaW1wbCgp
KTsKIH0KIApAQCAtNDE3NCw2ICs0MTg0LDcgQEAgQ29sbGVjdGlvbkNhY2hlKiBEb2N1bWVudDo6
bmFtZUNvbGxlY3RpbwogICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1h
cC5maW5kKG5hbWUuaW1wbCgpKTsKICAgICBpZiAoaXRlciA9PSBtYXAuZW5kKCkpCiAgICAgICAg
IGl0ZXIgPSBtYXAuYWRkKG5hbWUuaW1wbCgpLCBuZXcgQ29sbGVjdGlvbkNhY2hlKS5maXJzdDsK
KyAgICBpdGVyLT5zZWNvbmQtPmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gaXRlci0+
c2Vjb25kOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKHR5cGUgPj0gRmlyc3RVbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBlKTsKICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSB0eXBlIC0gRmlyc3RVbm5hbWVkRG9jdW1lbnRDYWNoZWRU
eXBlOwogICAgICAgICBBU1NFUlQoaW5kZXggPCBOdW1Vbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBl
cyk7CisgICAgICAgIG1fY29sbGVjdGlvbkluZm9baW5kZXhdLmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICAgICAgcmV0dXJuICZtX2NvbGxlY3Rpb25JbmZvW2luZGV4XTsgCiAgICAgfQogCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAkocmV2aXNpb24gNTM5NDUpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDYgKzMxNSw4IEBAIHN0YXRpYyBib29sIHNob3Vs
ZEFkZE5hbWVzcGFjZUVsZW0oY29uc3QKIAogc3RhdGljIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNl
QXR0cihjb25zdCBBdHRyaWJ1dGUqIGF0dHIsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0
b21pY1N0cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKIHsKKyAgICBuYW1lc3BhY2VzLmNoZWNrQ29u
c2lzdGVuY3koKTsKKwogICAgIC8vIERvbid0IGFkZCBuYW1lc3BhY2UgYXR0cmlidXRlcyB0d2lj
ZQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gWE1MTlNOYW1lczo6eG1sbnNBdHRyKSB7CiAgICAg
ICAgIG5hbWVzcGFjZXMuc2V0KGVtcHR5QXRvbS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgp
KTsKQEAgLTMzMiw2ICszMzQsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRy
KGNvbnN0CiAKIHN0YXRpYyB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1
bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5zLCBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmdJbXBsKj4mIG5hbWVzcGFjZXMp
CiB7CisgICAgbmFtZXNwYWNlcy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgaWYgKG5zLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTM5Miw2ICszOTUsOSBAQCBlbnVt
IFJhbmdlRnVsbHlTZWxlY3RzTm9kZSB7IERvZXNGdWxseVNlCiAKIHN0YXRpYyB2b2lkIGFwcGVu
ZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSwgY29u
c3QgUmFuZ2UqIHJhbmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDAsIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKQogeworICAgIGlm
IChuYW1lc3BhY2VzKQorICAgICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CisK
ICAgICBib29sIGRvY3VtZW50SXNIVE1MID0gbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKTsKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2Rl
OjpURVhUX05PREU6IHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA1
Mzk0NSkKKysrIFdlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw0ICs4NSwxMiBAQCB2b2lkIENvbGxlY3Rpb25DYWNoZTo6cmVzZXQoKQogICAgIGhh
c05hbWVDYWNoZSA9IGZhbHNlOwogfQogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9pZCBDb2xs
ZWN0aW9uQ2FjaGU6OmNoZWNrQ29uc2lzdGVuY3koKQoreworICAgIGlkQ2FjaGUuY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgIG5hbWVDYWNoZS5jaGVja0NvbnNpc3RlbmN5KCk7Cit9CisjZW5kaWYK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25D
YWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2FjaGUuaAkocmV2
aXNpb24gNTM5NDUpCisrKyBXZWJDb3JlL2h0bWwvQ29sbGVjdGlvbkNhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDggQEAgc3RydWN0IENvbGxlY3Rpb25DYWNoZSA6IEZhc3RBbGxv
Y0Jhc2UgewogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIHN3YXAoQ29sbGVjdGlvbkNhY2hl
Jik7CiAKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIHR5cGVkZWYgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9yPEVsZW1lbnQqPio+IE5vZGVDYWNoZU1hcDsKIAog
ICAgIHVuc2lnbmVkIHZlcnNpb247CkBAIC01OSw2ICs2MSwxMCBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGNvcHlDYWNoZU1hcChOb2RlQ2FjaGVNYXAmLCBjb25zdCBOb2RlQ2FjaGVNYXAm
KTsKIH07CiAKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICBpbmxpbmUgdm9pZCBDb2xsZWN0aW9u
Q2FjaGU6OmNoZWNrQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZQog
CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gNTM5NDUpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgs
NyArMzU4LDggQEAgdm9pZCBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtcyhjb25zdCBBdAogCiAg
ICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwogICAgIHVwZGF0ZU5hbWVDYWNoZSgpOwotICAgIAor
ICAgIG1faW5mby0+Y2hlY2tDb25zaXN0ZW5jeSgpOworCiAgICAgVmVjdG9yPEVsZW1lbnQqPiog
aWRSZXN1bHRzID0gbV9pbmZvLT5pZENhY2hlLmdldChuYW1lLmltcGwoKSk7CiAgICAgVmVjdG9y
PEVsZW1lbnQqPiogbmFtZVJlc3VsdHMgPSBtX2luZm8tPm5hbWVDYWNoZS5nZXQobmFtZS5pbXBs
KCkpOwogICAgIApAQCAtMzczLDYgKzM3NCw3IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246Om5hbWVk
SXRlbXMoY29uc3QgQXQKIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuZXh0TmFtZWRJdGVtKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7
CisgICAgbV9pbmZvLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBmb3IgKEVsZW1lbnQqIGUg
PSBpdGVtQWZ0ZXIobV9pbmZvLT5jdXJyZW50KTsgZTsgZSA9IGl0ZW1BZnRlcihlKSkgewogICAg
ICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2goZSwgbV9pZHNEb25lLCBuYW1lKSkgewpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAgaW5saW5lIENvbGxlY3Rpb25DYWNoZSogSFRNTEZvcm1Db2xsZWN0aQogewogICAgIGlm
ICghZm9ybS0+Y29sbGVjdGlvbkluZm8pCiAgICAgICAgIGZvcm0tPmNvbGxlY3Rpb25JbmZvID0g
bmV3IENvbGxlY3Rpb25DYWNoZTsKKyAgICBmb3JtLT5jb2xsZWN0aW9uSW5mby0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgIHJldHVybiBmb3JtLT5jb2xsZWN0aW9uSW5mbzsKIH0KIApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29yZS9odG1s
L0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVi
bGljOgogICAgIE5vZGUqIG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogICAg
IE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCi0gICAgQ29sbGVjdGlvbkNhY2hlKiBjb2xs
ZWN0aW9uSW5mbygpIHsgcmV0dXJuICZtX2NvbGxlY3Rpb25JbmZvOyB9CisgICAgQ29sbGVjdGlv
bkNhY2hlKiBjb2xsZWN0aW9uSW5mbygpIHsgbV9jb2xsZWN0aW9uSW5mby5jaGVja0NvbnNpc3Rl
bmN5KCk7IHJldHVybiAmbV9jb2xsZWN0aW9uSW5mbzsgfQogCiAgICAgdm9pZCBzY3JvbGxUb1Nl
bGVjdGlvbigpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29y
ZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw3IEBAIHZv
aWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZG9jTG9hZGVyLCAKICAgICBSZWZQdHI8SG9zdD4g
aG9zdDsKICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSk7CiAg
ICAgaWYgKHVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7CisgICAgICAgIG1faG9zdHMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBdG9taWNTdHJpbmcgaG9zdE5hbWUgPSB1cmwuaG9z
dCgpOwogICAgICAgICBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUuaW1wbCgpKTsKICAgICAg
ICAgaWYgKCFob3N0KSB7CkBAIC0xNjksNiArMTcwLDcgQEAgdm9pZCBMb2FkZXI6OnNlcnZlUGVu
ZGluZ1JlcXVlc3RzKFByaW9yaQogICAgIG1fbm9uSFRUUFByb3RvY29sSG9zdC0+c2VydmVQZW5k
aW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KTsKIAogICAgIFZlY3RvcjxIb3N0Kj4gaG9zdHNU
b1NlcnZlOworICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIEhvc3RNYXA6Oml0
ZXJhdG9yIGkgPSBtX2hvc3RzLmJlZ2luKCk7CiAgICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9ob3N0cy5lbmQoKTsKICAgICBmb3IgKDtpICE9IGVuZDsgKytpKQpAQCAtMjA1LDYgKzIwNyw3
IEBAIHZvaWQgTG9hZGVyOjpub25DYWNoZVJlcXVlc3RJbkZsaWdodChjb24KICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIEF0b21pY1N0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCk7CisgICAg
bV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgUmVmUHRyPEhvc3Q+IGhvc3QgPSBtX2hv
c3RzLmdldChob3N0TmFtZS5pbXBsKCkpOwogICAgIGlmICghaG9zdCkgewogICAgICAgICBob3N0
ID0gSG9zdDo6Y3JlYXRlKGhvc3ROYW1lLCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCk7CkBA
IC0yMjAsNiArMjIzLDcgQEAgdm9pZCBMb2FkZXI6Om5vbkNhY2hlUmVxdWVzdENvbXBsZXRlKGNv
bgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQXRvbWljU3RyaW5nIGhvc3ROYW1lID0gdXJs
Lmhvc3QoKTsKKyAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBSZWZQdHI8SG9z
dD4gaG9zdCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lLmltcGwoKSk7CiAgICAgQVNTRVJUKGhvc3Qp
OwogICAgIGlmICghaG9zdCkKQEAgLTIzNiw2ICsyNDAsNyBAQCB2b2lkIExvYWRlcjo6Y2FuY2Vs
UmVxdWVzdHMoRG9jTG9hZGVyKiBkCiAgICAgICAgIG1fbm9uSFRUUFByb3RvY29sSG9zdC0+Y2Fu
Y2VsUmVxdWVzdHMoZG9jTG9hZGVyKTsKICAgICAKICAgICBWZWN0b3I8SG9zdCo+IGhvc3RzVG9D
YW5jZWw7CisgICAgbV9ob3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgSG9zdE1hcDo6aXRl
cmF0b3IgaSA9IG1faG9zdHMuYmVnaW4oKTsKICAgICBIb3N0TWFwOjppdGVyYXRvciBlbmQgPSBt
X2hvc3RzLmVuZCgpOwogICAgIGZvciAoO2kgIT0gZW5kOyArK2kpCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCShyZXZpc2lvbiA1Mzk0NSkK
KysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJS
ZW5kZXJlcigpCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9u
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRp
b25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdp
bigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAgICAgICAgICAgICBLZXlmcmFtZUFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CkBAIC0xODYsNiArMTg3LDggQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgIGlmIChtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5oYXNBbmltYXRpb25zKCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKwogICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgCiAgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBj
dXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9u
cygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoodGFyZ2V0U3R5bGUtPmFu
aW1hdGlvbnMoKSkpIHsKQEAgLTI2Miw2ICsyNjUsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBDb21wb3NpdGVBbmltYXRpCiAgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlm
IHdlIGRvbid0IGhhdmUgYSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgogICAgIHVwZGF0ZVRy
YW5zaXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKICAgICB1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUp
OworICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIGlm
IChjdXJyZW50U3R5bGUpIHsKICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0cmFuc2l0aW9u
IG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAg
V2Ugd2FudCB0aGVtCkBAIC0yOTUsNiArMjk5LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q29tcG9zaXRlQW5pbWF0aQogICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPmdldEFuaW1h
dGVkU3R5bGUocmVzdWx0U3R5bGUpOwogICAgIH0KIAorICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIGZvciAoVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuYmVnaW4o
KTsgaXQgIT0gbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmVuZCgpOyArK2l0KSB7CiAgICAg
ICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5nZXQoKml0KTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbWF0aW9uKQpA
QCAtMzE1LDYgKzMyMSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmco
Ym8KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1w
dHkoKSkgeworICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQg
PSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9u
KiBhbmltID0gaXQtPnNlY29uZC5nZXQoKTsKQEAgLTM0MSw2ICszNDgsNyBAQCBkb3VibGUgQ29t
cG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VyCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7
CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQtPnNlY29uZC5nZXQo
KTsKQEAgLTM2Miw2ICszNzAsNyBAQCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBDb21w
b3NpdGVBCiAgICAgLy8gV2Ugd2FudCB0byBzZW5kIGJhY2sgdGhlIGxhc3QgYW5pbWF0aW9uIHdp
dGggdGhlIHByb3BlcnR5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZXMuCiAgICAgLy8gU28gd2UgbmVl
ZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGFuaW1hdGlvbnMKICAgICBpZiAoIW1fa2V5ZnJhbWVB
bmltYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9y
IChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRp
b25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LT5zZWNvbmQ7CkBAIC0zODEsNiArMzkw
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpbwogICAgIG1faXNT
dXNwZW5kZWQgPSB0cnVlOwogCiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAh
PSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpKQpAQCAtNDA1LDYgKzQxNSw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb24KICAgICBtX2lzU3VzcGVuZGVkID0gZmFs
c2U7CiAKICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAg
ICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5lbmQoKTsKICAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNF
bmQ7ICsraXQpIHsKICAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZC5nZXQoKTsKQEAgLTQ1MCw2ICs0NjEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
cmVzdW1lT3ZlcnJpZGRlCiBib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9w
ZXJ0eShpbnQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93KSBjb25zdAogewogICAgIGlmICgh
bV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewogICAg
ICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgpOwpAQCAt
NDc0LDYgKzQ4Niw4IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpwYXVzZUFuaW1hdGlvbkEK
ICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIG1fa2V5ZnJhbWVB
bmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKKwogICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgp
KTsKICAgICBpZiAoIWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUwOSw2ICs1MjMsNyBAQCB1bnNpZ25lZCBDb21wb3Np
dGVBbmltYXRpb246Om51bWJlck9mQWN0CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIAog
ICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgQW5pbWF0aW9uTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25z
LmVuZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgewogICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdl
dCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgJKHJldmlzaW9uIDUzOTQ1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgflRyZWVTaGFyZWQoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKCFtX3JlZkNvdW50KTsKICAgICAgICAg
QVNTRVJUKG1fZGVsZXRpb25IYXNCZWd1bik7CiAgICAgfQogCkBAIC01OCw2ICs1OSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRlcmVmKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgICAgIEFTU0VSVChtX3JlZkNvdW50ID49IDApOwogICAgICAgICBBU1NFUlQo
IW1fZGVsZXRpb25IYXNCZWd1bik7CiAgICAgICAgIEFTU0VSVCghbV9pblJlbW92ZWRMYXN0UmVm
RnVuY3Rpb24pOwogICAgICAgICBpZiAoLS1tX3JlZkNvdW50IDw9IDAgJiYgIW1fcGFyZW50KSB7
Cg==
</data>
<flag name="review"
          id="30026"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>