<?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>126555</bug_id>
          
          <creation_ts>2014-01-06 17:26:18 -0800</creation_ts>
          <short_desc>Copying should be generational</short_desc>
          <delta_ts>2014-02-13 03:50:00 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121074</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ltilve+ews</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>964826</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-06 17:26:18 -0800</bug_when>
    <thetext>Copying should also be generational. Eden collections should always trigger copying. Full collections should use our normal fragmentation-based heuristics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966710</commentid>
    <comment_count>1</comment_count>
      <attachid>220912</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-10 17:32:22 -0800</bug_when>
    <thetext>Created attachment 220912
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966715</commentid>
    <comment_count>2</comment_count>
      <attachid>220912</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-10 17:59:11 -0800</bug_when>
    <thetext>Comment on attachment 220912
Patch

Attachment 220912 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/4947627439292416</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966720</commentid>
    <comment_count>3</comment_count>
      <attachid>220912</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-10 18:19:46 -0800</bug_when>
    <thetext>Comment on attachment 220912
Patch

Attachment 220912 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/5079382943072256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967593</commentid>
    <comment_count>4</comment_count>
      <attachid>220912</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-13 18:02:22 -0800</bug_when>
    <thetext>Comment on attachment 220912
Patch

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

r=me, with some suggestions

I don&apos;t understand the EFL bot&apos;s objection, so I think we should ignore it.

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        and a new generation of CopiedBlocks. During each mutator cycle new CopiedSpace allocations reside

I think you meant &quot;set of CopiedBlocks&quot;.

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        One key thing to remember is that both new and old generation objects in the MarkedSpace can
&gt; +        refer to old or new generation allocations in CopiedSpace. In other words, the generations in CopiedSpace
&gt; +        are independent of those in the MarkedSpace. This is why we must fire write barriers when assigning 
&gt; +        to an old (MarkedSpace) object&apos;s Butterfly.

I don&apos;t think it&apos;s right to say that the spaces are &quot;independent&quot;. Both spaces promote at the same time. That makes them dependent. I think I would just remove that middle sentence. The rest is good.

&gt; Source/JavaScriptCore/heap/CopiedBlockInlines.h:42
&gt; +    // this if this block was allocated during the last cycle. 

Remove extra &quot;this&quot;.

&gt; Source/JavaScriptCore/heap/CopiedBlockInlines.h:46
&gt; +    // We want to add to live bytes if the owner isn&apos;t part of the remembered set or
&gt; +    // this if this block was allocated during the last cycle. 
&gt; +    // If we always added live bytes we would double count for elements in the remembered
&gt; +    // set across collections. 
&gt; +    // If we didn&apos;t always add live bytes to new blocks, we&apos;d get too few.
&gt; +    if (!isOwnerRemembered || !m_isOld) {

Let&apos;s factor this into a helper function -- maybe &quot;shouldReportLiveBytes&quot; -- and call the helper function at the call site, and assert that it&apos;s true inside this function. That way, you can remove the double checking inside the function, and establish consistency between what SlotVisitor records and what CopiedBlock records.

I think you could tighten this comment by starting with each case we want to avoid: &quot;Don&apos;t report when copying on behalf of a remembered object because...&quot;; &quot;Don&apos;t report when copying an old object because...&quot;

&gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:238
&gt; +    DoublyLinkedList&lt;CopiedBlock&gt;* toSpace, *fromSpace;

Two lines, please. Multiple pointer declaration is just too easy to get wrong.

&gt; Source/JavaScriptCore/heap/CopiedSpaceInlines.h:97
&gt; +template &lt;HeapOperation collectionType&gt;
&gt;  inline void CopiedSpace::recycleEvacuatedBlock(CopiedBlock* block)

I think it would be better just to pass HeapOperation as an argument. That way, you could remove the if at the call site. Since this function is inlined, no efficiency will be lost.

&gt; Source/JavaScriptCore/heap/CopiedSpaceInlines.h:185
&gt; +    DoublyLinkedList&lt;CopiedBlock&gt;* toSpace, *fromSpace, *oversizeBlocks;

Multiple lines, please.

&gt; Source/JavaScriptCore/heap/CopiedSpaceInlines.h:217
&gt; +    // TODO: Make sure we accurately keep track of the total live bytes for EdenCollections.

Is this still a TODO? It seems like you did it.

&gt; Source/JavaScriptCore/heap/CopiedSpaceInlines.h:247
&gt; +    double totalFragmentation = ((double)totalLiveBytes + markedSpaceBytes) / ((double)totalUsableBytes + markedSpaceBytes);

static_cast, please.

&gt; Source/JavaScriptCore/heap/GCThreadSharedData.cpp:206
&gt; +            unsigned index = 0;
&gt; +            CopiedBlock* block = m_copiedSpace-&gt;m_newGen.fromSpace-&gt;head();
&gt; +            // First we fill up the pre-existing space in the vector.
&gt; +            while (block) {
&gt; +                if (index &gt;= m_blocksToCopy.size())
&gt; +                    break;
&gt; +                m_blocksToCopy[index++] = block; 
&gt; +                block = block-&gt;next();
&gt; +            }
&gt; +
&gt; +            // If we have no more blocks in the linked list we reduce the size of the vector 
&gt; +            // to the size of the linked list. We do the resize here instead of at the very 
&gt; +            // beginning because it&apos;s O(n) to get the length of the linked list of blocks.
&gt; +            if (!block)
&gt; +                m_blocksToCopy.resize(index);
&gt; +
&gt; +            // If we exhausted the pre-existing space in the vector and have more blocks then start
&gt; +            // appending to the end of the vector.
&gt; +            while (block) {
&gt; +                m_blocksToCopy.append(block);
&gt; +                block = block-&gt;next();
&gt; +            }

You can just do a normal shrink(0) followed by append for each item. The backing store will not deallocate from a shrink(0) -- only from clear(), shrinkToFit(), or shrinkCapacity().

&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:231
&gt; +    bool isRemembered = heap()-&gt;operationInProgress() == EdenCollection &amp;&amp; MarkedBlock::blockFor(owner)-&gt;isRemembered(owner);
&gt; +    if (!isRemembered)
&gt; +        m_bytesCopied += bytes;

This check is different from the check done inside CopiedBlock. See my comment there for a suggestion of how to improve this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967849</commentid>
    <comment_count>5</comment_count>
      <attachid>221167</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-14 09:02:19 -0800</bug_when>
    <thetext>Created attachment 221167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967850</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-14 09:03:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=221167) [details]
&gt; Patch

Just to make sure we&apos;re on the same page w.r.t. SlotVisitor::copyLater, CopiedBlock::shouldReportLiveBytes, and CopiedBlock::reportLiveBytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967860</commentid>
    <comment_count>7</comment_count>
      <attachid>221167</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-14 09:13:26 -0800</bug_when>
    <thetext>Comment on attachment 221167
Patch

Attachment 221167 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/6525023300878336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967861</commentid>
    <comment_count>8</comment_count>
      <attachid>221167</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-14 09:25:07 -0800</bug_when>
    <thetext>Comment on attachment 221167
Patch

Attachment 221167 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/6152784122478592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967967</commentid>
    <comment_count>9</comment_count>
      <attachid>221167</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-14 12:07:25 -0800</bug_when>
    <thetext>Comment on attachment 221167
Patch

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

r=me

You should send email to webkit-dev inviting the EFL and GTK maintainers to resolved their respective build issues.

&gt; Source/WTF/wtf/Platform.h:760
&gt; +#define ENABLE_GGC 1

-1 point for Gryffindor!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967984</commentid>
    <comment_count>10</comment_count>
      <attachid>221189</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-14 12:52:39 -0800</bug_when>
    <thetext>Created attachment 221189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967985</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-14 12:52:57 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=221189) [details]
&gt; Patch

One more upload for EWS to chew on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968066</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-14 14:58:55 -0800</bug_when>
    <thetext>Committed r162017: &lt;http://trac.webkit.org/changeset/162017&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980221</commentid>
    <comment_count>13</comment_count>
      <attachid>221189</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-13 03:50:00 -0800</bug_when>
    <thetext>Comment on attachment 221189
Patch

Cleared review? from attachment 221189 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220912</attachid>
            <date>2014-01-10 17:32:22 -0800</date>
            <delta_ts>2014-01-14 09:02:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126555-20140110173214.patch</filename>
            <type>text/plain</type>
            <size>33359</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxNzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE0LTAxLTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29weWluZyBzaG91bGQgYmUgZ2VuZXJhdGlvbmFsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY1NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBm
b3IgY29weWluZyB0byBvdXIgZ2VuZXJhdGlvbmFsIGNvbGxlY3Rvci4gRWRlbiBjb2xsZWN0aW9u
cyAKKyAgICAgICAgYWx3YXlzIHRyaWdnZXIgY29weWluZy4gRnVsbCBjb2xsZWN0aW9ucyB1c2Ug
b3VyIG5vcm1hbCBmcmFnbWVudGF0aW9uLWJhc2VkIGhldXJpc3RpY3MuCisKKyAgICAgICAgVGhl
IHdheSB0aGlzIHdvcmtzIGlzIHRoYXQgdGhlIENvcGllZFNwYWNlIG5vdyBoYXMgdGhlIG5vdGlv
biBvZiBhbiBvbGQgZ2VuZXJhdGlvbiBzZXQgb2YgQ29waWVkQmxvY2tzCisgICAgICAgIGFuZCBh
IG5ldyBnZW5lcmF0aW9uIG9mIENvcGllZEJsb2Nrcy4gRHVyaW5nIGVhY2ggbXV0YXRvciBjeWNs
ZSBuZXcgQ29waWVkU3BhY2UgYWxsb2NhdGlvbnMgcmVzaWRlCisgICAgICAgIGluIHRoZSBuZXcg
Z2VuZXJhdGlvbi4gV2hlbiBhIGNvbGxlY3Rpb24gb2NjdXJzLCB0aG9zZSBibG9ja3MgYXJlIG1v
dmVkIHRvIHRoZSBvbGQgZ2VuZXJhdGlvbi4KKworICAgICAgICBPbmUga2V5IHRoaW5nIHRvIHJl
bWVtYmVyIGlzIHRoYXQgYm90aCBuZXcgYW5kIG9sZCBnZW5lcmF0aW9uIG9iamVjdHMgaW4gdGhl
IE1hcmtlZFNwYWNlIGNhbgorICAgICAgICByZWZlciB0byBvbGQgb3IgbmV3IGdlbmVyYXRpb24g
YWxsb2NhdGlvbnMgaW4gQ29waWVkU3BhY2UuIEluIG90aGVyIHdvcmRzLCB0aGUgZ2VuZXJhdGlv
bnMgaW4gQ29waWVkU3BhY2UKKyAgICAgICAgYXJlIGluZGVwZW5kZW50IG9mIHRob3NlIGluIHRo
ZSBNYXJrZWRTcGFjZS4gVGhpcyBpcyB3aHkgd2UgbXVzdCBmaXJlIHdyaXRlIGJhcnJpZXJzIHdo
ZW4gYXNzaWduaW5nIAorICAgICAgICB0byBhbiBvbGQgKE1hcmtlZFNwYWNlKSBvYmplY3QncyBC
dXR0ZXJmbHkuCisKKyAgICAgICAgKiBoZWFwL0NvcGllZEFsbG9jYXRvci5oOgorICAgICAgICAo
SlNDOjpDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyk6CisgICAgICAg
ICogaGVhcC9Db3BpZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6ZGlkRXZhY3VhdGVCeXRlcyk6Cisg
ICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjppc09sZCk6CisgICAgICAgIChKU0M6OkNvcGllZEJs
b2NrOjpkaWRQcm9tb3RlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcpOgorICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6Q29waWVk
U3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6fkNvcGllZFNwYWNlKToKKyAgICAg
ICAgKEpTQzo6Q29waWVkU3BhY2U6OmluaXQpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6
dHJ5QWxsb2NhdGVPdmVyc2l6ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlSZWFs
bG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdC
bG9jayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKToKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6Y2FwYWNp
dHkpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6aXNQYWdlZE91dCk6CisgICAgICAgICog
aGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6Q29waWVkR2Vu
ZXJhdGlvbjo6Q29waWVkR2VuZXJhdGlvbik6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZUlu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmNvbnRhaW5zKToKKyAgICAgICAg
KEpTQzo6Q29waWVkU3BhY2U6OnJlY3ljbGVFdmFjdWF0ZWRCbG9jayk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OnN0YXJ0ZWRDb3B5aW5nKToKKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmNvcHlGcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xv
dyk6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOgorICAgICAgICAoSlND
OjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZyk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
Ojpjb3B5TGF0ZXIpOgorICAgICAgICAqIGhlYXAvVGlueUJsb29tRmlsdGVyLmg6CisgICAgICAg
IChKU0M6OlRpbnlCbG9vbUZpbHRlcjo6YWRkKToKKwogMjAxNC0wMS0xMCAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmV2aXNlIHR5cGVkIGFycmF5IGlt
cGxlbWVudGF0aW9ucyB0byBtYXRjaCBFQ01BU2NyaXB0IGFuZCBXZWJHTCBTcGVjaWZpY2F0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAko
cmV2aXNpb24gMTYxNjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgZmFzdFBhdGhTaG91bGRTdWNjZWVkKHNpemVfdCBieXRlcykgY29uc3Q7CiAgICAg
Q2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsK
KyAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoc2l6ZV90IGJ5dGVz
LCB2b2lkKiogb3V0UHRyKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlKHZvaWQg
Km9sZFB0ciwgc2l6ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpOwogICAgIHZvaWQqIGZv
cmNlQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKTsKICAgICBDb3BpZWRCbG9jayogcmVzZXRDdXJyZW50
QmxvY2soKTsKQEAgLTkzLDYgKzk0LDE0IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRB
bGxvY2F0b3I6OnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIENoZWNrZWRCb29sZWFu
IENvcGllZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRlcywg
dm9pZCoqIG91dFB0cikKK3sKKyAgICBpZiAoIXRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jdXJyZW50QmxvY2stPnJlcG9ydExpdmVCeXRl
c0R1cmluZ0NvcHlpbmcoYnl0ZXMpOworICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgQ2hl
Y2tlZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0cnlSZWFsbG9jYXRlKAogICAgIHZvaWQqIG9s
ZFB0ciwgc2l6ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDE2MTY3OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEwICs0OSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwaW4oKTsKICAgICBib29sIGlzUGlu
bmVkKCk7CiAKKyAgICBib29sIGlzT2xkKCk7CiAgICAgYm9vbCBpc092ZXJzaXplKCk7CisgICAg
dm9pZCBkaWRQcm9tb3RlKCk7CiAKICAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKLSAgICB2b2lk
IHJlcG9ydExpdmVCeXRlcyhKU0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKKyAgICB2b2lk
IHJlcG9ydExpdmVCeXRlcyhKU0NlbGwqLCBib29sIGlzT3duZXJSZW1lbWJlcmVkLCBDb3B5VG9r
ZW4sIHVuc2lnbmVkKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlc0R1cmluZ1dyaXRlQmFycmll
cih1bnNpZ25lZCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2ln
bmVkKTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygpOwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRl
cyh1bnNpZ25lZCk7CiAgICAgYm9vbCBzaG91bGRFdmFjdWF0ZSgpOwpAQCAtOTQsNyArOTgsOCBA
QCBwcml2YXRlOgogICAgIE93blB0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBz
aXplX3QgbV9yZW1haW5pbmc7Ci0gICAgdWludHB0cl90IG1faXNQaW5uZWQ7CisgICAgYm9vbCBt
X2lzUGlubmVkIDogMTsKKyAgICBib29sIG1faXNPbGQgOiAxOwogICAgIHVuc2lnbmVkIG1fbGl2
ZUJ5dGVzOwogI2lmbmRlZiBOREVCVUcKICAgICB1bnNpZ25lZCBtX2xpdmVPYmplY3RzOwpAQCAt
MTMwLDYgKzEzNSw3IEBAIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVkQmxvY2soUmVnaW9uKiAK
ICAgICA6IEhlYXBCbG9jazxDb3BpZWRCbG9jaz4ocmVnaW9uKQogICAgICwgbV9yZW1haW5pbmco
cGF5bG9hZENhcGFjaXR5KCkpCiAgICAgLCBtX2lzUGlubmVkKGZhbHNlKQorICAgICwgbV9pc09s
ZChmYWxzZSkKICAgICAsIG1fbGl2ZUJ5dGVzKDApCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9s
aXZlT2JqZWN0cygwKQpAQCAtMTU2LDYgKzE2Miw3IEBAIGlubGluZSB2b2lkIENvcGllZEJsb2Nr
OjpkaWRTdXJ2aXZlR0MoKQogaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZEV2YWN1YXRlQnl0
ZXModW5zaWduZWQgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzID49IGJ5dGVzKTsK
KyAgICBBU1NFUlQobV9saXZlT2JqZWN0cyk7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IG1fbGl2ZUJ5dGVzIC09IGJ5dGVzOwogI2lmbmRlZiBOREVCVUcKQEAgLTE4OCw2ICsxOTUsMTYg
QEAgaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzUGlubmVkKCkKICAgICByZXR1cm4gbV9pc1Bp
bm5lZDsKIH0KIAoraW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzT2xkKCkKK3sKKyAgICByZXR1
cm4gbV9pc09sZDsKK30KKworaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFByb21vdGUoKQor
eworICAgIG1faXNPbGQgPSB0cnVlOworfQorCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNP
dmVyc2l6ZSgpCiB7CiAgICAgcmV0dXJuIHJlZ2lvbigpLT5pc0N1c3RvbVNpemUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAxNjE2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjEgKzI2LDMyIEBACiAjaWZuZGVmIENv
cGllZEJsb2NrSW5saW5lc19oCiAjZGVmaW5lIENvcGllZEJsb2NrSW5saW5lc19oCiAKKyNpbmNs
dWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi1pbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6
cmVwb3J0TGl2ZUJ5dGVzKEpTQ2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQg
Ynl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKEpTQ2VsbCog
b3duZXIsIGJvb2wgaXNPd25lclJlbWVtYmVyZWQsIENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQg
Ynl0ZXMpCiB7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tlcigmbV93b3JrTGlzdExvY2spOwogI2VuZGlmCisKKyAgICAvLyBXZSB3YW50IHRvIGFkZCB0
byBsaXZlIGJ5dGVzIGlmIHRoZSBvd25lciBpc24ndCBwYXJ0IG9mIHRoZSByZW1lbWJlcmVkIHNl
dCBvcgorICAgIC8vIHRoaXMgaWYgdGhpcyBibG9jayB3YXMgYWxsb2NhdGVkIGR1cmluZyB0aGUg
bGFzdCBjeWNsZS4gCisgICAgLy8gSWYgd2UgYWx3YXlzIGFkZGVkIGxpdmUgYnl0ZXMgd2Ugd291
bGQgZG91YmxlIGNvdW50IGZvciBlbGVtZW50cyBpbiB0aGUgcmVtZW1iZXJlZAorICAgIC8vIHNl
dCBhY3Jvc3MgY29sbGVjdGlvbnMuIAorICAgIC8vIElmIHdlIGRpZG4ndCBhbHdheXMgYWRkIGxp
dmUgYnl0ZXMgdG8gbmV3IGJsb2Nrcywgd2UnZCBnZXQgdG9vIGZldy4KKyAgICBpZiAoIWlzT3du
ZXJSZW1lbWJlcmVkIHx8ICFtX2lzT2xkKSB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICNpZm5kZWYgTkRFQlVHCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIG1fbGl2ZU9iamVj
dHMrKzsKKyAgICAgICAgbV9saXZlT2JqZWN0cysrOwogI2VuZGlmCi0gICAgbV9saXZlQnl0ZXMg
Kz0gYnl0ZXM7CisgICAgICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgfQorICAgIEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRCbG9j
azo6YmxvY2tTaXplKTsKIAogICAgIGlmIChpc1Bpbm5lZCgpKQogICAgICAgICByZXR1cm47CkBA
IC01Myw3ICs2NCwyMyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVz
CiAgICAgaWYgKCFtX3dvcmtMaXN0KQogICAgICAgICBtX3dvcmtMaXN0ID0gYWRvcHRQdHIobmV3
IENvcHlXb3JrTGlzdChIZWFwOjpoZWFwKG93bmVyKS0+YmxvY2tBbGxvY2F0b3IoKSkpOwogCi0g
ICAgbV93b3JrTGlzdC0+YXBwZW5kKENvcHlXb3JrbGlzdEl0ZW0ob3duZXIsIHRva2VuKSk7Cisg
ICAgLy8gUmVtZW1iZXJlZCBzZXQgZWxlbWVudHMgc3RpbGwgbmVlZCB0byBiZSBhZGRlZCB0byB0
aGUgd29yayBsaXN0IGlmIHRoZSBibG9jayBpcyB5b3VuZworICAgIC8vIGJlY2F1c2UgaWYgd2Ug
ZG8gY29weWluZyB0aGVuIHdlIGFsd2F5cyBldmFjdWF0ZSB5b3VuZyBibG9ja3MsIGV2ZW4gZHVy
aW5nIEVkZW5Db2xsZWN0aW9ucy4KKyAgICBpZiAoIWlzT3duZXJSZW1lbWJlcmVkIHx8ICFtX2lz
T2xkKQorICAgICAgICBtX3dvcmtMaXN0LT5hcHBlbmQoQ29weVdvcmtsaXN0SXRlbShvd25lciwg
dG9rZW4pKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1
cmluZ0NvcHlpbmcodW5zaWduZWQgYnl0ZXMpCit7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgIC8vIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGxvY2tlZCBiZWNhdXNlIHRoZSB0aHJlYWQg
dGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIG93bnMgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgbV9p
c09sZCA9IHRydWU7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbGl2ZU9iamVjdHMrKzsKKyNlbmRp
ZgorICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlLmNwcAkocmV2aXNpb24gMTYxNjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBDb3BpZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6
IG1faGVhcChoZWFwKQotICAgICwgbV90b1NwYWNlKDApCi0gICAgLCBtX2Zyb21TcGFjZSgwKQog
ICAgICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKICAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2Uo
ZmFsc2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCkBAIC00NiwyMSArNDQsNDAg
QEAgQ29waWVkU3BhY2U6OkNvcGllZFNwYWNlKEhlYXAqIGhlYXApCiAKIENvcGllZFNwYWNlOjp+
Q29waWVkU3BhY2UoKQogewotICAgIHdoaWxlICghbV90b1NwYWNlLT5pc0VtcHR5KCkpCi0gICAg
ICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0
cm95KG1fdG9TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CisgICAgd2hpbGUgKCFtX29sZEdlbi50b1Nw
YWNlLT5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9j
YXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fb2xkR2VuLnRvU3BhY2UtPnJlbW92ZUhlYWQoKSkp
OwogCi0gICAgd2hpbGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBtX2hlYXAt
PmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX2Zyb21T
cGFjZS0+cmVtb3ZlSGVhZCgpKSk7CisgICAgd2hpbGUgKCFtX29sZEdlbi5mcm9tU3BhY2UtPmlz
RW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29w
aWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRHZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCkpKTsKIAot
ICAgIHdoaWxlICghbV9vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpCi0gICAgICAgIG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJv
eShtX292ZXJzaXplQmxvY2tzLnJlbW92ZUhlYWQoKSkpOworICAgIHdoaWxlICghbV9vbGRHZW4u
b3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9y
KCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRHZW4ub3Zl
cnNpemVCbG9ja3MucmVtb3ZlSGVhZCgpKSk7CisKKyAgICB3aGlsZSAoIW1fbmV3R2VuLnRvU3Bh
Y2UtPmlzRW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2Nh
dGUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9uZXdHZW4udG9TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7
CisKKyAgICB3aGlsZSAoIW1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKQorICAgICAgICBt
X2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveSht
X25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKSkpOworCisgICAgd2hpbGUgKCFtX25ld0dl
bi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0
b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX25ld0dlbi5v
dmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFkKCkpKTsKKworICAgIEFTU0VSVChtX29sZEdlbi50b1Nw
YWNlLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKG1fbmV3R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2Vu
LmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3MuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDb3BpZWRTcGFjZTo6aW5pdCgpCiB7Ci0gICAgbV90
b1NwYWNlID0gJm1fYmxvY2tzMTsKLSAgICBtX2Zyb21TcGFjZSA9ICZtX2Jsb2NrczI7CisgICAg
bV9vbGRHZW4udG9TcGFjZSA9ICZtX29sZEdlbi5ibG9ja3MxOworICAgIG1fb2xkR2VuLmZyb21T
cGFjZSA9ICZtX29sZEdlbi5ibG9ja3MyOwogICAgIAorICAgIG1fbmV3R2VuLnRvU3BhY2UgPSAm
bV9uZXdHZW4uYmxvY2tzMTsKKyAgICBtX25ld0dlbi5mcm9tU3BhY2UgPSAmbV9uZXdHZW4uYmxv
Y2tzMjsKKwogICAgIGFsbG9jYXRlQmxvY2soKTsKIH0gICAKIApAQCAtODMsOSArMTAwLDEwIEBA
IENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU8KICAgICBBU1NFUlQoaXNP
dmVyc2l6ZShieXRlcykpOwogICAgIAogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZEJs
b2NrOjpjcmVhdGUobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlQ3VzdG9tU2l6ZShz
aXplb2YoQ29waWVkQmxvY2spICsgYnl0ZXMsIENvcGllZEJsb2NrOjpibG9ja1NpemUpKTsKLSAg
ICBtX292ZXJzaXplQmxvY2tzLnB1c2goYmxvY2spOwotICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nr
cy5wdXNoKGJsb2NrKTsKKyAgICBtX25ld0dlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRf
Y2FzdDxCaXRzPihibG9jaykpOwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKKyAgICBBU1NF
UlQoIWJsb2NrLT5pc09sZCgpKTsKICAgICAKICAgICBDb3BpZWRBbGxvY2F0b3IgYWxsb2NhdG9y
OwogICAgIGFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxvY2spOwpAQCAtMTM4LDcgKzE1Niwx
MCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAKICAgICBDb3Bp
ZWRCbG9jayogb2xkQmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKICAgICBp
ZiAob2xkQmxvY2stPmlzT3ZlcnNpemUoKSkgewotICAgICAgICBtX292ZXJzaXplQmxvY2tzLnJl
bW92ZShvbGRCbG9jayk7CisgICAgICAgIGlmIChvbGRCbG9jay0+aXNPbGQoKSkKKyAgICAgICAg
ICAgIG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7
CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKG9sZEJsb2NrKTsKICAgICAgICAgbV9oZWFwLT5i
bG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpkZXN0cm95
KG9sZEJsb2NrKSk7CiAgICAgfQpAQCAtMTY1LDEwICsxODYsMTEgQEAgdm9pZCBDb3BpZWRTcGFj
ZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3Mo
KTsKIAogICAgIHsKKyAgICAgICAgLy8gQWx3YXlzIHB1dCB0aGUgYmxvY2sgaW50byB0aGUgb2xk
IGdlbiBiZWNhdXNlIGl0J3MgYmVpbmcgcHJvbW90ZWQhCiAgICAgICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV90b1NwYWNlTG9jayk7Ci0gICAgICAgIG1fdG9TcGFjZS0+cHVzaChibG9jayk7
CisgICAgICAgIG1fb2xkR2VuLnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Jsb2Nr
U2V0LmFkZChibG9jayk7Ci0gICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nh
c3Q8Qml0cz4oYmxvY2spKTsKKyAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50
ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICB9CiAKICAgICB7CkBAIC0xODEsNTIgKzIw
MywyNSBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAgICAgfQog
fQogCi12b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygpCit2b2lkIENvcGllZFNwYWNl
OjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCkKIHsKLSAgICBzdGQ6OnN3YXAobV9mcm9tU3BhY2Us
IG1fdG9TcGFjZSk7Ci0KLSAgICBtX2Jsb2NrRmlsdGVyLnJlc2V0KCk7Ci0gICAgbV9hbGxvY2F0
b3IucmVzZXRDdXJyZW50QmxvY2soKTsKKyAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblBy
b2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pOworICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3Bh
Y2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgp
KTsKIAotICAgIENvcGllZEJsb2NrKiBuZXh0ID0gMDsKLSAgICBzaXplX3QgdG90YWxMaXZlQnl0
ZXMgPSAwOwotICAgIHNpemVfdCB0b3RhbFVzYWJsZUJ5dGVzID0gMDsKLSAgICBmb3IgKENvcGll
ZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IG5leHQp
IHsKLSAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7Ci0gICAgICAgIGlmICghYmxvY2stPmlz
UGlubmVkKCkgJiYgYmxvY2stPmNhbkJlUmVjeWNsZWQoKSkgewotICAgICAgICAgICAgcmVjeWNs
ZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJsb2NrLT5saXZlQnl0ZXMoKTsKLSAgICAgICAg
dG90YWxVc2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgfQorI2lm
bmRlZiBOREVCVUcKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLnRvU3Bh
Y2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgQVNTRVJU
KCFibG9jay0+bGl2ZUJ5dGVzKCkpOworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBt
X25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0
KCkpCisgICAgICAgIEFTU0VSVCghYmxvY2stPmxpdmVCeXRlcygpKTsKKyNlbmRpZgogCi0gICAg
Q29waWVkQmxvY2sqIGJsb2NrID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7Ci0gICAgd2hpbGUg
KGJsb2NrKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBuZXh0ID0gYmxvY2stPm5leHQoKTsKLSAg
ICAgICAgaWYgKGJsb2NrLT5pc1Bpbm5lZCgpKSB7Ci0gICAgICAgICAgICBtX2Jsb2NrRmlsdGVy
LmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgICAgICAgICB0b3RhbExp
dmVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgICAgICAgICB0b3RhbFVz
YWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKLSAgICAgICAgICAgIGJsb2Nr
LT5kaWRTdXJ2aXZlR0MoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fb3ZlcnNp
emVCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJs
b2NrKTsKLSAgICAgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3Vz
dG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9jaykpOwotICAgICAgICB9IAotICAgICAg
ICBibG9jayA9IG5leHQ7Ci0gICAgfQotCi0gICAgZG91YmxlIG1hcmtlZFNwYWNlQnl0ZXMgPSBt
X2hlYXAtPm9iamVjdFNwYWNlKCkuY2FwYWNpdHkoKTsKLSAgICBkb3VibGUgdG90YWxGcmFnbWVu
dGF0aW9uID0gKChkb3VibGUpdG90YWxMaXZlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKSAvICgo
ZG91YmxlKXRvdGFsVXNhYmxlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKTsKLSAgICBtX3Nob3Vs
ZERvQ29weVBoYXNlID0gdG90YWxGcmFnbWVudGF0aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBVdGls
aXphdGlvbigpOwotICAgIGlmICghbV9zaG91bGREb0NvcHlQaGFzZSkKLSAgICAgICAgcmV0dXJu
OworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4udG9TcGFjZS0+aGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2
ZUdDKCk7CiAKLSAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7Ci0gICAgQVNTRVJUKCFt
X2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwot
ICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2Nr
ID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+
bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7CiB9CiAKIHZvaWQgQ29waWVk
U3BhY2U6OmRvbmVDb3B5aW5nKCkKQEAgLTI0MCwyMSArMjM1LDM4IEBAIHZvaWQgQ29waWVkU3Bh
Y2U6OmRvbmVDb3B5aW5nKCkKICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBtX3Nob3Vs
ZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CiAKLSAgICB3aGls
ZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ29waWVkQmxvY2sqIGJsb2Nr
ID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgLy8gQWxsIG5vbi1waW5uZWQg
YmxvY2tzIGluIGZyb20tc3BhY2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYXMgdGhleSB3
ZXJlIGV2YWN1YXRlZC4KLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1Bpbm5lZCgpIHx8ICFtX3No
b3VsZERvQ29weVBoYXNlKTsKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworICAgIERv
dWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiB0b1NwYWNlLCAqZnJvbVNwYWNlOworICAgIFRp
bnlCbG9vbUZpbHRlciogYmxvY2tGaWx0ZXI7CisgICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Q
cm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIHRvU3BhY2UgPSBtX29sZEdl
bi50b1NwYWNlOworICAgICAgICBmcm9tU3BhY2UgPSBtX29sZEdlbi5mcm9tU3BhY2U7CisgICAg
ICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRvU3BhY2UgPSBtX25ld0dlbi50b1NwYWNlOworICAgICAgICBmcm9tU3BhY2UgPSBt
X25ld0dlbi5mcm9tU3BhY2U7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fbmV3R2VuLmJsb2Nr
RmlsdGVyOworICAgIH0KKworICAgIHdoaWxlICghZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCk7CiAgICAg
ICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQg
d2FzIG5ldmVyIHJlbW92ZWQuCiAgICAgICAgIEFTU0VSVChtX2Jsb2NrU2V0LmNvbnRhaW5zKGJs
b2NrKSk7Ci0gICAgICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
YmxvY2spKTsKLSAgICAgICAgbV90b1NwYWNlLT5wdXNoKGJsb2NrKTsKKyAgICAgICAgYmxvY2tG
aWx0ZXItPmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CisgICAgICAgIHRvU3Bh
Y2UtPnB1c2goYmxvY2spOworICAgIH0KKworICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5h
cHBlbmQoKm1fbmV3R2VuLnRvU3BhY2UpOworICAgICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nr
cy5hcHBlbmQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MpOworICAgICAgICBtX29sZEdlbi5ibG9j
a0ZpbHRlci5hZGQobV9uZXdHZW4uYmxvY2tGaWx0ZXIpOworICAgICAgICBtX25ld0dlbi5ibG9j
a0ZpbHRlci5yZXNldCgpOwogICAgIH0KIAotICAgIGlmICghbV90b1NwYWNlLT5oZWFkKCkpCi0g
ICAgICAgIGFsbG9jYXRlQmxvY2soKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYWxsb2NhdG9yLnNl
dEN1cnJlbnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLnRv
U3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKKwor
ICAgIGFsbG9jYXRlQmxvY2soKTsKIAogICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSBmYWxzZTsK
IH0KQEAgLTI2MywxMyArMjc1LDIyIEBAIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCiB7CiAg
ICAgc2l6ZV90IGNhbGN1bGF0ZWRTaXplID0gMDsKIAotICAgIGZvciAoQ29waWVkQmxvY2sqIGJs
b2NrID0gbV90b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisg
ICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi50b1NwYWNlLT5oZWFkKCk7IGJs
b2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJs
b2NrLT5zaXplKCk7CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNl
LT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX29sZEdlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0g
YmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsK
IAotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7
IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxv
Y2sgPSBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2Nr
LT5uZXh0KCkpCisgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CisKKyAg
ICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxv
Y2stPnNpemUoKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4uZnJv
bVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNh
bGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBi
bG9jayA9IG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxv
Y2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKIAog
ICAgIHJldHVybiBjYWxjdWxhdGVkU2l6ZTsKQEAgLTI3OSwxMyArMzAwLDIyIEBAIHNpemVfdCBD
b3BpZWRTcGFjZTo6Y2FwYWNpdHkoKQogewogICAgIHNpemVfdCBjYWxjdWxhdGVkQ2FwYWNpdHkg
PSAwOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9j
ayA9IG1fb2xkR2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQo
KSkKKyAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOworCisg
ICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi5mcm9tU3BhY2UtPmhlYWQoKTsg
YmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5
ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBt
X2Zyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBi
bG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkg
Kz0gYmxvY2stPmNhcGFjaXR5KCk7CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1f
b3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAg
IGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9j
azsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0g
YmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3
R2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAg
ICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBmb3Ig
KENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9
IGJsb2NrLT5jYXBhY2l0eSgpOwogCiAgICAgcmV0dXJuIGNhbGN1bGF0ZWRDYXBhY2l0eTsKQEAg
LTMxMSwyMiArMzQxLDEyIEBAIHN0YXRpYyBib29sIGlzQmxvY2tMaXN0UGFnZWRPdXQoZG91Ymxl
IGQKIAogYm9vbCBDb3BpZWRTcGFjZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7Ci0g
ICAgcmV0dXJuIGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fdG9TcGFjZSkgCi0gICAg
ICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fZnJvbVNwYWNlKSAKLSAgICAg
ICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgJm1fb3ZlcnNpemVCbG9ja3MpOwot
fQotCi12b2lkIENvcGllZFNwYWNlOjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICBB
U1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pOwot
Ci0gICAgQVNTRVJUKG1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpOwotCi0gICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwotCi0gICAgZm9yIChDb3BpZWRC
bG9jayogYmxvY2sgPSBtX292ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxv
Y2stPm5leHQoKSkKLSAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworICAgIHJldHVybiBp
c0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX29sZEdlbi50b1NwYWNlKSAKKyAgICAgICAg
fHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9vbGRHZW4uZnJvbVNwYWNlKSAKKyAg
ICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgJm1fb2xkR2VuLm92ZXJzaXpl
QmxvY2tzKQorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX25ld0dl
bi50b1NwYWNlKSAKKyAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9u
ZXdHZW4uZnJvbVNwYWNlKSAKKyAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGlu
ZSwgJm1fbmV3R2VuLm92ZXJzaXplQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDE2
MTY3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKICNp
bmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQm9vbGVhbi5oPgpAQCAtNjIsNyArNjMsMTAgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7CiAKKyAgICB0ZW1wbGF0ZSA8
SGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZT4KICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7
CisgICAgdm9pZCBzdGFydGVkRWRlbkNvcHkoKTsKKyAgICB2b2lkIHN0YXJ0ZWRGdWxsQ29weSgp
OwogICAgIHZvaWQgZG9uZUNvcHlpbmcoKTsKICAgICBib29sIGlzSW5Db3B5UGhhc2UoKSB7IHJl
dHVybiBtX2luQ29weWluZ1BoYXNlOyB9CiAKQEAgLTk1LDYgKzk5LDcgQEAgcHJpdmF0ZToKICAg
ICBDb3BpZWRCbG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwogCiAgICAgdm9p
ZCBkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKiwgQ29waWVkQmxvY2sqKik7CisgICAgdGVt
cGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGU+CiAgICAgdm9pZCByZWN5Y2xlRXZh
Y3VhdGVkQmxvY2soQ29waWVkQmxvY2sqKTsKICAgICB2b2lkIHJlY3ljbGVCb3Jyb3dlZEJsb2Nr
KENvcGllZEJsb2NrKik7CiAKQEAgLTEwMiwxNyArMTA3LDI5IEBAIHByaXZhdGU6CiAKICAgICBD
b3BpZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAKLSAgICBUaW55Qmxvb21GaWx0ZXIgbV9ibG9j
a0ZpbHRlcjsKICAgICBIYXNoU2V0PENvcGllZEJsb2NrKj4gbV9ibG9ja1NldDsKIAogICAgIFNw
aW5Mb2NrIG1fdG9TcGFjZUxvY2s7CiAKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2Nr
PiogbV90b1NwYWNlOwotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBtX2Zyb21T
cGFjZTsKLSAgICAKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBtX2Jsb2NrczE7
Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9ibG9ja3MyOwotICAgIERvdWJs
eUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+IG1fb3ZlcnNpemVCbG9ja3M7CisgICAgc3RydWN0IENv
cGllZEdlbmVyYXRpb24geworICAgICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKKyAgICAgICAgICAg
IDogdG9TcGFjZSgwKQorICAgICAgICAgICAgLCBmcm9tU3BhY2UoMCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3BhY2U7
CisgICAgICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7CisgICAg
ICAgIAorICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MxOworICAg
ICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MyOworICAgICAgICBEb3Vi
bHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBvdmVyc2l6ZUJsb2NrczsKKworICAgICAgICBUaW55
Qmxvb21GaWx0ZXIgYmxvY2tGaWx0ZXI7CisgICAgfTsKKworICAgIENvcGllZEdlbmVyYXRpb24g
bV9vbGRHZW47CisgICAgQ29waWVkR2VuZXJhdGlvbiBtX25ld0dlbjsKICAgIAogICAgIGJvb2wg
bV9pbkNvcHlpbmdQaGFzZTsKICAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkocmV2
aXNpb24gMTYxNjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2sp
CiB7Ci0gICAgcmV0dXJuICFtX2Jsb2NrRmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxC
aXRzPihibG9jaykpICYmIG1fYmxvY2tTZXQuY29udGFpbnMoYmxvY2spOworICAgIHJldHVybiAo
IW1fbmV3R2VuLmJsb2NrRmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9j
aykpIHx8ICFtX29sZEdlbi5ibG9ja0ZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4oYmxvY2spKSkKKyAgICAgICAgJiYgbV9ibG9ja1NldC5jb250YWlucyhibG9jayk7CiB9CiAK
IGlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyh2b2lkKiBwdHIsIENvcGllZEJsb2Nr
KiYgcmVzdWx0KQpAQCAtOTIsNiArOTMsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGlu
SWZOZWNlc3NhcnkoCiAgICAgICAgIHBpbihibG9jayk7CiB9CiAKK3RlbXBsYXRlIDxIZWFwT3Bl
cmF0aW9uIGNvbGxlY3Rpb25UeXBlPgogaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVF
dmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsK
QEAgLTEwMCw3ICsxMDIsMTAgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVFdmFj
dWF0ZQogICAgIHsKICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2Nr
KTsKICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOwotICAgICAgICBtX2Zyb21TcGFj
ZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xs
ZWN0aW9uKQorICAgICAgICAgICAgbV9uZXdHZW4uZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX29sZEdlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9j
ayk7CiAgICAgfQogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGll
ZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiB9CkBAIC0xNDEsOCArMTQ2LDggQEAgaW5saW5lIHZv
aWQgQ29waWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQogICAgIAogICAgIENvcGllZEJsb2NrKiBi
bG9jayA9IENvcGllZEJsb2NrOjpjcmVhdGUobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9j
YXRlPENvcGllZEJsb2NrPigpKTsKICAgICAgICAgCi0gICAgbV90b1NwYWNlLT5wdXNoKGJsb2Nr
KTsKLSAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7
CisgICAgbV9uZXdHZW4udG9TcGFjZS0+cHVzaChibG9jayk7CisgICAgbV9uZXdHZW4uYmxvY2tG
aWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICBtX2Jsb2NrU2V0
LmFkZChibG9jayk7CiAgICAgbV9hbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKIH0K
QEAgLTE3NCw2ICsxNzksODcgQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6Ymxv
Y2tGbwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVpbnRlcnBy
ZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBzX2Jsb2NrTWFzayk7CiB9CiAKK3RlbXBsYXRlIDxIZWFw
T3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgoraW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0
ZWRDb3B5aW5nKCkKK3sKKyAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogdG9TcGFj
ZSwgKmZyb21TcGFjZSwgKm92ZXJzaXplQmxvY2tzOworICAgIFRpbnlCbG9vbUZpbHRlciogYmxv
Y2tGaWx0ZXI7CisgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uKSB7Cisg
ICAgICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgICAgIEFT
U0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisKKyAgICAgICAgbV9vbGRHZW4u
dG9TcGFjZS0+YXBwZW5kKCptX25ld0dlbi50b1NwYWNlKTsKKyAgICAgICAgbV9vbGRHZW4ub3Zl
cnNpemVCbG9ja3MuYXBwZW5kKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzKTsKKworICAgICAgICBB
U1NFUlQobV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1fbmV3
R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1fbmV3R2VuLm92ZXJz
aXplQmxvY2tzLmlzRW1wdHkoKSk7CisKKyAgICAgICAgc3RkOjpzd2FwKG1fb2xkR2VuLmZyb21T
cGFjZSwgbV9vbGRHZW4udG9TcGFjZSk7CisgICAgICAgIHRvU3BhY2UgPSBtX29sZEdlbi50b1Nw
YWNlOworICAgICAgICBmcm9tU3BhY2UgPSBtX29sZEdlbi5mcm9tU3BhY2U7CisgICAgICAgIG92
ZXJzaXplQmxvY2tzID0gJm1fb2xkR2VuLm92ZXJzaXplQmxvY2tzOworICAgICAgICBibG9ja0Zp
bHRlciA9ICZtX29sZEdlbi5ibG9ja0ZpbHRlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6
OnN3YXAobV9uZXdHZW4uZnJvbVNwYWNlLCBtX25ld0dlbi50b1NwYWNlKTsKKyAgICAgICAgdG9T
cGFjZSA9IG1fbmV3R2VuLnRvU3BhY2U7CisgICAgICAgIGZyb21TcGFjZSA9IG1fbmV3R2VuLmZy
b21TcGFjZTsKKyAgICAgICAgb3ZlcnNpemVCbG9ja3MgPSAmbV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3M7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fbmV3R2VuLmJsb2NrRmlsdGVyOworICAgIH0K
KworICAgIGJsb2NrRmlsdGVyLT5yZXNldCgpOworICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVu
dEJsb2NrKCk7CisKKyAgICBDb3BpZWRCbG9jayogbmV4dCA9IDA7CisgICAgc2l6ZV90IHRvdGFs
TGl2ZUJ5dGVzID0gMDsKKyAgICBzaXplX3QgdG90YWxVc2FibGVCeXRlcyA9IDA7CisgICAgLy8g
VE9ETzogTWFrZSBzdXJlIHdlIGFjY3VyYXRlbHkga2VlcCB0cmFjayBvZiB0aGUgdG90YWwgbGl2
ZSBieXRlcyBmb3IgRWRlbkNvbGxlY3Rpb25zLgorICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2Nr
ID0gZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgbmV4
dCA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgIGlmICghYmxvY2stPmlzUGlubmVkKCkgJiYgYmxv
Y2stPmNhbkJlUmVjeWNsZWQoKSkgeworICAgICAgICAgICAgcmVjeWNsZUV2YWN1YXRlZEJsb2Nr
PGNvbGxlY3Rpb25UeXBlPihibG9jayk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQoYmxvY2stPmxpdmVCeXRlcygpIDw9IENvcGllZEJsb2NrOjpibG9j
a1NpemUpOworICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+bGl2ZUJ5dGVzKCk7Cisg
ICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOworICAg
ICAgICBibG9jay0+ZGlkUHJvbW90ZSgpOworICAgIH0KKworICAgIENvcGllZEJsb2NrKiBibG9j
ayA9IG92ZXJzaXplQmxvY2tzLT5oZWFkKCk7CisgICAgd2hpbGUgKGJsb2NrKSB7CisgICAgICAg
IENvcGllZEJsb2NrKiBuZXh0ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYgKGJsb2NrLT5p
c1Bpbm5lZCgpKSB7CisgICAgICAgICAgICBibG9ja0ZpbHRlci0+YWRkKHJlaW50ZXJwcmV0X2Nh
c3Q8Qml0cz4oYmxvY2spKTsKKyAgICAgICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9IGJsb2NrLT5w
YXlsb2FkQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2st
PnBheWxvYWRDYXBhY2l0eSgpOworICAgICAgICAgICAgYmxvY2stPmRpZFByb21vdGUoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG92ZXJzaXplQmxvY2tzLT5yZW1vdmUoYmxvY2sp
OworICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICAgICAgbV9o
ZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpk
ZXN0cm95KGJsb2NrKSk7CisgICAgICAgIH0gCisgICAgICAgIGJsb2NrID0gbmV4dDsKKyAgICB9
CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5j
YXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0b3Rh
bExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVCeXRl
cyArIG1hcmtlZFNwYWNlQnl0ZXMpOworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSBtX2hlYXAt
Pm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiB8fCB0b3RhbEZyYWdtZW50
YXRpb24gPD0gT3B0aW9uczo6bWluSGVhcFV0aWxpemF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3Vs
ZERvQ29weVBoYXNlKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAg
ICAgZGF0YUxvZygiU2tpcHBlZCBjb3B5aW5nLCAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBkYXRhTG9nRigiRGlkIGNvcHks
ICIpOworICAgIEFTU0VSVChtX3Nob3VsZERvQ29weVBoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVt
YmVyT2ZMb2FuZWRCbG9ja3MpOworICAgIEFTU0VSVCghbV9pbkNvcHlpbmdQaGFzZSk7CisgICAg
bV9pbkNvcHlpbmdQaGFzZSA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gQ29waWVkU3BhY2VJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDE2MTY3OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
MTAgQEAgdm9pZCBDb3B5VmlzaXRvcjo6Y29weUZyb21TaGFyZWQoKQogICAgICAgICAgICAgICAg
IHZpc2l0SXRlbSgqaXQpOwogCiAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMo
KSk7Ci0gICAgICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVk
QmxvY2soYmxvY2spOworICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fdm0tPmhlYXAub3BlcmF0
aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKQorICAgICAgICAgICAgICAgIG1fc2hh
cmVkLm1fY29waWVkU3BhY2UtPnJlY3ljbGVFdmFjdWF0ZWRCbG9jazxFZGVuQ29sbGVjdGlvbj4o
YmxvY2spOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fY29w
aWVkU3BhY2UtPnJlY3ljbGVFdmFjdWF0ZWRCbG9jazxGdWxsQ29sbGVjdGlvbj4oYmxvY2spOwog
ICAgICAgICB9CiAgICAgICAgIG1fc2hhcmVkLmdldE5leHRCbG9ja3NUb0NvcHkobmV4dCwgZW5k
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5Vmlz
aXRvcklubGluZXMuaAkocmV2aXNpb24gMTYxNjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcg
QEAgaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDbwogaW5saW5lIHZvaWQq
IENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKIHsKICAgICB2b2lk
KiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBi
ZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRl
KGJ5dGVzLCAmcmVzdWx0KSkpCisgICAgaWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlB
bGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0ZXMsICZyZXN1bHQpKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAKICAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7CkBA
IC03MCw3ICs3MCw3IEBAIGlubGluZSB2b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGEK
ICAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOwogCiAgICAg
dm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3Bp
ZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIENoZWNrZWRCb29s
ZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZUR1cmluZ0NvcHlp
bmcoYnl0ZXMsICZyZXN1bHQpOwogICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1Ro
cmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxNjE2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
NyArMTgxLDMzIEBAIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydENvcHlpbmcKIHsK
ICAgICB7CiAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7Ci0gICAg
ICAgIFdURjo6Y29weVRvVmVjdG9yKG1fY29waWVkU3BhY2UtPm1fYmxvY2tTZXQsIG1fYmxvY2tz
VG9Db3B5KTsKKyAgICAgICAgaWYgKG1fdm0tPmhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpID09
IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAg
ICAgICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBtX2NvcGllZFNwYWNlLT5tX25ld0dlbi5mcm9t
U3BhY2UtPmhlYWQoKTsKKyAgICAgICAgICAgIC8vIEZpcnN0IHdlIGZpbGwgdXAgdGhlIHByZS1l
eGlzdGluZyBzcGFjZSBpbiB0aGUgdmVjdG9yLgorICAgICAgICAgICAgd2hpbGUgKGJsb2NrKSB7
CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fYmxvY2tzVG9Db3B5LnNpemUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb0NvcHlb
aW5kZXgrK10gPSBibG9jazsgCisgICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+bmV4dCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIG1vcmUgYmxv
Y2tzIGluIHRoZSBsaW5rZWQgbGlzdCB3ZSByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHZlY3RvciAK
KyAgICAgICAgICAgIC8vIHRvIHRoZSBzaXplIG9mIHRoZSBsaW5rZWQgbGlzdC4gV2UgZG8gdGhl
IHJlc2l6ZSBoZXJlIGluc3RlYWQgb2YgYXQgdGhlIHZlcnkgCisgICAgICAgICAgICAvLyBiZWdp
bm5pbmcgYmVjYXVzZSBpdCdzIE8obikgdG8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIGxpbmtlZCBs
aXN0IG9mIGJsb2Nrcy4KKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
bV9ibG9ja3NUb0NvcHkucmVzaXplKGluZGV4KTsKKworICAgICAgICAgICAgLy8gSWYgd2UgZXho
YXVzdGVkIHRoZSBwcmUtZXhpc3Rpbmcgc3BhY2UgaW4gdGhlIHZlY3RvciBhbmQgaGF2ZSBtb3Jl
IGJsb2NrcyB0aGVuIHN0YXJ0CisgICAgICAgICAgICAvLyBhcHBlbmRpbmcgdG8gdGhlIGVuZCBv
ZiB0aGUgdmVjdG9yLgorICAgICAgICAgICAgd2hpbGUgKGJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgbV9ibG9ja3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBibG9jayA9
IGJsb2NrLT5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQobV92bS0+aGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxl
Y3Rpb24pOworICAgICAgICAgICAgV1RGOjpjb3B5VG9WZWN0b3IobV9jb3BpZWRTcGFjZS0+bV9i
bG9ja1NldCwgbV9ibG9ja3NUb0NvcHkpOworICAgICAgICB9CiAgICAgICAgIG1fY29weUluZGV4
ID0gMDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiAxNjE2NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjM3LDEwICs2MzcsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiB0
ZW1wbGF0ZSA8SGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZT4KIHZvaWQgSGVhcDo6Y29weUJh
Y2tpbmdTdG9yZXMoKQogewotICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29sbGVjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRlZENvcHlpbmco
KTsKKyAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZzxjb2xsZWN0aW9uVHlwZT4oKTsK
ICAgICBpZiAobV9zdG9yYWdlU3BhY2Uuc2hvdWxkRG9Db3B5UGhhc2UoKSkgewogICAgICAgICBt
X3NoYXJlZERhdGEuZGlkU3RhcnRDb3B5aW5nKCk7CiAgICAgICAgIG1fY29weVZpc2l0b3Iuc3Rh
cnRDb3B5aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTYxNjc5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxMCAr
MjI2LDkgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKAogaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9r
ZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7Ci0gICAg
Ly8gV2UgZG9uJ3QgZG8gYW55IGNvcHlpbmcgZHVyaW5nIEVkZW5Db2xsZWN0aW9ucy4KLSAgICBB
U1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgIT0gRWRlbkNvbGxlY3Rpb24pOwot
Ci0gICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKKyAgICBib29sIGlzUmVtZW1iZXJlZCA9IGhl
YXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uICYmIE1hcmtlZEJs
b2NrOjpibG9ja0Zvcihvd25lciktPmlzUmVtZW1iZXJlZChvd25lcik7CisgICAgaWYgKCFpc1Jl
bWVtYmVyZWQpCisgICAgICAgIG1fYnl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAKICAgICBDb3BpZWRC
bG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKICAgICBpZiAoYmxvY2st
PmlzT3ZlcnNpemUoKSkgewpAQCAtMjM3LDcgKzIzNiw3IEBAIGlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjpjb3B5TGF0ZXIoSlNDZWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJsb2Nr
LT5yZXBvcnRMaXZlQnl0ZXMob3duZXIsIHRva2VuLCBieXRlcyk7CisgICAgYmxvY2stPnJlcG9y
dExpdmVCeXRlcyhvd25lciwgaXNSZW1lbWJlcmVkLCB0b2tlbiwgYnl0ZXMpOwogfQogICAgIAog
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UoSlNDZWxsKiBv
d25lciwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaW55
Qmxvb21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9U
aW55Qmxvb21GaWx0ZXIuaAkocmV2aXNpb24gMTYxNjc5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVGlueUJsb29tRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAgcHVibGljOgogICAgIFRpbnlCbG9vbUZpbHRlcigpOwogCiAgICAgdm9pZCBhZGQoQml0cyk7
CisgICAgdm9pZCBhZGQoVGlueUJsb29tRmlsdGVyJik7CiAgICAgYm9vbCBydWxlT3V0KEJpdHMp
IGNvbnN0OyAvLyBUcnVlIGZvciAwLgogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtNTIsNiArNTMs
MTEgQEAgaW5saW5lIHZvaWQgVGlueUJsb29tRmlsdGVyOjphZGQoQml0cyBiaQogICAgIG1fYml0
cyB8PSBiaXRzOwogfQogCitpbmxpbmUgdm9pZCBUaW55Qmxvb21GaWx0ZXI6OmFkZChUaW55Qmxv
b21GaWx0ZXImIG90aGVyKQoreworICAgIG1fYml0cyB8PSBvdGhlci5tX2JpdHM7Cit9CisKIGlu
bGluZSBib29sIFRpbnlCbG9vbUZpbHRlcjo6cnVsZU91dChCaXRzIGJpdHMpIGNvbnN0CiB7CiAg
ICAgaWYgKCFiaXRzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221167</attachid>
            <date>2014-01-14 09:02:19 -0800</date>
            <delta_ts>2014-01-14 12:52:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126555-20140114090217.patch</filename>
            <type>text/plain</type>
            <size>33031</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxOTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDE0LTAxLTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29weWluZyBzaG91bGQgYmUgZ2VuZXJhdGlvbmFsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY1NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBm
b3IgY29weWluZyB0byBvdXIgZ2VuZXJhdGlvbmFsIGNvbGxlY3Rvci4gRWRlbiBjb2xsZWN0aW9u
cyAKKyAgICAgICAgYWx3YXlzIHRyaWdnZXIgY29weWluZy4gRnVsbCBjb2xsZWN0aW9ucyB1c2Ug
b3VyIG5vcm1hbCBmcmFnbWVudGF0aW9uLWJhc2VkIGhldXJpc3RpY3MuCisKKyAgICAgICAgVGhl
IHdheSB0aGlzIHdvcmtzIGlzIHRoYXQgdGhlIENvcGllZFNwYWNlIG5vdyBoYXMgdGhlIG5vdGlv
biBvZiBhbiBvbGQgZ2VuZXJhdGlvbiBzZXQgb2YgQ29waWVkQmxvY2tzCisgICAgICAgIGFuZCBh
IG5ldyBnZW5lcmF0aW9uIG9mIENvcGllZEJsb2Nrcy4gRHVyaW5nIGVhY2ggbXV0YXRvciBjeWNs
ZSBuZXcgQ29waWVkU3BhY2UgYWxsb2NhdGlvbnMgcmVzaWRlCisgICAgICAgIGluIHRoZSBuZXcg
Z2VuZXJhdGlvbi4gV2hlbiBhIGNvbGxlY3Rpb24gb2NjdXJzLCB0aG9zZSBibG9ja3MgYXJlIG1v
dmVkIHRvIHRoZSBvbGQgZ2VuZXJhdGlvbi4KKworICAgICAgICBPbmUga2V5IHRoaW5nIHRvIHJl
bWVtYmVyIGlzIHRoYXQgYm90aCBuZXcgYW5kIG9sZCBnZW5lcmF0aW9uIG9iamVjdHMgaW4gdGhl
IE1hcmtlZFNwYWNlIGNhbgorICAgICAgICByZWZlciB0byBvbGQgb3IgbmV3IGdlbmVyYXRpb24g
YWxsb2NhdGlvbnMgaW4gQ29waWVkU3BhY2UuIFRoaXMgaXMgd2h5IHdlIG11c3QgZmlyZSB3cml0
ZSBiYXJyaWVycyAKKyAgICAgICAgd2hlbiBhc3NpZ25pbmcgdG8gYW4gb2xkIChNYXJrZWRTcGFj
ZSkgb2JqZWN0J3MgQnV0dGVyZmx5LgorCisgICAgICAgICogaGVhcC9Db3BpZWRBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUR1cmluZ0NvcHlp
bmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29waWVk
QmxvY2s6OkNvcGllZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRpZEV2YWN1
YXRlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6aXNPbGQpOgorICAgICAgICAo
SlNDOjpDb3BpZWRCbG9jazo6ZGlkUHJvbW90ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9j
a0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5n
KToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OkNvcGllZFNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6On5Db3BpZWRT
cGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjppbml0KToKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRG
dWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OmNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmlzUGFnZWRPdXQp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpjb250YWlu
cyk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3B5VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJlZCk6CisgICAg
ICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0
b3I6OmFsbG9jYXRlTmV3U3BhY2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2Nh
dGVOZXdTcGFjZVNsb3cpOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydENvcHlpbmcpOgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3Rv
cmVzKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAgICAgKiBoZWFwL1RpbnlCbG9vbUZpbHRl
ci5oOgorICAgICAgICAoSlNDOjpUaW55Qmxvb21GaWx0ZXI6OmFkZCk6CisKIDIwMTQtMDEtMTQg
IFBldGVyIE1vbG5hciAgPHBtb2xuYXIudS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXSBGVEwgYnVpbGRmaXgsIGFkZCBtaXNzaW5nIGluY2x1ZGVzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaAkocmV2aXNpb24g
MTYxOTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
ZmFzdFBhdGhTaG91bGRTdWNjZWVkKHNpemVfdCBieXRlcykgY29uc3Q7CiAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKTsKKyAgICBDaGVj
a2VkQm9vbGVhbiB0cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoc2l6ZV90IGJ5dGVzLCB2b2lkKiog
b3V0UHRyKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlKHZvaWQgKm9sZFB0ciwg
c2l6ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpOwogICAgIHZvaWQqIGZvcmNlQWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKTsKICAgICBDb3BpZWRCbG9jayogcmVzZXRDdXJyZW50QmxvY2soKTsK
QEAgLTkzLDYgKzk0LDE0IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6
OnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGVEdXJpbmdDb3B5aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91
dFB0cikKK3sKKyAgICBpZiAoIXRyeUFsbG9jYXRlKGJ5dGVzLCBvdXRQdHIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV9jdXJyZW50QmxvY2stPnJlcG9ydExpdmVCeXRlc0R1cmluZ0Nv
cHlpbmcoYnl0ZXMpOworICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgQ2hlY2tlZEJvb2xl
YW4gQ29waWVkQWxsb2NhdG9yOjp0cnlSZWFsbG9jYXRlKAogICAgIHZvaWQqIG9sZFB0ciwgc2l6
ZV90IG9sZEJ5dGVzLCBzaXplX3QgbmV3Qnl0ZXMpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDE2MTk3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEwICs0
OSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwaW4oKTsKICAgICBib29sIGlzUGlubmVkKCk7CiAK
KyAgICBib29sIGlzT2xkKCk7CiAgICAgYm9vbCBpc092ZXJzaXplKCk7CisgICAgdm9pZCBkaWRQ
cm9tb3RlKCk7CiAKICAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKLSAgICB2b2lkIHJlcG9ydExp
dmVCeXRlcyhKU0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKKyAgICBib29sIHNob3VsZFJl
cG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIpOworICAgIHZvaWQg
cmVwb3J0TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNp
Z25lZCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsK
ICAgICB2b2lkIGRpZFN1cnZpdmVHQygpOwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNp
Z25lZCk7CiAgICAgYm9vbCBzaG91bGRFdmFjdWF0ZSgpOwpAQCAtODEsNiArODUsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc1dvcmtMaXN0KCk7CiAgICAgQ29weVdvcmtMaXN0JiB3b3JrTGlz
dCgpOworICAgIFNwaW5Mb2NrJiB3b3JrTGlzdExvY2soKSB7IHJldHVybiBtX3dvcmtMaXN0TG9j
azsgfQogCiBwcml2YXRlOgogICAgIENvcGllZEJsb2NrKFJlZ2lvbiopOwpAQCAtODgsMTMgKzkz
LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotI2lmIEVO
QUJMRShQQVJBTExFTF9HQykKICAgICBTcGluTG9jayBtX3dvcmtMaXN0TG9jazsKLSNlbmRpZgog
ICAgIE93blB0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1h
aW5pbmc7Ci0gICAgdWludHB0cl90IG1faXNQaW5uZWQ7CisgICAgYm9vbCBtX2lzUGlubmVkIDog
MTsKKyAgICBib29sIG1faXNPbGQgOiAxOwogICAgIHVuc2lnbmVkIG1fbGl2ZUJ5dGVzOwogI2lm
bmRlZiBOREVCVUcKICAgICB1bnNpZ25lZCBtX2xpdmVPYmplY3RzOwpAQCAtMTMwLDE0ICsxMzQs
MTMgQEAgaW5saW5lIENvcGllZEJsb2NrOjpDb3BpZWRCbG9jayhSZWdpb24qIAogICAgIDogSGVh
cEJsb2NrPENvcGllZEJsb2NrPihyZWdpb24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2Fw
YWNpdHkoKSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBtX2lzT2xkKGZhbHNlKQog
ICAgICwgbV9saXZlQnl0ZXMoMCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2xpdmVPYmplY3Rz
KDApCiAjZW5kaWYKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgbV93b3JrTGlzdExv
Y2suSW5pdCgpOwotI2VuZGlmCiAgICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVkKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KG1fcmVtYWluaW5nKSkpOwogfQogCkBAIC0xNTYsNiArMTU5LDcgQEAgaW5s
aW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFN1cnZpdmVHQygpCiBpbmxpbmUgdm9pZCBDb3BpZWRC
bG9jazo6ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKIHsKICAgICBBU1NFUlQobV9s
aXZlQnl0ZXMgPj0gYnl0ZXMpOworICAgIEFTU0VSVChtX2xpdmVPYmplY3RzKTsKICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgbV9saXZlQnl0ZXMgLT0gYnl0ZXM7CiAjaWZuZGVmIE5ERUJV
RwpAQCAtMTg4LDYgKzE5MiwxNiBAQCBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQo
KQogICAgIHJldHVybiBtX2lzUGlubmVkOwogfQogCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6
aXNPbGQoKQoreworICAgIHJldHVybiBtX2lzT2xkOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRC
bG9jazo6ZGlkUHJvbW90ZSgpCit7CisgICAgbV9pc09sZCA9IHRydWU7Cit9CisKIGlubGluZSBi
b29sIENvcGllZEJsb2NrOjppc092ZXJzaXplKCkKIHsKICAgICByZXR1cm4gcmVnaW9uKCktPmlz
Q3VzdG9tU2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxv
Y2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE2MTk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMSAr
MjYsMzMgQEAKICNpZm5kZWYgQ29waWVkQmxvY2tJbmxpbmVzX2gKICNkZWZpbmUgQ29waWVkQmxv
Y2tJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvcGllZEJs
b2NrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogICAgIAotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVC
eXRlcyhKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQoraW5s
aW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRl
ciYsIEpTQ2VsbCogb3duZXIpCit7CisgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRl
cyBpZiB0aGUgb3duZXIgaXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKKyAgICAv
LyBpZiB0aGlzIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKKyAg
ICAvLyBJZiB3ZSBhbHdheXMgYWRkZWQgbGl2ZSBieXRlcyB3ZSB3b3VsZCBkb3VibGUgY291bnQg
Zm9yIGVsZW1lbnRzIGluIHRoZSByZW1lbWJlcmVkCisgICAgLy8gc2V0IGFjcm9zcyBjb2xsZWN0
aW9ucy4gCisgICAgLy8gSWYgd2UgZGlkbid0IGFsd2F5cyBhZGQgbGl2ZSBieXRlcyB0byBuZXcg
YmxvY2tzLCB3ZSdkIGdldCB0b28gZmV3LgorICAgIGJvb2wgb3duZXJJc1JlbWVtYmVyZWQgPSBN
YXJrZWRCbG9jazo6YmxvY2tGb3Iob3duZXIpLT5pc1JlbWVtYmVyZWQob3duZXIpOworICAgIHJl
dHVybiAhb3duZXJJc1JlbWVtYmVyZWQgfHwgIW1faXNPbGQ7Cit9CisKK2lubGluZSB2b2lkIENv
cGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVy
LCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQogewotI2lmIEVOQUJMRShQQVJBTExF
TF9HQykKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fd29ya0xpc3RMb2NrKTsKLSNlbmRp
ZgotI2lmbmRlZiBOREVCVUcKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisjaWZuZGVmIE5ERUJV
RwogICAgIG1fbGl2ZU9iamVjdHMrKzsKICNlbmRpZgogICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVz
OworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29w
aWVkQmxvY2s6OmJsb2NrU2l6ZSk7CiAKICAgICBpZiAoaXNQaW5uZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNTYsNiArNjgsMTkgQEAgaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExp
dmVCeXRlcwogICAgIG1fd29ya0xpc3QtPmFwcGVuZChDb3B5V29ya2xpc3RJdGVtKG93bmVyLCB0
b2tlbikpOwogfQogCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzRHVy
aW5nQ29weWluZyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7Cisg
ICAgLy8gVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgbG9ja2VkIGJlY2F1c2UgdGhlIHRocmVhZCB0
aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gb3ducyB0aGUgY3VycmVudCBibG9jay4KKyAgICBtX2lz
T2xkID0gdHJ1ZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9saXZlT2JqZWN0cysrOworI2VuZGlm
CisgICAgbV9saXZlQnl0ZXMgKz0gYnl0ZXM7CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
IEFTU0VSVChtX2xpdmVCeXRlcyA8PSBDb3BpZWRCbG9jazo6YmxvY2tTaXplKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBDb3BpZWRCbG9ja0lubGluZXNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTYx
OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw4ICszNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBDb3BpZWRTcGFj
ZTo6Q29waWVkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1faGVhcChoZWFwKQotICAgICwgbV90
b1NwYWNlKDApCi0gICAgLCBtX2Zyb21TcGFjZSgwKQogICAgICwgbV9pbkNvcHlpbmdQaGFzZShm
YWxzZSkKICAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9m
TG9hbmVkQmxvY2tzKDApCkBAIC00NiwyMSArNDQsNDAgQEAgQ29waWVkU3BhY2U6OkNvcGllZFNw
YWNlKEhlYXAqIGhlYXApCiAKIENvcGllZFNwYWNlOjp+Q29waWVkU3BhY2UoKQogewotICAgIHdo
aWxlICghbV90b1NwYWNlLT5pc0VtcHR5KCkpCi0gICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0
b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fdG9TcGFjZS0+cmVtb3ZlSGVh
ZCgpKSk7CisgICAgd2hpbGUgKCFtX29sZEdlbi50b1NwYWNlLT5pc0VtcHR5KCkpCisgICAgICAg
IG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95
KG1fb2xkR2VuLnRvU3BhY2UtPnJlbW92ZUhlYWQoKSkpOwogCi0gICAgd2hpbGUgKCFtX2Zyb21T
cGFjZS0+aXNFbXB0eSgpKQotICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxv
Y2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX2Zyb21TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7Cisg
ICAgd2hpbGUgKCFtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSkKKyAgICAgICAgbV9oZWFw
LT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRH
ZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCkpKTsKIAotICAgIHdoaWxlICghbV9vdmVyc2l6ZUJs
b2Nrcy5pc0VtcHR5KCkpCi0gICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9j
YXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX292ZXJzaXplQmxvY2tzLnJlbW92
ZUhlYWQoKSkpOworICAgIHdoaWxlICghbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgp
KQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUo
Q29waWVkQmxvY2s6OmRlc3Ryb3kobV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MucmVtb3ZlSGVhZCgp
KSk7CisKKyAgICB3aGlsZSAoIW1fbmV3R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSkKKyAgICAgICAg
bV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3ko
bV9uZXdHZW4udG9TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CisKKyAgICB3aGlsZSAoIW1fbmV3R2Vu
LmZyb21TcGFjZS0+aXNFbXB0eSgpKQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCku
ZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92
ZUhlYWQoKSkpOworCisgICAgd2hpbGUgKCFtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5
KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6
ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFk
KCkpKTsKKworICAgIEFTU0VSVChtX29sZEdlbi50b1NwYWNlLT5pc0VtcHR5KCkpOworICAgIEFT
U0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fb2xkR2Vu
Lm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLnRvU3BhY2Ut
PmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKIH0KIAogdm9p
ZCBDb3BpZWRTcGFjZTo6aW5pdCgpCiB7Ci0gICAgbV90b1NwYWNlID0gJm1fYmxvY2tzMTsKLSAg
ICBtX2Zyb21TcGFjZSA9ICZtX2Jsb2NrczI7CisgICAgbV9vbGRHZW4udG9TcGFjZSA9ICZtX29s
ZEdlbi5ibG9ja3MxOworICAgIG1fb2xkR2VuLmZyb21TcGFjZSA9ICZtX29sZEdlbi5ibG9ja3My
OwogICAgIAorICAgIG1fbmV3R2VuLnRvU3BhY2UgPSAmbV9uZXdHZW4uYmxvY2tzMTsKKyAgICBt
X25ld0dlbi5mcm9tU3BhY2UgPSAmbV9uZXdHZW4uYmxvY2tzMjsKKwogICAgIGFsbG9jYXRlQmxv
Y2soKTsKIH0gICAKIApAQCAtODMsOSArMTAwLDEwIEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNw
YWNlOjp0cnlBbGxvY2F0ZU8KICAgICBBU1NFUlQoaXNPdmVyc2l6ZShieXRlcykpOwogICAgIAog
ICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZEJsb2NrOjpjcmVhdGUobV9oZWFwLT5ibG9j
a0FsbG9jYXRvcigpLmFsbG9jYXRlQ3VzdG9tU2l6ZShzaXplb2YoQ29waWVkQmxvY2spICsgYnl0
ZXMsIENvcGllZEJsb2NrOjpibG9ja1NpemUpKTsKLSAgICBtX292ZXJzaXplQmxvY2tzLnB1c2go
YmxvY2spOwotICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKTsKKyAgICBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5wdXNoKGJsb2NrKTsKKyAgICBtX25l
d0dlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwogICAg
IG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc09sZCgpKTsKICAg
ICAKICAgICBDb3BpZWRBbGxvY2F0b3IgYWxsb2NhdG9yOwogICAgIGFsbG9jYXRvci5zZXRDdXJy
ZW50QmxvY2soYmxvY2spOwpAQCAtMTM4LDcgKzE1NiwxMCBAQCBDaGVja2VkQm9vbGVhbiBDb3Bp
ZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAKICAgICBDb3BpZWRCbG9jayogb2xkQmxvY2sgPSBDb3Bp
ZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKICAgICBpZiAob2xkQmxvY2stPmlzT3ZlcnNpemUo
KSkgewotICAgICAgICBtX292ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7CisgICAgICAg
IGlmIChvbGRCbG9jay0+aXNPbGQoKSkKKyAgICAgICAgICAgIG1fb2xkR2VuLm92ZXJzaXplQmxv
Y2tzLnJlbW92ZShvbGRCbG9jayk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmV3R2Vu
Lm92ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVt
b3ZlKG9sZEJsb2NrKTsKICAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2Nh
dGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpkZXN0cm95KG9sZEJsb2NrKSk7CiAgICAgfQpAQCAt
MTY1LDEwICsxODYsMTEgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3Bp
ZQogICAgIGJsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsKIAogICAgIHsKKyAgICAgICAgLy8g
QWx3YXlzIHB1dCB0aGUgYmxvY2sgaW50byB0aGUgb2xkIGdlbiBiZWNhdXNlIGl0J3MgYmVpbmcg
cHJvbW90ZWQhCiAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7
Ci0gICAgICAgIG1fdG9TcGFjZS0+cHVzaChibG9jayk7CisgICAgICAgIG1fb2xkR2VuLnRvU3Bh
Y2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7Ci0gICAgICAg
IG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICAg
ICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2sp
KTsKICAgICB9CiAKICAgICB7CkBAIC0xODEsNTIgKzIwMywyNSBAQCB2b2lkIENvcGllZFNwYWNl
Ojpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAgICAgfQogfQogCi12b2lkIENvcGllZFNwYWNlOjpz
dGFydGVkQ29weWluZygpCit2b2lkIENvcGllZFNwYWNlOjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9u
KCkKIHsKLSAgICBzdGQ6OnN3YXAobV9mcm9tU3BhY2UsIG1fdG9TcGFjZSk7Ci0KLSAgICBtX2Js
b2NrRmlsdGVyLnJlc2V0KCk7Ci0gICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsK
KyAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rp
b24pOworICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKIAotICAgIENvcGllZEJsb2NrKiBu
ZXh0ID0gMDsKLSAgICBzaXplX3QgdG90YWxMaXZlQnl0ZXMgPSAwOwotICAgIHNpemVfdCB0b3Rh
bFVzYWJsZUJ5dGVzID0gMDsKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNw
YWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IGJsb2Nr
LT5uZXh0KCk7Ci0gICAgICAgIGlmICghYmxvY2stPmlzUGlubmVkKCkgJiYgYmxvY2stPmNhbkJl
UmVjeWNsZWQoKSkgewotICAgICAgICAgICAgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHRvdGFsTGl2ZUJ5dGVz
ICs9IGJsb2NrLT5saXZlQnl0ZXMoKTsKLSAgICAgICAgdG90YWxVc2FibGVCeXRlcyArPSBibG9j
ay0+cGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBmb3IgKENv
cGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2Nr
ID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgQVNTRVJUKCFibG9jay0+bGl2ZUJ5dGVzKCkpOwor
CisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5o
ZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIEFTU0VSVCghYmxv
Y2stPmxpdmVCeXRlcygpKTsKKyNlbmRpZgogCi0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9v
dmVyc2l6ZUJsb2Nrcy5oZWFkKCk7Ci0gICAgd2hpbGUgKGJsb2NrKSB7Ci0gICAgICAgIENvcGll
ZEJsb2NrKiBuZXh0ID0gYmxvY2stPm5leHQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5pc1Bpbm5l
ZCgpKSB7Ci0gICAgICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJp
dHM+KGJsb2NrKSk7Ci0gICAgICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+cGF5bG9h
ZENhcGFjaXR5KCk7Ci0gICAgICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXls
b2FkQ2FwYWNpdHkoKTsKLSAgICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGJsb2NrKTsK
LSAgICAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIG1faGVh
cC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVz
dHJveShibG9jaykpOwotICAgICAgICB9IAotICAgICAgICBibG9jayA9IG5leHQ7Ci0gICAgfQot
Ci0gICAgZG91YmxlIG1hcmtlZFNwYWNlQnl0ZXMgPSBtX2hlYXAtPm9iamVjdFNwYWNlKCkuY2Fw
YWNpdHkoKTsKLSAgICBkb3VibGUgdG90YWxGcmFnbWVudGF0aW9uID0gKChkb3VibGUpdG90YWxM
aXZlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKSAvICgoZG91YmxlKXRvdGFsVXNhYmxlQnl0ZXMg
KyBtYXJrZWRTcGFjZUJ5dGVzKTsKLSAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gdG90YWxGcmFn
bWVudGF0aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBVdGlsaXphdGlvbigpOwotICAgIGlmICghbV9z
aG91bGREb0NvcHlQaGFzZSkKLSAgICAgICAgcmV0dXJuOworICAgIGZvciAoQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9vbGRHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+
bmV4dCgpKQorICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7CiAKLSAgICBBU1NFUlQobV9z
aG91bGREb0NvcHlQaGFzZSk7Ci0gICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBB
U1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0
cnVlOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9j
a3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBibG9jay0+
ZGlkU3Vydml2ZUdDKCk7CiB9CiAKIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKQEAg
LTI0MCwyMSArMjM1LDM5IEBAIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVDb3B5aW5nKCkKICAgICBB
U1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBtX3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2lu
Q29weWluZ1BoYXNlID0gZmFsc2U7CiAKLSAgICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5
KCkpIHsKLSAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhl
YWQoKTsKLSAgICAgICAgLy8gQWxsIG5vbi1waW5uZWQgYmxvY2tzIGluIGZyb20tc3BhY2Ugc2hv
dWxkIGhhdmUgYmVlbiByZWNsYWltZWQgYXMgdGhleSB3ZXJlIGV2YWN1YXRlZC4KLSAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc1Bpbm5lZCgpIHx8ICFtX3Nob3VsZERvQ29weVBoYXNlKTsKLSAgICAg
ICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOworICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxv
Y2s+KiB0b1NwYWNlOworICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3Bh
Y2U7CisgICAgVGlueUJsb29tRmlsdGVyKiBibG9ja0ZpbHRlcjsKKyAgICBpZiAoaGVhcCgpLT5v
cGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pIHsKKyAgICAgICAgdG9TcGFj
ZSA9IG1fb2xkR2VuLnRvU3BhY2U7CisgICAgICAgIGZyb21TcGFjZSA9IG1fb2xkR2VuLmZyb21T
cGFjZTsKKyAgICAgICAgYmxvY2tGaWx0ZXIgPSAmbV9vbGRHZW4uYmxvY2tGaWx0ZXI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdG9TcGFjZSA9IG1fbmV3R2VuLnRvU3BhY2U7CisgICAgICAgIGZy
b21TcGFjZSA9IG1fbmV3R2VuLmZyb21TcGFjZTsKKyAgICAgICAgYmxvY2tGaWx0ZXIgPSAmbV9u
ZXdHZW4uYmxvY2tGaWx0ZXI7CisgICAgfQorCisgICAgd2hpbGUgKCFmcm9tU3BhY2UtPmlzRW1w
dHkoKSkgeworICAgICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBmcm9tU3BhY2UtPnJlbW92ZUhl
YWQoKTsKICAgICAgICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSBibG9jayB0byB0aGUgYmxvY2tTZXQg
YmVjYXVzZSBpdCB3YXMgbmV2ZXIgcmVtb3ZlZC4KICAgICAgICAgQVNTRVJUKG1fYmxvY2tTZXQu
Y29udGFpbnMoYmxvY2spKTsKLSAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRf
Y2FzdDxCaXRzPihibG9jaykpOwotICAgICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOworICAg
ICAgICBibG9ja0ZpbHRlci0+YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAg
ICAgICAgdG9TcGFjZS0+cHVzaChibG9jayk7CisgICAgfQorCisgICAgaWYgKGhlYXAoKS0+b3Bl
cmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIG1fb2xkR2Vu
LnRvU3BhY2UtPmFwcGVuZCgqbV9uZXdHZW4udG9TcGFjZSk7CisgICAgICAgIG1fb2xkR2VuLm92
ZXJzaXplQmxvY2tzLmFwcGVuZChtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcyk7CisgICAgICAgIG1f
b2xkR2VuLmJsb2NrRmlsdGVyLmFkZChtX25ld0dlbi5ibG9ja0ZpbHRlcik7CisgICAgICAgIG1f
bmV3R2VuLmJsb2NrRmlsdGVyLnJlc2V0KCk7CiAgICAgfQogCi0gICAgaWYgKCFtX3RvU3BhY2Ut
PmhlYWQoKSkKLSAgICAgICAgYWxsb2NhdGVCbG9jaygpOwotICAgIGVsc2UKLSAgICAgICAgbV9h
bGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG1fdG9TcGFjZS0+aGVhZCgpKTsKKyAgICBBU1NFUlQo
bV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9uZXdHZW4uZnJvbVNw
YWNlLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5pc0Vt
cHR5KCkpOworCisgICAgYWxsb2NhdGVCbG9jaygpOwogCiAgICAgbV9zaG91bGREb0NvcHlQaGFz
ZSA9IGZhbHNlOwogfQpAQCAtMjYzLDEzICsyNzYsMjIgQEAgc2l6ZV90IENvcGllZFNwYWNlOjpz
aXplKCkKIHsKICAgICBzaXplX3QgY2FsY3VsYXRlZFNpemUgPSAwOwogCi0gICAgZm9yIChDb3Bp
ZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLnRvU3BhY2Ut
PmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRl
ZFNpemUgKz0gYmxvY2stPnNpemUoKTsKIAotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
bV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFjZS0+aGVhZCgpOyBibG9j
azsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkU2l6ZSArPSBibG9j
ay0+c2l6ZSgpOwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX292ZXJzaXplQmxv
Y2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICBmb3IgKENvcGll
ZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJs
b2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNp
emUoKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4udG9TcGFjZS0+
aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBjYWxjdWxhdGVk
U2l6ZSArPSBibG9jay0+c2l6ZSgpOworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBt
X25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkK
KyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKKworICAgIGZvciAoQ29w
aWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsg
YmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkU2l6ZSArPSBibG9jay0+
c2l6ZSgpOwogCiAgICAgcmV0dXJuIGNhbGN1bGF0ZWRTaXplOwpAQCAtMjc5LDEzICszMDEsMjIg
QEAgc2l6ZV90IENvcGllZFNwYWNlOjpjYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IGNhbGN1bGF0
ZWRDYXBhY2l0eSA9IDA7CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fdG9TcGFj
ZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZvciAoQ29waWVk
QmxvY2sqIGJsb2NrID0gbV9vbGRHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBi
bG9jay0+bmV4dCgpKQorICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFj
aXR5KCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLmZyb21TcGFj
ZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxh
dGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CiAKLSAgICBmb3IgKENvcGllZEJsb2Nr
KiBibG9jayA9IG1fZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0
KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nr
cy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0
ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsKIAotICAgIGZvciAoQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi50b1NwYWNlLT5o
ZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNhbGN1bGF0ZWRD
YXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJs
b2NrID0gbV9uZXdHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCisgICAgICAgIGNhbGN1bGF0ZWRDYXBhY2l0eSArPSBibG9jay0+Y2FwYWNpdHkoKTsK
KworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3Mu
aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVk
Q2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CiAKICAgICByZXR1cm4gY2FsY3VsYXRlZENh
cGFjaXR5OwpAQCAtMzExLDIyICszNDIsMTIgQEAgc3RhdGljIGJvb2wgaXNCbG9ja0xpc3RQYWdl
ZE91dChkb3VibGUgZAogCiBib29sIENvcGllZFNwYWNlOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFk
bGluZSkKIHsKLSAgICByZXR1cm4gaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV90b1Nw
YWNlKSAKLSAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9mcm9tU3Bh
Y2UpIAotICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vdmVyc2l6
ZUJsb2Nrcyk7Ci19Ci0KLXZvaWQgQ29waWVkU3BhY2U6OmRpZFN0YXJ0RnVsbENvbGxlY3Rpb24o
KQotewotICAgIEFTU0VSVChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29s
bGVjdGlvbik7Ci0KLSAgICBBU1NFUlQobV9mcm9tU3BhY2UtPmlzRW1wdHkoKSk7Ci0KLSAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fdG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sg
PSBibG9jay0+bmV4dCgpKQotICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7Ci0KLSAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsg
YmxvY2sgPSBibG9jay0+bmV4dCgpKQotICAgICAgICBibG9jay0+ZGlkU3Vydml2ZUdDKCk7Cisg
ICAgcmV0dXJuIGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fb2xkR2VuLnRvU3BhY2Up
IAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX29sZEdlbi5mcm9t
U3BhY2UpIAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCAmbV9vbGRH
ZW4ub3ZlcnNpemVCbG9ja3MpCisgICAgICAgIHx8IGlzQmxvY2tMaXN0UGFnZWRPdXQoZGVhZGxp
bmUsIG1fbmV3R2VuLnRvU3BhY2UpIAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRl
YWRsaW5lLCBtX25ld0dlbi5mcm9tU3BhY2UpIAorICAgICAgICB8fCBpc0Jsb2NrTGlzdFBhZ2Vk
T3V0KGRlYWRsaW5lLCAmbV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAko
cmV2aXNpb24gMTYxOTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29waWVk
QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCisjaW5jbHVkZSAiSGVhcE9wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRCb29sZWFuLmg+CkBAIC02Miw3ICs2Mywx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZFN0YXJ0RnVsbENvbGxlY3Rpb24oKTsKIAorICAg
IHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgogICAgIHZvaWQgc3RhcnRl
ZENvcHlpbmcoKTsKKyAgICB2b2lkIHN0YXJ0ZWRFZGVuQ29weSgpOworICAgIHZvaWQgc3RhcnRl
ZEZ1bGxDb3B5KCk7CiAgICAgdm9pZCBkb25lQ29weWluZygpOwogICAgIGJvb2wgaXNJbkNvcHlQ
aGFzZSgpIHsgcmV0dXJuIG1faW5Db3B5aW5nUGhhc2U7IH0KIApAQCAtOTUsMjQgKzk5LDM2IEBA
IHByaXZhdGU6CiAgICAgQ29waWVkQmxvY2sqIGFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2Uo
KTsKIAogICAgIHZvaWQgZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayosIENvcGllZEJsb2Nr
KiopOwotICAgIHZvaWQgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKik7CisgICAg
dm9pZCByZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqLCBIZWFwT3BlcmF0aW9uIGNv
bGxlY3Rpb25UeXBlKTsKICAgICB2b2lkIHJlY3ljbGVCb3Jyb3dlZEJsb2NrKENvcGllZEJsb2Nr
Kik7CiAKICAgICBIZWFwKiBtX2hlYXA7CiAKICAgICBDb3BpZWRBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7CiAKLSAgICBUaW55Qmxvb21GaWx0ZXIgbV9ibG9ja0ZpbHRlcjsKICAgICBIYXNoU2V0PENv
cGllZEJsb2NrKj4gbV9ibG9ja1NldDsKIAogICAgIFNwaW5Mb2NrIG1fdG9TcGFjZUxvY2s7CiAK
LSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogbV90b1NwYWNlOwotICAgIERvdWJs
eUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBtX2Zyb21TcGFjZTsKLSAgICAKLSAgICBEb3VibHlM
aW5rZWRMaXN0PENvcGllZEJsb2NrPiBtX2Jsb2NrczE7Ci0gICAgRG91Ymx5TGlua2VkTGlzdDxD
b3BpZWRCbG9jaz4gbV9ibG9ja3MyOwotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+
IG1fb3ZlcnNpemVCbG9ja3M7CisgICAgc3RydWN0IENvcGllZEdlbmVyYXRpb24geworICAgICAg
ICBDb3BpZWRHZW5lcmF0aW9uKCkKKyAgICAgICAgICAgIDogdG9TcGFjZSgwKQorICAgICAgICAg
ICAgLCBmcm9tU3BhY2UoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRG91Ymx5
TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIHRvU3BhY2U7CisgICAgICAgIERvdWJseUxpbmtlZExp
c3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7CisgICAgICAgIAorICAgICAgICBEb3VibHlMaW5r
ZWRMaXN0PENvcGllZEJsb2NrPiBibG9ja3MxOworICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENv
cGllZEJsb2NrPiBibG9ja3MyOworICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2Nr
PiBvdmVyc2l6ZUJsb2NrczsKKworICAgICAgICBUaW55Qmxvb21GaWx0ZXIgYmxvY2tGaWx0ZXI7
CisgICAgfTsKKworICAgIENvcGllZEdlbmVyYXRpb24gbV9vbGRHZW47CisgICAgQ29waWVkR2Vu
ZXJhdGlvbiBtX25ld0dlbjsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKICAgICBi
b29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkocmV2aXNpb24gMTYxOTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIENvcGllZFNw
YWNlOjpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2spCiB7Ci0gICAgcmV0dXJuICFtX2Jsb2Nr
RmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpICYmIG1fYmxvY2tT
ZXQuY29udGFpbnMoYmxvY2spOworICAgIHJldHVybiAoIW1fbmV3R2VuLmJsb2NrRmlsdGVyLnJ1
bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpIHx8ICFtX29sZEdlbi5ibG9ja0Zp
bHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKSkKKyAgICAgICAgJiYg
bV9ibG9ja1NldC5jb250YWlucyhibG9jayk7CiB9CiAKIGlubGluZSBib29sIENvcGllZFNwYWNl
Ojpjb250YWlucyh2b2lkKiBwdHIsIENvcGllZEJsb2NrKiYgcmVzdWx0KQpAQCAtOTIsNyArOTMs
NyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGluSWZOZWNlc3NhcnkoCiAgICAgICAgIHBp
bihibG9jayk7CiB9CiAKLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQoraW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3lj
bGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2ssIEhlYXBPcGVyYXRpb24gY29sbGVj
dGlvblR5cGUpCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoYmxvY2stPmNhbkJl
UmVjeWNsZWQoKSk7CkBAIC0xMDAsNyArMTAxLDEwIEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNl
OjpyZWN5Y2xlRXZhY3VhdGUKICAgICB7CiAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigm
bV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKLSAgICAg
ICAgbV9mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7CisgICAgICAgIGlmIChjb2xsZWN0aW9uVHlw
ZSA9PSBFZGVuQ29sbGVjdGlvbikKKyAgICAgICAgICAgIG1fbmV3R2VuLmZyb21TcGFjZS0+cmVt
b3ZlKGJsb2NrKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9vbGRHZW4uZnJvbVNwYWNl
LT5yZW1vdmUoYmxvY2spOwogICAgIH0KICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVh
bGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9jaykpOwogfQpAQCAtMTQxLDggKzE0NSw4
IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKICAgICAKICAgICBD
b3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxv
Y2F0b3IoKS5hbGxvY2F0ZTxDb3BpZWRCbG9jaz4oKSk7CiAgICAgICAgIAotICAgIG1fdG9TcGFj
ZS0+cHVzaChibG9jayk7Ci0gICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxC
aXRzPihibG9jaykpOworICAgIG1fbmV3R2VuLnRvU3BhY2UtPnB1c2goYmxvY2spOworICAgIG1f
bmV3R2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CiAg
ICAgbV9ibG9ja1NldC5hZGQoYmxvY2spOwogICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9j
ayhibG9jayk7CiB9CkBAIC0xNzQsNiArMTc4LDg4IEBAIGlubGluZSBDb3BpZWRCbG9jayogQ29w
aWVkU3BhY2U6OmJsb2NrRm8KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb3BpZWRCbG9j
ayo+KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgc19ibG9ja01hc2spOwogfQogCit0
ZW1wbGF0ZSA8SGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZT4KK2lubGluZSB2b2lkIENvcGll
ZFNwYWNlOjpzdGFydGVkQ29weWluZygpCit7CisgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRC
bG9jaz4qIHRvU3BhY2U7CisgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4qIGZyb21T
cGFjZTsKKyAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogb3ZlcnNpemVCbG9ja3M7
CisgICAgVGlueUJsb29tRmlsdGVyKiBibG9ja0ZpbHRlcjsKKyAgICBpZiAoY29sbGVjdGlvblR5
cGUgPT0gRnVsbENvbGxlY3Rpb24pIHsKKyAgICAgICAgQVNTRVJUKG1fb2xkR2VuLmZyb21TcGFj
ZS0+aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0
eSgpKTsKKworICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5hcHBlbmQoKm1fbmV3R2VuLnRvU3Bh
Y2UpOworICAgICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5hcHBlbmQobV9uZXdHZW4ub3Zl
cnNpemVCbG9ja3MpOworCisgICAgICAgIEFTU0VSVChtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5
KCkpOworICAgICAgICBBU1NFUlQobV9uZXdHZW4uZnJvbVNwYWNlLT5pc0VtcHR5KCkpOworICAg
ICAgICBBU1NFUlQobV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKKworICAgICAg
ICBzdGQ6OnN3YXAobV9vbGRHZW4uZnJvbVNwYWNlLCBtX29sZEdlbi50b1NwYWNlKTsKKyAgICAg
ICAgdG9TcGFjZSA9IG1fb2xkR2VuLnRvU3BhY2U7CisgICAgICAgIGZyb21TcGFjZSA9IG1fb2xk
R2VuLmZyb21TcGFjZTsKKyAgICAgICAgb3ZlcnNpemVCbG9ja3MgPSAmbV9vbGRHZW4ub3ZlcnNp
emVCbG9ja3M7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6c3dhcChtX25ld0dlbi5mcm9tU3BhY2UsIG1fbmV3
R2VuLnRvU3BhY2UpOworICAgICAgICB0b1NwYWNlID0gbV9uZXdHZW4udG9TcGFjZTsKKyAgICAg
ICAgZnJvbVNwYWNlID0gbV9uZXdHZW4uZnJvbVNwYWNlOworICAgICAgICBvdmVyc2l6ZUJsb2Nr
cyA9ICZtX25ld0dlbi5vdmVyc2l6ZUJsb2NrczsKKyAgICAgICAgYmxvY2tGaWx0ZXIgPSAmbV9u
ZXdHZW4uYmxvY2tGaWx0ZXI7CisgICAgfQorCisgICAgYmxvY2tGaWx0ZXItPnJlc2V0KCk7Cisg
ICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKKworICAgIENvcGllZEJsb2NrKiBu
ZXh0ID0gMDsKKyAgICBzaXplX3QgdG90YWxMaXZlQnl0ZXMgPSAwOworICAgIHNpemVfdCB0b3Rh
bFVzYWJsZUJ5dGVzID0gMDsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IGZyb21TcGFj
ZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBibG9jay0+
bmV4dCgpOworICAgICAgICBpZiAoIWJsb2NrLT5pc1Bpbm5lZCgpICYmIGJsb2NrLT5jYW5CZVJl
Y3ljbGVkKCkpIHsKKyAgICAgICAgICAgIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhibG9jaywgY29s
bGVjdGlvblR5cGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKGJsb2NrLT5saXZlQnl0ZXMoKSA8PSBDb3BpZWRCbG9jazo6YmxvY2tTaXplKTsKKyAg
ICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOworICAgICAgICB0b3Rh
bFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICAgICAgYmxvY2st
PmRpZFByb21vdGUoKTsKKyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBvdmVyc2l6
ZUJsb2Nrcy0+aGVhZCgpOworICAgIHdoaWxlIChibG9jaykgeworICAgICAgICBDb3BpZWRCbG9j
ayogbmV4dCA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkg
eworICAgICAgICAgICAgYmxvY2tGaWx0ZXItPmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJs
b2NrKSk7CisgICAgICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFj
aXR5KCk7CisgICAgICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2Fw
YWNpdHkoKTsKKyAgICAgICAgICAgIGJsb2NrLT5kaWRQcm9tb3RlKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBvdmVyc2l6ZUJsb2Nrcy0+cmVtb3ZlKGJsb2NrKTsKKyAgICAgICAg
ICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgICAgIG1faGVhcC0+YmxvY2tB
bGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9j
aykpOworICAgICAgICB9IAorICAgICAgICBibG9jayA9IG5leHQ7CisgICAgfQorCisgICAgZG91
YmxlIG1hcmtlZFNwYWNlQnl0ZXMgPSBtX2hlYXAtPm9iamVjdFNwYWNlKCkuY2FwYWNpdHkoKTsK
KyAgICBkb3VibGUgdG90YWxGcmFnbWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3Rh
bExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3Rh
bFVzYWJsZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcyk7CisgICAgbV9zaG91bGREb0NvcHlQaGFz
ZSA9IG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uIHx8IHRv
dGFsRnJhZ21lbnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRpbGl6YXRpb24oKTsKKyAgICBp
ZiAoIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCJTa2lwcGVkIGNvcHlpbmcsICIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgIGRhdGFMb2dG
KCJEaWQgY29weSwgIik7CisgICAgQVNTRVJUKG1fc2hvdWxkRG9Db3B5UGhhc2UpOworICAgIEFT
U0VSVCghbV9udW1iZXJPZkxvYW5lZEJsb2Nrcyk7CisgICAgQVNTRVJUKCFtX2luQ29weWluZ1Bo
YXNlKTsKKyAgICBtX2luQ29weWluZ1BoYXNlID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBDb3BpZWRTcGFjZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAkocmV2aXNpb24gMTYxOTc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHZvaWQgQ29weVZpc2l0b3I6OmNvcHlGcm9tU2hhcmVkKCkKICAgICAg
ICAgICAgICAgICB2aXNpdEl0ZW0oKml0KTsKIAogICAgICAgICAgICAgQVNTRVJUKCFibG9jay0+
bGl2ZUJ5dGVzKCkpOwotICAgICAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNs
ZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3Bh
Y2UtPnJlY3ljbGVFdmFjdWF0ZWRCbG9jayhibG9jaywgbV9zaGFyZWQubV92bS0+aGVhcC5vcGVy
YXRpb25JblByb2dyZXNzKCkpOwogICAgICAgICB9CiAgICAgICAgIG1fc2hhcmVkLmdldE5leHRC
bG9ja3NUb0NvcHkobmV4dCwgZW5kKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTYxOTc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDcgKzU1LDcgQEAgaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZT
aG91bGRDbwogaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVf
dCBieXRlcykKIHsKICAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVh
bGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1fY29waWVk
QWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCisgICAgaWYgKExJS0VMWSht
X2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0ZXMsICZyZXN1bHQp
KSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICByZXN1bHQgPSBhbGxvY2F0ZU5l
d1NwYWNlU2xvdyhieXRlcyk7CkBAIC03MCw3ICs3MCw3IEBAIGlubGluZSB2b2lkKiBDb3B5Vmlz
aXRvcjo6YWxsb2NhdGVOZXdTcGEKICAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50Qmxv
Y2sobmV3QmxvY2spOwogCiAgICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2VkQm9vbGVh
biBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1
bHQpOworICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50
cnlBbGxvY2F0ZUR1cmluZ0NvcHlpbmcoYnl0ZXMsICZyZXN1bHQpOwogICAgIEFTU0VSVChkaWRT
dWNjZWVkKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxNjE5NzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDE1IEBAIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRh
OjpkaWRTdGFydENvcHlpbmcKIHsKICAgICB7CiAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tl
cigmbV9jb3B5TG9jayk7Ci0gICAgICAgIFdURjo6Y29weVRvVmVjdG9yKG1fY29waWVkU3BhY2Ut
Pm1fYmxvY2tTZXQsIG1fYmxvY2tzVG9Db3B5KTsKKyAgICAgICAgaWYgKG1fdm0tPmhlYXAub3Bl
cmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgICAgICAvLyBS
ZXNldCB0aGUgdmVjdG9yIHRvIGJlIGVtcHR5LCBidXQgZG9uJ3QgdGhyb3cgYXdheSB0aGUgYmFj
a2luZyBzdG9yZS4KKyAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LnNocmluaygwKTsKKyAgICAg
ICAgICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9jb3BpZWRTcGFjZS0+bV9uZXdHZW4u
ZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAg
ICAgICAgICAgbV9ibG9ja3NUb0NvcHkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBG
dWxsQ29sbGVjdGlvbik7CisgICAgICAgICAgICBXVEY6OmNvcHlUb1ZlY3RvcihtX2NvcGllZFNw
YWNlLT5tX2Jsb2NrU2V0LCBtX2Jsb2Nrc1RvQ29weSk7CisgICAgICAgIH0KICAgICAgICAgbV9j
b3B5SW5kZXggPSAwOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHJldmlzaW9uIDE2MTk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDEsMTAgKzY0MSw3IEBAIHZvaWQgSGVhcDo6bWFya1Jv
b3RzKCkKIHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlPgogdm9pZCBIZWFw
Ojpjb3B5QmFja2luZ1N0b3JlcygpCiB7Ci0gICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5D
b2xsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVk
Q29weWluZygpOworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nPGNvbGxlY3Rpb25U
eXBlPigpOwogICAgIGlmIChtX3N0b3JhZ2VTcGFjZS5zaG91bGREb0NvcHlQaGFzZSgpKSB7CiAg
ICAgICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydENvcHlpbmcoKTsKICAgICAgICAgbV9jb3B5Vmlz
aXRvci5zdGFydENvcHlpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxNjE5NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjI1LDE4ICsyMjUsMTcgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWlu
KAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbGwqIG93bmVyLCBDb3B5
VG9rZW4gdG9rZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChieXRl
cyk7Ci0gICAgLy8gV2UgZG9uJ3QgZG8gYW55IGNvcHlpbmcgZHVyaW5nIEVkZW5Db2xsZWN0aW9u
cy4KLSAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgIT0gRWRlbkNvbGxl
Y3Rpb24pOwotCi0gICAgbV9ieXRlc0NvcGllZCArPSBieXRlczsKLQogICAgIENvcGllZEJsb2Nr
KiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOwogICAgIGlmIChibG9jay0+aXNP
dmVyc2l6ZSgpKSB7CiAgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihibG9jayk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKG93
bmVyLCB0b2tlbiwgYnl0ZXMpOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmYmxvY2stPndv
cmtMaXN0TG9jaygpKTsKKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0g
RnVsbENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3VsZFJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93
bmVyKSkgeworICAgICAgICBtX2J5dGVzQ29waWVkICs9IGJ5dGVzOworICAgICAgICBibG9jay0+
cmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRva2VuLCBieXRlcyk7CisgICAgfQogfQog
ICAgIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UoSlND
ZWxsKiBvd25lciwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaW55Qmxvb21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9UaW55Qmxvb21GaWx0ZXIuaAkocmV2aXNpb24gMTYxOTc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVGlueUJsb29tRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDcgQEAgcHVibGljOgogICAgIFRpbnlCbG9vbUZpbHRlcigpOwogCiAgICAgdm9pZCBhZGQo
Qml0cyk7CisgICAgdm9pZCBhZGQoVGlueUJsb29tRmlsdGVyJik7CiAgICAgYm9vbCBydWxlT3V0
KEJpdHMpIGNvbnN0OyAvLyBUcnVlIGZvciAwLgogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtNTIs
NiArNTMsMTEgQEAgaW5saW5lIHZvaWQgVGlueUJsb29tRmlsdGVyOjphZGQoQml0cyBiaQogICAg
IG1fYml0cyB8PSBiaXRzOwogfQogCitpbmxpbmUgdm9pZCBUaW55Qmxvb21GaWx0ZXI6OmFkZChU
aW55Qmxvb21GaWx0ZXImIG90aGVyKQoreworICAgIG1fYml0cyB8PSBvdGhlci5tX2JpdHM7Cit9
CisKIGlubGluZSBib29sIFRpbnlCbG9vbUZpbHRlcjo6cnVsZU91dChCaXRzIGJpdHMpIGNvbnN0
CiB7CiAgICAgaWYgKCFiaXRzKQpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxNjE5NzQpCisr
KyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTcsNiArNzU3
LDcgQEAKICNlcnJvciBZb3UgaGF2ZSB0byBoYXZlIGF0IGxlYXN0IG9uZSBleGVjdXRpb24gbW9k
ZWwgZW5hYmxlZCB0byBidWlsZCBKU0MKICNlbmRpZgogCisjZGVmaW5lIEVOQUJMRV9HR0MgMQog
LyogR2VuZXJhdGlvbmFsIGNvbGxlY3RvciBmb3IgSlNDICovCiAjaWYgIWRlZmluZWQoRU5BQkxF
X0dHQykKICNkZWZpbmUgRU5BQkxFX0dHQyAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221189</attachid>
            <date>2014-01-14 12:52:39 -0800</date>
            <delta_ts>2014-02-13 03:50:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126555-20140114125233.patch</filename>
            <type>text/plain</type>
            <size>32530</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxOTk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDE0LTAxLTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29weWluZyBzaG91bGQgYmUgZ2VuZXJhdGlvbmFsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY1NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBm
b3IgY29weWluZyB0byBvdXIgZ2VuZXJhdGlvbmFsIGNvbGxlY3Rvci4gRWRlbiBjb2xsZWN0aW9u
cyAKKyAgICAgICAgYWx3YXlzIHRyaWdnZXIgY29weWluZy4gRnVsbCBjb2xsZWN0aW9ucyB1c2Ug
b3VyIG5vcm1hbCBmcmFnbWVudGF0aW9uLWJhc2VkIGhldXJpc3RpY3MuCisKKyAgICAgICAgVGhl
IHdheSB0aGlzIHdvcmtzIGlzIHRoYXQgdGhlIENvcGllZFNwYWNlIG5vdyBoYXMgdGhlIG5vdGlv
biBvZiBhbiBvbGQgZ2VuZXJhdGlvbiBzZXQgb2YgQ29waWVkQmxvY2tzCisgICAgICAgIGFuZCBh
IG5ldyBnZW5lcmF0aW9uIG9mIENvcGllZEJsb2Nrcy4gRHVyaW5nIGVhY2ggbXV0YXRvciBjeWNs
ZSBuZXcgQ29waWVkU3BhY2UgYWxsb2NhdGlvbnMgcmVzaWRlCisgICAgICAgIGluIHRoZSBuZXcg
Z2VuZXJhdGlvbi4gV2hlbiBhIGNvbGxlY3Rpb24gb2NjdXJzLCB0aG9zZSBibG9ja3MgYXJlIG1v
dmVkIHRvIHRoZSBvbGQgZ2VuZXJhdGlvbi4KKworICAgICAgICBPbmUga2V5IHRoaW5nIHRvIHJl
bWVtYmVyIGlzIHRoYXQgYm90aCBuZXcgYW5kIG9sZCBnZW5lcmF0aW9uIG9iamVjdHMgaW4gdGhl
IE1hcmtlZFNwYWNlIGNhbgorICAgICAgICByZWZlciB0byBvbGQgb3IgbmV3IGdlbmVyYXRpb24g
YWxsb2NhdGlvbnMgaW4gQ29waWVkU3BhY2UuIFRoaXMgaXMgd2h5IHdlIG11c3QgZmlyZSB3cml0
ZSBiYXJyaWVycyAKKyAgICAgICAgd2hlbiBhc3NpZ25pbmcgdG8gYW4gb2xkIChNYXJrZWRTcGFj
ZSkgb2JqZWN0J3MgQnV0dGVyZmx5LgorCisgICAgICAgICogaGVhcC9Db3BpZWRBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKEpTQzo6Q29waWVkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUR1cmluZ0NvcHlp
bmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29waWVk
QmxvY2s6OkNvcGllZEJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmRpZEV2YWN1
YXRlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6aXNPbGQpOgorICAgICAgICAo
SlNDOjpDb3BpZWRCbG9jazo6ZGlkUHJvbW90ZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9j
a0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6
CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5n
KToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OkNvcGllZFNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6On5Db3BpZWRT
cGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjppbml0KToKKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZGlkU3RhcnRG
dWxsQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpzaXplKToKKyAgICAgICAgKEpTQzo6Q29waWVk
U3BhY2U6OmNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmlzUGFnZWRPdXQp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpjb250YWlu
cyk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6CisgICAgICAgICogaGVhcC9Db3B5VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJlZCk6CisgICAg
ICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29weVZpc2l0
b3I6OmFsbG9jYXRlTmV3U3BhY2UpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6YWxsb2Nh
dGVOZXdTcGFjZVNsb3cpOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydENvcHlpbmcpOgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3Rv
cmVzKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAgICAgKiBoZWFwL1RpbnlCbG9vbUZpbHRl
ci5oOgorICAgICAgICAoSlNDOjpUaW55Qmxvb21GaWx0ZXI6OmFkZCk6CisKIDIwMTQtMDEtMTQg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBGb3IgUmVtb3RlIEluc3BlY3Rpb24gbGluayBXZWJQcm9jZXNzJ3MgdG8gdGhlaXIg
cGFyZW50IFVJUHJvY2VzcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2MTk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGZhc3RQYXRoU2hvdWxkU3VjY2VlZChzaXplX3QgYnl0
ZXMpIGNvbnN0OwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywg
dm9pZCoqIG91dFB0cik7CisgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVEdXJpbmdDb3B5
aW5nKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5
UmVhbGxvY2F0ZSh2b2lkICpvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVz
KTsKICAgICB2b2lkKiBmb3JjZUFsbG9jYXRlKHNpemVfdCBieXRlcyk7CiAgICAgQ29waWVkQmxv
Y2sqIHJlc2V0Q3VycmVudEJsb2NrKCk7CkBAIC05Myw2ICs5NCwxNCBAQCBpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gQ29waWVkQWxsb2NhdG9yOjp0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGlu
ZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlRHVyaW5nQ29weWlu
ZyhzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgaWYgKCF0cnlBbGxvY2F0ZShi
eXRlcywgb3V0UHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fY3VycmVudEJsb2Nr
LT5yZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKGJ5dGVzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZEFsbG9jYXRvcjo6dHJ5UmVhbGxvY2F0
ZSgKICAgICB2b2lkKiBvbGRQdHIsIHNpemVfdCBvbGRCeXRlcywgc2l6ZV90IG5ld0J5dGVzKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lv
biAxNjE5OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxMCArNDksMTQgQEAgcHVibGljOgogICAgIHZvaWQgcGluKCk7
CiAgICAgYm9vbCBpc1Bpbm5lZCgpOwogCisgICAgYm9vbCBpc09sZCgpOwogICAgIGJvb2wgaXNP
dmVyc2l6ZSgpOworICAgIHZvaWQgZGlkUHJvbW90ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5
dGVzKCk7Ci0gICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoSlNDZWxsKiwgQ29weVRva2VuLCB1bnNp
Z25lZCk7CisgICAgYm9vbCBzaG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBK
U0NlbGwqIG93bmVyKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYs
IEpTQ2VsbCosIENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5dGVz
RHVyaW5nQ29weWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKICAgICB2
b2lkIGRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQpOwogICAgIGJvb2wgc2hvdWxkRXZhY3VhdGUo
KTsKQEAgLTgxLDYgKzg1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNXb3JrTGlzdCgpOwog
ICAgIENvcHlXb3JrTGlzdCYgd29ya0xpc3QoKTsKKyAgICBTcGluTG9jayYgd29ya0xpc3RMb2Nr
KCkgeyByZXR1cm4gbV93b3JrTGlzdExvY2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9j
ayhSZWdpb24qKTsKQEAgLTg4LDEzICs5MywxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgU3BpbkxvY2sg
bV93b3JrTGlzdExvY2s7Ci0jZW5kaWYKICAgICBPd25QdHI8Q29weVdvcmtMaXN0PiBtX3dvcmtM
aXN0OwogCiAgICAgc2l6ZV90IG1fcmVtYWluaW5nOwotICAgIHVpbnRwdHJfdCBtX2lzUGlubmVk
OworICAgIGJvb2wgbV9pc1Bpbm5lZCA6IDE7CisgICAgYm9vbCBtX2lzT2xkIDogMTsKICAgICB1
bnNpZ25lZCBtX2xpdmVCeXRlczsKICNpZm5kZWYgTkRFQlVHCiAgICAgdW5zaWduZWQgbV9saXZl
T2JqZWN0czsKQEAgLTEzMCwxNCArMTM0LDEzIEBAIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2soUmVnaW9uKiAKICAgICA6IEhlYXBCbG9jazxDb3BpZWRCbG9jaz4ocmVnaW9uKQogICAg
ICwgbV9yZW1haW5pbmcocGF5bG9hZENhcGFjaXR5KCkpCiAgICAgLCBtX2lzUGlubmVkKGZhbHNl
KQorICAgICwgbV9pc09sZChmYWxzZSkKICAgICAsIG1fbGl2ZUJ5dGVzKDApCiAjaWZuZGVmIE5E
RUJVRwogICAgICwgbV9saXZlT2JqZWN0cygwKQogI2VuZGlmCiB7Ci0jaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQogICAgIG1fd29ya0xpc3RMb2NrLkluaXQoKTsKLSNlbmRpZgogICAgIEFTU0VSVChp
czhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3JlbWFpbmluZykpKTsKIH0K
IApAQCAtMTU2LDYgKzE1OSw3IEBAIGlubGluZSB2b2lkIENvcGllZEJsb2NrOjpkaWRTdXJ2aXZl
R0MoKQogaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQg
Ynl0ZXMpCiB7CiAgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzID49IGJ5dGVzKTsKKyAgICBBU1NFUlQo
bV9saXZlT2JqZWN0cyk7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIG1fbGl2ZUJ5dGVz
IC09IGJ5dGVzOwogI2lmbmRlZiBOREVCVUcKQEAgLTE4OCw2ICsxOTIsMTYgQEAgaW5saW5lIGJv
b2wgQ29waWVkQmxvY2s6OmlzUGlubmVkKCkKICAgICByZXR1cm4gbV9pc1Bpbm5lZDsKIH0KIAor
aW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OmlzT2xkKCkKK3sKKyAgICByZXR1cm4gbV9pc09sZDsK
K30KKworaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OmRpZFByb21vdGUoKQoreworICAgIG1faXNP
bGQgPSB0cnVlOworfQorCiBpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNPdmVyc2l6ZSgpCiB7
CiAgICAgcmV0dXJuIHJlZ2lvbigpLT5pc0N1c3RvbVNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNjE5
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMjEgKzI2LDMzIEBACiAjaWZuZGVmIENvcGllZEJsb2NrSW5s
aW5lc19oCiAjZGVmaW5lIENvcGllZEJsb2NrSW5saW5lc19oCiAKKyNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLWlubGluZSB2b2lk
IENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRv
a2VuLCB1bnNpZ25lZCBieXRlcykKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpzaG91bGRSZXBv
cnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKQoreworICAgIC8vIFdl
IHdhbnQgdG8gYWRkIHRvIGxpdmUgYnl0ZXMgaWYgdGhlIG93bmVyIGlzbid0IHBhcnQgb2YgdGhl
IHJlbWVtYmVyZWQgc2V0IG9yCisgICAgLy8gaWYgdGhpcyBibG9jayB3YXMgYWxsb2NhdGVkIGR1
cmluZyB0aGUgbGFzdCBjeWNsZS4gCisgICAgLy8gSWYgd2UgYWx3YXlzIGFkZGVkIGxpdmUgYnl0
ZXMgd2Ugd291bGQgZG91YmxlIGNvdW50IGZvciBlbGVtZW50cyBpbiB0aGUgcmVtZW1iZXJlZAor
ICAgIC8vIHNldCBhY3Jvc3MgY29sbGVjdGlvbnMuIAorICAgIC8vIElmIHdlIGRpZG4ndCBhbHdh
eXMgYWRkIGxpdmUgYnl0ZXMgdG8gbmV3IGJsb2Nrcywgd2UnZCBnZXQgdG9vIGZldy4KKyAgICBi
b29sIG93bmVySXNSZW1lbWJlcmVkID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKS0+aXNS
ZW1lbWJlcmVkKG93bmVyKTsKKyAgICByZXR1cm4gIW93bmVySXNSZW1lbWJlcmVkIHx8ICFtX2lz
T2xkOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKFNwaW5M
b2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRva2VuLCB1bnNpZ25lZCBieXRl
cykKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2Vy
KCZtX3dvcmtMaXN0TG9jayk7Ci0jZW5kaWYKLSNpZm5kZWYgTkRFQlVHCiAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworI2lmbmRlZiBOREVCVUcKICAgICBtX2xpdmVPYmplY3RzKys7CiAjZW5kaWYK
ICAgICBtX2xpdmVCeXRlcyArPSBieXRlczsKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
QVNTRVJUKG1fbGl2ZUJ5dGVzIDw9IENvcGllZEJsb2NrOjpibG9ja1NpemUpOwogCiAgICAgaWYg
KGlzUGlubmVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU2LDYgKzY4LDE5IEBAIGlubGluZSB2
b2lkIENvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMKICAgICBtX3dvcmtMaXN0LT5hcHBlbmQo
Q29weVdvcmtsaXN0SXRlbShvd25lciwgdG9rZW4pKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVk
QmxvY2s6OnJlcG9ydExpdmVCeXRlc0R1cmluZ0NvcHlpbmcodW5zaWduZWQgYnl0ZXMpCit7Cisg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIC8vIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGxv
Y2tlZCBiZWNhdXNlIHRoZSB0aHJlYWQgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uIG93bnMgdGhl
IGN1cnJlbnQgYmxvY2suCisgICAgbV9pc09sZCA9IHRydWU7CisjaWZuZGVmIE5ERUJVRworICAg
IG1fbGl2ZU9iamVjdHMrKzsKKyNlbmRpZgorICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVzOworICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPD0gQ29waWVkQmxv
Y2s6OmJsb2NrU2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQ29w
aWVkQmxvY2tJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHJldmlzaW9uIDE2MTk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogQ29waWVkU3BhY2U6OkNvcGllZFNwYWNlKEhlYXAqIGhlYXApCiAgICAg
OiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fdG9TcGFjZSgwKQotICAgICwgbV9mcm9tU3BhY2UoMCkK
ICAgICAsIG1faW5Db3B5aW5nUGhhc2UoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERvQ29weVBoYXNl
KGZhbHNlKQogICAgICwgbV9udW1iZXJPZkxvYW5lZEJsb2NrcygwKQpAQCAtNDYsMjEgKzQ0LDQw
IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogCiBDb3BpZWRTcGFjZTo6
fkNvcGllZFNwYWNlKCkKIHsKLSAgICB3aGlsZSAoIW1fdG9TcGFjZS0+aXNFbXB0eSgpKQotICAg
ICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVz
dHJveShtX3RvU3BhY2UtPnJlbW92ZUhlYWQoKSkpOworICAgIHdoaWxlICghbV9vbGRHZW4udG9T
cGFjZS0+aXNFbXB0eSgpKQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxv
Y2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShtX29sZEdlbi50b1NwYWNlLT5yZW1vdmVIZWFkKCkp
KTsKIAotICAgIHdoaWxlICghbV9mcm9tU3BhY2UtPmlzRW1wdHkoKSkKLSAgICAgICAgbV9oZWFw
LT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9mcm9t
U3BhY2UtPnJlbW92ZUhlYWQoKSkpOworICAgIHdoaWxlICghbV9vbGRHZW4uZnJvbVNwYWNlLT5p
c0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENv
cGllZEJsb2NrOjpkZXN0cm95KG1fb2xkR2VuLmZyb21TcGFjZS0+cmVtb3ZlSGVhZCgpKSk7CiAK
LSAgICB3aGlsZSAoIW1fb3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKQotICAgICAgICBtX2hlYXAt
PmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ry
b3kobV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFkKCkpKTsKKyAgICB3aGlsZSAoIW1fb2xkR2Vu
Lm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRv
cigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGllZEJsb2NrOjpkZXN0cm95KG1fb2xkR2VuLm92
ZXJzaXplQmxvY2tzLnJlbW92ZUhlYWQoKSkpOworCisgICAgd2hpbGUgKCFtX25ld0dlbi50b1Nw
YWNlLT5pc0VtcHR5KCkpCisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9j
YXRlKENvcGllZEJsb2NrOjpkZXN0cm95KG1fbmV3R2VuLnRvU3BhY2UtPnJlbW92ZUhlYWQoKSkp
OworCisgICAgd2hpbGUgKCFtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSkKKyAgICAgICAg
bV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3ko
bV9uZXdHZW4uZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCkpKTsKKworICAgIHdoaWxlICghbV9uZXdH
ZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKQorICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2Nh
dG9yKCkuZGVhbGxvY2F0ZUN1c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ryb3kobV9uZXdHZW4u
b3ZlcnNpemVCbG9ja3MucmVtb3ZlSGVhZCgpKSk7CisKKyAgICBBU1NFUlQobV9vbGRHZW4udG9T
cGFjZS0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9vbGRHZW4uZnJvbVNwYWNlLT5pc0VtcHR5
KCkpOworICAgIEFTU0VSVChtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChtX25ld0dlbi50b1NwYWNlLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX25ld0dl
bi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLm92ZXJzaXplQmxv
Y2tzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgQ29waWVkU3BhY2U6OmluaXQoKQogewotICAgIG1f
dG9TcGFjZSA9ICZtX2Jsb2NrczE7Ci0gICAgbV9mcm9tU3BhY2UgPSAmbV9ibG9ja3MyOworICAg
IG1fb2xkR2VuLnRvU3BhY2UgPSAmbV9vbGRHZW4uYmxvY2tzMTsKKyAgICBtX29sZEdlbi5mcm9t
U3BhY2UgPSAmbV9vbGRHZW4uYmxvY2tzMjsKICAgICAKKyAgICBtX25ld0dlbi50b1NwYWNlID0g
Jm1fbmV3R2VuLmJsb2NrczE7CisgICAgbV9uZXdHZW4uZnJvbVNwYWNlID0gJm1fbmV3R2VuLmJs
b2NrczI7CisKICAgICBhbGxvY2F0ZUJsb2NrKCk7CiB9ICAgCiAKQEAgLTgzLDkgKzEwMCwxMCBA
QCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPCiAgICAgQVNTRVJUKGlz
T3ZlcnNpemUoYnl0ZXMpKTsKICAgICAKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRC
bG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZUN1c3RvbVNpemUo
c2l6ZW9mKENvcGllZEJsb2NrKSArIGJ5dGVzLCBDb3BpZWRCbG9jazo6YmxvY2tTaXplKSk7Ci0g
ICAgbV9vdmVyc2l6ZUJsb2Nrcy5wdXNoKGJsb2NrKTsKLSAgICBtX2Jsb2NrRmlsdGVyLmFkZChy
ZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CisgICAgbV9uZXdHZW4ub3ZlcnNpemVCbG9j
a3MucHVzaChibG9jayk7CisgICAgbV9uZXdHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oYmxvY2spKTsKICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CisgICAgQVNT
RVJUKCFibG9jay0+aXNPbGQoKSk7CiAgICAgCiAgICAgQ29waWVkQWxsb2NhdG9yIGFsbG9jYXRv
cjsKICAgICBhbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKQEAgLTEzOCw3ICsxNTYs
MTAgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdAogCiAgICAgQ29w
aWVkQmxvY2sqIG9sZEJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0cik7CiAgICAg
aWYgKG9sZEJsb2NrLT5pc092ZXJzaXplKCkpIHsKLSAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5y
ZW1vdmUob2xkQmxvY2spOworICAgICAgICBpZiAob2xkQmxvY2stPmlzT2xkKCkpCisgICAgICAg
ICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2spOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX25ld0dlbi5vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2sp
OwogICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShvbGRCbG9jayk7CiAgICAgICAgIG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlQ3VzdG9tU2l6ZShDb3BpZWRCbG9jazo6ZGVzdHJv
eShvbGRCbG9jaykpOwogICAgIH0KQEAgLTE2NSwxMCArMTg2LDExIEBAIHZvaWQgQ29waWVkU3Bh
Y2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWUKICAgICBibG9jay0+emVyb0ZpbGxXaWxkZXJuZXNz
KCk7CiAKICAgICB7CisgICAgICAgIC8vIEFsd2F5cyBwdXQgdGhlIGJsb2NrIGludG8gdGhlIG9s
ZCBnZW4gYmVjYXVzZSBpdCdzIGJlaW5nIHByb21vdGVkIQogICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwotICAgICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2sp
OworICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5wdXNoKGJsb2NrKTsKICAgICAgICAgbV9ibG9j
a1NldC5hZGQoYmxvY2spOwotICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9j
YXN0PEJpdHM+KGJsb2NrKSk7CisgICAgICAgIG1fb2xkR2VuLmJsb2NrRmlsdGVyLmFkZChyZWlu
dGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7CiAgICAgfQogCiAgICAgewpAQCAtMTgxLDUyICsy
MDMsMjUgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0K
IH0KIAotdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQordm9pZCBDb3BpZWRTcGFj
ZTo6ZGlkU3RhcnRGdWxsQ29sbGVjdGlvbigpCiB7Ci0gICAgc3RkOjpzd2FwKG1fZnJvbVNwYWNl
LCBtX3RvU3BhY2UpOwotCi0gICAgbV9ibG9ja0ZpbHRlci5yZXNldCgpOwotICAgIG1fYWxsb2Nh
dG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CisgICAgQVNTRVJUKGhlYXAoKS0+b3BlcmF0aW9uSW5Q
cm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKTsKKyAgICBBU1NFUlQobV9vbGRHZW4uZnJvbVNw
YWNlLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHko
KSk7CiAKLSAgICBDb3BpZWRCbG9jayogbmV4dCA9IDA7Ci0gICAgc2l6ZV90IHRvdGFsTGl2ZUJ5
dGVzID0gMDsKLSAgICBzaXplX3QgdG90YWxVc2FibGVCeXRlcyA9IDA7Ci0gICAgZm9yIChDb3Bp
ZWRCbG9jayogYmxvY2sgPSBtX2Zyb21TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBuZXh0
KSB7Ci0gICAgICAgIG5leHQgPSBibG9jay0+bmV4dCgpOwotICAgICAgICBpZiAoIWJsb2NrLT5p
c1Bpbm5lZCgpICYmIGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpIHsKLSAgICAgICAgICAgIHJlY3lj
bGVFdmFjdWF0ZWRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+bGl2ZUJ5dGVzKCk7Ci0gICAgICAg
IHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgIH0KKyNp
Zm5kZWYgTkRFQlVHCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX25ld0dlbi50b1Nw
YWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIEFTU0VS
VCghYmxvY2stPmxpdmVCeXRlcygpKTsKKworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
bV9uZXdHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4
dCgpKQorICAgICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMoKSk7CisjZW5kaWYKIAotICAg
IENvcGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgpOwotICAgIHdoaWxl
IChibG9jaykgewotICAgICAgICBDb3BpZWRCbG9jayogbmV4dCA9IGJsb2NrLT5uZXh0KCk7Ci0g
ICAgICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkgewotICAgICAgICAgICAgbV9ibG9ja0ZpbHRl
ci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwotICAgICAgICAgICAgdG90YWxM
aXZlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOwotICAgICAgICAgICAgdG90YWxV
c2FibGVCeXRlcyArPSBibG9jay0+cGF5bG9hZENhcGFjaXR5KCk7Ci0gICAgICAgICAgICBibG9j
ay0+ZGlkU3Vydml2ZUdDKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX292ZXJz
aXplQmxvY2tzLnJlbW92ZShibG9jayk7Ci0gICAgICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShi
bG9jayk7Ci0gICAgICAgICAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZUN1
c3RvbVNpemUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKLSAgICAgICAgfSAKLSAgICAg
ICAgYmxvY2sgPSBuZXh0OwotICAgIH0KLQotICAgIGRvdWJsZSBtYXJrZWRTcGFjZUJ5dGVzID0g
bV9oZWFwLT5vYmplY3RTcGFjZSgpLmNhcGFjaXR5KCk7Ci0gICAgZG91YmxlIHRvdGFsRnJhZ21l
bnRhdGlvbiA9ICgoZG91YmxlKXRvdGFsTGl2ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcykgLyAo
KGRvdWJsZSl0b3RhbFVzYWJsZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcyk7Ci0gICAgbV9zaG91
bGREb0NvcHlQaGFzZSA9IHRvdGFsRnJhZ21lbnRhdGlvbiA8PSBPcHRpb25zOjptaW5IZWFwVXRp
bGl6YXRpb24oKTsKLSAgICBpZiAoIW1fc2hvdWxkRG9Db3B5UGhhc2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLnRvU3BhY2UtPmhlYWQo
KTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZp
dmVHQygpOwogCi0gICAgQVNTRVJUKG1fc2hvdWxkRG9Db3B5UGhhc2UpOwotICAgIEFTU0VSVCgh
bV9pbkNvcHlpbmdQaGFzZSk7Ci0gICAgQVNTRVJUKCFtX251bWJlck9mTG9hbmVkQmxvY2tzKTsK
LSAgICBtX2luQ29weWluZ1BoYXNlID0gdHJ1ZTsKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9j
ayA9IG1fb2xkR2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygpOwogfQogCiB2b2lkIENvcGll
ZFNwYWNlOjpkb25lQ29weWluZygpCkBAIC0yNDAsMjEgKzIzNSwzOSBAQCB2b2lkIENvcGllZFNw
YWNlOjpkb25lQ29weWluZygpCiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UgPT0gbV9zaG91
bGREb0NvcHlQaGFzZSk7CiAgICAgbV9pbkNvcHlpbmdQaGFzZSA9IGZhbHNlOwogCi0gICAgd2hp
bGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIENvcGllZEJsb2NrKiBibG9j
ayA9IG1fZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCk7Ci0gICAgICAgIC8vIEFsbCBub24tcGlubmVk
IGJsb2NrcyBpbiBmcm9tLXNwYWNlIHNob3VsZCBoYXZlIGJlZW4gcmVjbGFpbWVkIGFzIHRoZXkg
d2VyZSBldmFjdWF0ZWQuCi0gICAgICAgIEFTU0VSVChibG9jay0+aXNQaW5uZWQoKSB8fCAhbV9z
aG91bGREb0NvcHlQaGFzZSk7Ci0gICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKKyAgICBE
b3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogdG9TcGFjZTsKKyAgICBEb3VibHlMaW5rZWRM
aXN0PENvcGllZEJsb2NrPiogZnJvbVNwYWNlOworICAgIFRpbnlCbG9vbUZpbHRlciogYmxvY2tG
aWx0ZXI7CisgICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xs
ZWN0aW9uKSB7CisgICAgICAgIHRvU3BhY2UgPSBtX29sZEdlbi50b1NwYWNlOworICAgICAgICBm
cm9tU3BhY2UgPSBtX29sZEdlbi5mcm9tU3BhY2U7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1f
b2xkR2VuLmJsb2NrRmlsdGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIHRvU3BhY2UgPSBtX25l
d0dlbi50b1NwYWNlOworICAgICAgICBmcm9tU3BhY2UgPSBtX25ld0dlbi5mcm9tU3BhY2U7Cisg
ICAgICAgIGJsb2NrRmlsdGVyID0gJm1fbmV3R2VuLmJsb2NrRmlsdGVyOworICAgIH0KKworICAg
IHdoaWxlICghZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgQ29waWVkQmxvY2sqIGJs
b2NrID0gZnJvbVNwYWNlLT5yZW1vdmVIZWFkKCk7CiAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0
aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92ZWQuCiAg
ICAgICAgIEFTU0VSVChtX2Jsb2NrU2V0LmNvbnRhaW5zKGJsb2NrKSk7Ci0gICAgICAgIG1fYmxv
Y2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKLSAgICAgICAgbV90
b1NwYWNlLT5wdXNoKGJsb2NrKTsKKyAgICAgICAgYmxvY2tGaWx0ZXItPmFkZChyZWludGVycHJl
dF9jYXN0PEJpdHM+KGJsb2NrKSk7CisgICAgICAgIHRvU3BhY2UtPnB1c2goYmxvY2spOworICAg
IH0KKworICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVj
dGlvbikgeworICAgICAgICBtX29sZEdlbi50b1NwYWNlLT5hcHBlbmQoKm1fbmV3R2VuLnRvU3Bh
Y2UpOworICAgICAgICBtX29sZEdlbi5vdmVyc2l6ZUJsb2Nrcy5hcHBlbmQobV9uZXdHZW4ub3Zl
cnNpemVCbG9ja3MpOworICAgICAgICBtX29sZEdlbi5ibG9ja0ZpbHRlci5hZGQobV9uZXdHZW4u
YmxvY2tGaWx0ZXIpOworICAgICAgICBtX25ld0dlbi5ibG9ja0ZpbHRlci5yZXNldCgpOwogICAg
IH0KIAotICAgIGlmICghbV90b1NwYWNlLT5oZWFkKCkpCi0gICAgICAgIGFsbG9jYXRlQmxvY2so
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3RvU3Bh
Y2UtPmhlYWQoKSk7CisgICAgQVNTRVJUKG1fbmV3R2VuLnRvU3BhY2UtPmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9u
ZXdHZW4ub3ZlcnNpemVCbG9ja3MuaXNFbXB0eSgpKTsKKworICAgIGFsbG9jYXRlQmxvY2soKTsK
IAogICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSBmYWxzZTsKIH0KQEAgLTI2MywxMyArMjc2LDIy
IEBAIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCiB7CiAgICAgc2l6ZV90IGNhbGN1bGF0ZWRT
aXplID0gMDsKIAotICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV90b1NwYWNlLT5oZWFk
KCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX29sZEdlbi50b1NwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5u
ZXh0KCkpCiAgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CiAKLSAgICBm
b3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9j
ayA9IGJsb2NrLT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdl
bi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAg
ICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKIAotICAgIGZvciAoQ29waWVkQmxv
Y2sqIGJsb2NrID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2Nr
LT5uZXh0KCkpCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX29sZEdlbi5vdmVyc2l6
ZUJsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNh
bGN1bGF0ZWRTaXplICs9IGJsb2NrLT5zaXplKCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBi
bG9jayA9IG1fbmV3R2VuLnRvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKKyAgICAgICAgY2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKKworICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9uZXdHZW4uZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2Nr
OyBibG9jayA9IGJsb2NrLT5uZXh0KCkpCisgICAgICAgIGNhbGN1bGF0ZWRTaXplICs9IGJsb2Nr
LT5zaXplKCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLm92ZXJz
aXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKICAgICAgICAg
Y2FsY3VsYXRlZFNpemUgKz0gYmxvY2stPnNpemUoKTsKIAogICAgIHJldHVybiBjYWxjdWxhdGVk
U2l6ZTsKQEAgLTI3OSwxMyArMzAxLDIyIEBAIHNpemVfdCBDb3BpZWRTcGFjZTo6Y2FwYWNpdHko
KQogewogICAgIHNpemVfdCBjYWxjdWxhdGVkQ2FwYWNpdHkgPSAwOwogCi0gICAgZm9yIChDb3Bp
ZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb2xkR2VuLnRvU3BhY2Ut
PmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgY2FsY3VsYXRl
ZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOworCisgICAgZm9yIChDb3BpZWRCbG9jayog
YmxvY2sgPSBtX29sZEdlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgp
OwogCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX2Zyb21TcGFjZS0+aGVhZCgpOyBi
bG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2Nr
ID0gbV9vbGRHZW4ub3ZlcnNpemVCbG9ja3MuaGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+
bmV4dCgpKQogICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7
CiAKLSAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgIGZvciAoQ29waWVkQmxvY2sqIGJs
b2NrID0gbV9uZXdHZW4udG9TcGFjZS0+aGVhZCgpOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4
dCgpKQorICAgICAgICBjYWxjdWxhdGVkQ2FwYWNpdHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisK
KyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9IG1fbmV3R2VuLmZyb21TcGFjZS0+aGVhZCgp
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKQorICAgICAgICBjYWxjdWxhdGVkQ2FwYWNp
dHkgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisKKyAgICBmb3IgKENvcGllZEJsb2NrKiBibG9jayA9
IG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkKICAgICAgICAgY2FsY3VsYXRlZENhcGFjaXR5ICs9IGJsb2NrLT5jYXBhY2l0eSgpOwog
CiAgICAgcmV0dXJuIGNhbGN1bGF0ZWRDYXBhY2l0eTsKQEAgLTMxMSwyMiArMzQyLDEyIEBAIHN0
YXRpYyBib29sIGlzQmxvY2tMaXN0UGFnZWRPdXQoZG91YmxlIGQKIAogYm9vbCBDb3BpZWRTcGFj
ZTo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7Ci0gICAgcmV0dXJuIGlzQmxvY2tMaXN0
UGFnZWRPdXQoZGVhZGxpbmUsIG1fdG9TcGFjZSkgCi0gICAgICAgIHx8IGlzQmxvY2tMaXN0UGFn
ZWRPdXQoZGVhZGxpbmUsIG1fZnJvbVNwYWNlKSAKLSAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdl
ZE91dChkZWFkbGluZSwgJm1fb3ZlcnNpemVCbG9ja3MpOwotfQotCi12b2lkIENvcGllZFNwYWNl
OjpkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRp
b25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pOwotCi0gICAgQVNTRVJUKG1fZnJvbVNw
YWNlLT5pc0VtcHR5KCkpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX3RvU3Bh
Y2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAgYmxvY2st
PmRpZFN1cnZpdmVHQygpOwotCi0gICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX292ZXJz
aXplQmxvY2tzLmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKLSAgICAgICAg
YmxvY2stPmRpZFN1cnZpdmVHQygpOworICAgIHJldHVybiBpc0Jsb2NrTGlzdFBhZ2VkT3V0KGRl
YWRsaW5lLCBtX29sZEdlbi50b1NwYWNlKSAKKyAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91
dChkZWFkbGluZSwgbV9vbGRHZW4uZnJvbVNwYWNlKSAKKyAgICAgICAgfHwgaXNCbG9ja0xpc3RQ
YWdlZE91dChkZWFkbGluZSwgJm1fb2xkR2VuLm92ZXJzaXplQmxvY2tzKQorICAgICAgICB8fCBp
c0Jsb2NrTGlzdFBhZ2VkT3V0KGRlYWRsaW5lLCBtX25ld0dlbi50b1NwYWNlKSAKKyAgICAgICAg
fHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgbV9uZXdHZW4uZnJvbVNwYWNlKSAKKyAg
ICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwgJm1fbmV3R2VuLm92ZXJzaXpl
QmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDE2MTk5NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXBCbG9j
ay5oIgorI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2Vk
Qm9vbGVhbi5oPgpAQCAtNjIsNyArNjMsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRTdGFy
dEZ1bGxDb2xsZWN0aW9uKCk7CiAKKyAgICB0ZW1wbGF0ZSA8SGVhcE9wZXJhdGlvbiBjb2xsZWN0
aW9uVHlwZT4KICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgdm9pZCBzdGFydGVkRWRl
bkNvcHkoKTsKKyAgICB2b2lkIHN0YXJ0ZWRGdWxsQ29weSgpOwogICAgIHZvaWQgZG9uZUNvcHlp
bmcoKTsKICAgICBib29sIGlzSW5Db3B5UGhhc2UoKSB7IHJldHVybiBtX2luQ29weWluZ1BoYXNl
OyB9CiAKQEAgLTk1LDI0ICs5OSwzNiBAQCBwcml2YXRlOgogICAgIENvcGllZEJsb2NrKiBhbGxv
Y2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCk7CiAKICAgICB2b2lkIGRvbmVGaWxsaW5nQmxvY2so
Q29waWVkQmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKLSAgICB2b2lkIHJlY3ljbGVFdmFjdWF0ZWRC
bG9jayhDb3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGll
ZEJsb2NrKiwgSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSk7CiAgICAgdm9pZCByZWN5Y2xl
Qm9ycm93ZWRCbG9jayhDb3BpZWRCbG9jayopOwogCiAgICAgSGVhcCogbV9oZWFwOwogCiAgICAg
Q29waWVkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOwogCi0gICAgVGlueUJsb29tRmlsdGVyIG1fYmxv
Y2tGaWx0ZXI7CiAgICAgSGFzaFNldDxDb3BpZWRCbG9jayo+IG1fYmxvY2tTZXQ7CiAKICAgICBT
cGluTG9jayBtX3RvU3BhY2VMb2NrOwogCi0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9j
az4qIG1fdG9TcGFjZTsKLSAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogbV9mcm9t
U3BhY2U7Ci0gICAgCi0gICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9ibG9ja3Mx
OwotICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+IG1fYmxvY2tzMjsKLSAgICBEb3Vi
bHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiBtX292ZXJzaXplQmxvY2tzOworICAgIHN0cnVjdCBD
b3BpZWRHZW5lcmF0aW9uIHsKKyAgICAgICAgQ29waWVkR2VuZXJhdGlvbigpCisgICAgICAgICAg
ICA6IHRvU3BhY2UoMCkKKyAgICAgICAgICAgICwgZnJvbVNwYWNlKDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiB0b1NwYWNl
OworICAgICAgICBEb3VibHlMaW5rZWRMaXN0PENvcGllZEJsb2NrPiogZnJvbVNwYWNlOworICAg
ICAgICAKKyAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gYmxvY2tzMTsKKyAg
ICAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gYmxvY2tzMjsKKyAgICAgICAgRG91
Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gb3ZlcnNpemVCbG9ja3M7CisKKyAgICAgICAgVGlu
eUJsb29tRmlsdGVyIGJsb2NrRmlsdGVyOworICAgIH07CisKKyAgICBDb3BpZWRHZW5lcmF0aW9u
IG1fb2xkR2VuOworICAgIENvcGllZEdlbmVyYXRpb24gbV9uZXdHZW47CiAgICAKICAgICBib29s
IG1faW5Db3B5aW5nUGhhc2U7CiAgICAgYm9vbCBtX3Nob3VsZERvQ29weVBoYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJl
dmlzaW9uIDE2MTk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBpbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnMoQ29waWVkQmxvY2sqIGJsb2Nr
KQogewotICAgIHJldHVybiAhbV9ibG9ja0ZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oYmxvY2spKSAmJiBtX2Jsb2NrU2V0LmNvbnRhaW5zKGJsb2NrKTsKKyAgICByZXR1cm4g
KCFtX25ld0dlbi5ibG9ja0ZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKSB8fCAhbV9vbGRHZW4uYmxvY2tGaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJp
dHM+KGJsb2NrKSkpCisgICAgICAgICYmIG1fYmxvY2tTZXQuY29udGFpbnMoYmxvY2spOwogfQog
CiBpbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnModm9pZCogcHRyLCBDb3BpZWRCbG9j
ayomIHJlc3VsdCkKQEAgLTkyLDcgKzkzLDcgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBp
bklmTmVjZXNzYXJ5KAogICAgICAgICBwaW4oYmxvY2spOwogfQogCi1pbmxpbmUgdm9pZCBDb3Bp
ZWRTcGFjZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaykKK2lubGlu
ZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJs
b2NrLCBIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogewogICAgIEFTU0VSVChibG9jayk7
CiAgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOwpAQCAtMTAwLDcgKzEwMSwxMCBA
QCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUV2YWN1YXRlCiAgICAgewogICAgICAg
ICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwogICAgICAgICBtX2Jsb2Nr
U2V0LnJlbW92ZShibG9jayk7Ci0gICAgICAgIG1fZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOwor
ICAgICAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCisgICAgICAgICAg
ICBtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fb2xkR2VuLmZyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKICAgICB9CiAgICAgbV9o
ZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxv
Y2spKTsKIH0KQEAgLTE0MSw4ICsxNDUsOCBAQCBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6YWxs
b2NhdGVCbG9jaygpCiAgICAgCiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6
OmNyZWF0ZShtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8Q29waWVkQmxvY2s+KCkp
OwogICAgICAgICAKLSAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOwotICAgIG1fYmxvY2tGaWx0
ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICBtX25ld0dlbi50b1Nw
YWNlLT5wdXNoKGJsb2NrKTsKKyAgICBtX25ld0dlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnBy
ZXRfY2FzdDxCaXRzPihibG9jaykpOwogICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKICAgICBt
X2FsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxvY2spOwogfQpAQCAtMTc0LDYgKzE3OCw4NSBA
QCBpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpibG9ja0ZvCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihyZWludGVycHJldF9jYXN0PHNpemVfdD4ocHRy
KSAmIHNfYmxvY2tNYXNrKTsKIH0KIAordGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVjdGlv
blR5cGU+CitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAg
IERvdWJseUxpbmtlZExpc3Q8Q29waWVkQmxvY2s+KiBmcm9tU3BhY2U7CisgICAgRG91Ymx5TGlu
a2VkTGlzdDxDb3BpZWRCbG9jaz4qIG92ZXJzaXplQmxvY2tzOworICAgIFRpbnlCbG9vbUZpbHRl
ciogYmxvY2tGaWx0ZXI7CisgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9u
KSB7CisgICAgICAgIEFTU0VSVChtX29sZEdlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisgICAg
ICAgIEFTU0VSVChtX25ld0dlbi5mcm9tU3BhY2UtPmlzRW1wdHkoKSk7CisKKyAgICAgICAgbV9v
bGRHZW4udG9TcGFjZS0+YXBwZW5kKCptX25ld0dlbi50b1NwYWNlKTsKKyAgICAgICAgbV9vbGRH
ZW4ub3ZlcnNpemVCbG9ja3MuYXBwZW5kKG1fbmV3R2VuLm92ZXJzaXplQmxvY2tzKTsKKworICAg
ICAgICBBU1NFUlQobV9uZXdHZW4udG9TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJU
KG1fbmV3R2VuLmZyb21TcGFjZS0+aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1fbmV3R2Vu
Lm92ZXJzaXplQmxvY2tzLmlzRW1wdHkoKSk7CisKKyAgICAgICAgc3RkOjpzd2FwKG1fb2xkR2Vu
LmZyb21TcGFjZSwgbV9vbGRHZW4udG9TcGFjZSk7CisgICAgICAgIGZyb21TcGFjZSA9IG1fb2xk
R2VuLmZyb21TcGFjZTsKKyAgICAgICAgb3ZlcnNpemVCbG9ja3MgPSAmbV9vbGRHZW4ub3ZlcnNp
emVCbG9ja3M7CisgICAgICAgIGJsb2NrRmlsdGVyID0gJm1fb2xkR2VuLmJsb2NrRmlsdGVyOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6c3dhcChtX25ld0dlbi5mcm9tU3BhY2UsIG1fbmV3
R2VuLnRvU3BhY2UpOworICAgICAgICBmcm9tU3BhY2UgPSBtX25ld0dlbi5mcm9tU3BhY2U7Cisg
ICAgICAgIG92ZXJzaXplQmxvY2tzID0gJm1fbmV3R2VuLm92ZXJzaXplQmxvY2tzOworICAgICAg
ICBibG9ja0ZpbHRlciA9ICZtX25ld0dlbi5ibG9ja0ZpbHRlcjsKKyAgICB9CisKKyAgICBibG9j
a0ZpbHRlci0+cmVzZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwor
CisgICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9
IDA7CisgICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIGZvciAoQ29waWVkQmxv
Y2sqIGJsb2NrID0gZnJvbVNwYWNlLT5oZWFkKCk7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAg
ICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7CisgICAgICAgIGlmICghYmxvY2stPmlzUGlubmVk
KCkgJiYgYmxvY2stPmNhbkJlUmVjeWNsZWQoKSkgeworICAgICAgICAgICAgcmVjeWNsZUV2YWN1
YXRlZEJsb2NrKGJsb2NrLCBjb2xsZWN0aW9uVHlwZSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQoYmxvY2stPmxpdmVCeXRlcygpIDw9IENvcGllZEJs
b2NrOjpibG9ja1NpemUpOworICAgICAgICB0b3RhbExpdmVCeXRlcyArPSBibG9jay0+bGl2ZUJ5
dGVzKCk7CisgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMgKz0gYmxvY2stPnBheWxvYWRDYXBhY2l0
eSgpOworICAgICAgICBibG9jay0+ZGlkUHJvbW90ZSgpOworICAgIH0KKworICAgIENvcGllZEJs
b2NrKiBibG9jayA9IG92ZXJzaXplQmxvY2tzLT5oZWFkKCk7CisgICAgd2hpbGUgKGJsb2NrKSB7
CisgICAgICAgIENvcGllZEJsb2NrKiBuZXh0ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYg
KGJsb2NrLT5pc1Bpbm5lZCgpKSB7CisgICAgICAgICAgICBibG9ja0ZpbHRlci0+YWRkKHJlaW50
ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICAgICAgICAgIHRvdGFsTGl2ZUJ5dGVzICs9
IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIHRvdGFsVXNhYmxlQnl0ZXMg
Kz0gYmxvY2stPnBheWxvYWRDYXBhY2l0eSgpOworICAgICAgICAgICAgYmxvY2stPmRpZFByb21v
dGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG92ZXJzaXplQmxvY2tzLT5yZW1v
dmUoYmxvY2spOworICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAg
ICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGVDdXN0b21TaXplKENvcGll
ZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisgICAgICAgIH0gCisgICAgICAgIGJsb2NrID0gbmV4
dDsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0
U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRpb24gPSBzdGF0
aWNfY2FzdDxkb3VibGU+KHRvdGFsTGl2ZUJ5dGVzICsgbWFya2VkU3BhY2VCeXRlcykgLyBzdGF0
aWNfY2FzdDxkb3VibGU+KHRvdGFsVXNhYmxlQnl0ZXMgKyBtYXJrZWRTcGFjZUJ5dGVzKTsKKyAg
ICBtX3Nob3VsZERvQ29weVBoYXNlID0gbV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0g
RWRlbkNvbGxlY3Rpb24gfHwgdG90YWxGcmFnbWVudGF0aW9uIDw9IE9wdGlvbnM6Om1pbkhlYXBV
dGlsaXphdGlvbigpOworICAgIGlmICghbV9zaG91bGREb0NvcHlQaGFzZSkgeworICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIlNraXBwZWQgY29weWlu
ZywgIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKKyAgICAgICAgZGF0YUxvZ0YoIkRpZCBjb3B5LCAiKTsKKyAgICBBU1NFUlQobV9zaG91bGRE
b0NvcHlQaGFzZSk7CisgICAgQVNTRVJUKCFtX251bWJlck9mTG9hbmVkQmxvY2tzKTsKKyAgICBB
U1NFUlQoIW1faW5Db3B5aW5nUGhhc2UpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIENvcGllZFNwYWNlSW5saW5lc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwCShyZXZp
c2lvbiAxNjE5OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBDb3B5VmlzaXRvcjo6Y29w
eUZyb21TaGFyZWQoKQogICAgICAgICAgICAgICAgIHZpc2l0SXRlbSgqaXQpOwogCiAgICAgICAg
ICAgICBBU1NFUlQoIWJsb2NrLT5saXZlQnl0ZXMoKSk7Ci0gICAgICAgICAgICBtX3NoYXJlZC5t
X2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworICAgICAgICAgICAg
bV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrLCBtX3No
YXJlZC5tX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgbV9zaGFyZWQuZ2V0TmV4dEJsb2Nrc1RvQ29weShuZXh0LCBlbmQpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCShy
ZXZpc2lvbiAxNjE5OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRv
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBpbmxpbmUgYm9vbCBD
b3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvCiBpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFs
bG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQogewogICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8v
IENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgotICAg
IGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQp
KSkKKyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29w
eWluZyhieXRlcywgJnJlc3VsdCkpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAg
IHJlc3VsdCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKQEAgLTcwLDcgKzcwLDcgQEAg
aW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYQogICAgIG1fY29waWVkQWxs
b2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CiAKICAgICB2b2lkKiByZXN1bHQgPSAw
OwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlB
bGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9
IG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlRHVyaW5nQ29weWluZyhieXRlcywgJnJlc3Vs
dCk7CiAgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5j
cHAJKHJldmlzaW9uIDE2MTk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhy
ZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsMTUgQEAgdm9p
ZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZwogewogICAgIHsKICAgICAgICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKLSAgICAgICAgV1RGOjpjb3B5VG9W
ZWN0b3IobV9jb3BpZWRTcGFjZS0+bV9ibG9ja1NldCwgbV9ibG9ja3NUb0NvcHkpOworICAgICAg
ICBpZiAobV92bS0+aGVhcC5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24p
IHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB2ZWN0b3IgdG8gYmUgZW1wdHksIGJ1dCBkb24n
dCB0aHJvdyBhd2F5IHRoZSBiYWNraW5nIHN0b3JlLgorICAgICAgICAgICAgbV9ibG9ja3NUb0Nv
cHkuc2hyaW5rKDApOworICAgICAgICAgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX2Nv
cGllZFNwYWNlLT5tX25ld0dlbi5mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gYmxv
Y2stPm5leHQoKSkKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5hcHBlbmQoYmxvY2sp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fdm0tPmhlYXAub3BlcmF0
aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uKTsKKyAgICAgICAgICAgIFdURjo6Y29w
eVRvVmVjdG9yKG1fY29waWVkU3BhY2UtPm1fYmxvY2tTZXQsIG1fYmxvY2tzVG9Db3B5KTsKKyAg
ICAgICAgfQogICAgICAgICBtX2NvcHlJbmRleCA9IDA7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTYxOTk1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MSwxMCArNjQxLDcg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24gY29sbGVj
dGlvblR5cGU+CiB2b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAoY29s
bGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRl
ZENvcHlpbmc8Y29sbGVjdGlvblR5cGU+KCk7CiAgICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNob3Vs
ZERvQ29weVBoYXNlKCkpIHsKICAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29weWluZygp
OwogICAgICAgICBtX2NvcHlWaXNpdG9yLnN0YXJ0Q29weWluZygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE2
MTk5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTggKzIyNSwxNyBAQCBpbmxpbmUgdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlQW5kRHJhaW4oCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVy
KEpTQ2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdm9pZCogcHRyLCBzaXplX3QgYnl0ZXMp
CiB7CiAgICAgQVNTRVJUKGJ5dGVzKTsKLSAgICAvLyBXZSBkb24ndCBkbyBhbnkgY29weWluZyBk
dXJpbmcgRWRlbkNvbGxlY3Rpb25zLgotICAgIEFTU0VSVChoZWFwKCktPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKSAhPSBFZGVuQ29sbGVjdGlvbik7Ci0KLSAgICBtX2J5dGVzQ29waWVkICs9IGJ5dGVz
OwotCiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7
CiAgICAgaWYgKGJsb2NrLT5pc092ZXJzaXplKCkpIHsKICAgICAgICAgbV9zaGFyZWQubV9jb3Bp
ZWRTcGFjZS0+cGluKGJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJsb2Nr
LT5yZXBvcnRMaXZlQnl0ZXMob3duZXIsIHRva2VuLCBieXRlcyk7CisgICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOworICAgIGlmIChoZWFwKCktPm9wZXJh
dGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbiB8fCBibG9jay0+c2hvdWxkUmVwb3J0
TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIpKSB7CisgICAgICAgIG1fYnl0ZXNDb3BpZWQgKz0gYnl0
ZXM7CisgICAgICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMobG9ja2VyLCBvd25lciwgdG9rZW4s
IGJ5dGVzKTsKKyAgICB9CiB9CiAgICAgCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0
RXh0cmFNZW1vcnlVc2FnZShKU0NlbGwqIG93bmVyLCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RpbnlCbG9vbUZpbHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RpbnlCbG9vbUZpbHRlci5oCShyZXZpc2lvbiAxNjE5
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaW55Qmxvb21GaWx0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBwdWJsaWM6CiAgICAgVGlueUJsb29tRmlsdGVy
KCk7CiAKICAgICB2b2lkIGFkZChCaXRzKTsKKyAgICB2b2lkIGFkZChUaW55Qmxvb21GaWx0ZXIm
KTsKICAgICBib29sIHJ1bGVPdXQoQml0cykgY29uc3Q7IC8vIFRydWUgZm9yIDAuCiAgICAgdm9p
ZCByZXNldCgpOwogCkBAIC01Miw2ICs1MywxMSBAQCBpbmxpbmUgdm9pZCBUaW55Qmxvb21GaWx0
ZXI6OmFkZChCaXRzIGJpCiAgICAgbV9iaXRzIHw9IGJpdHM7CiB9CiAKK2lubGluZSB2b2lkIFRp
bnlCbG9vbUZpbHRlcjo6YWRkKFRpbnlCbG9vbUZpbHRlciYgb3RoZXIpCit7CisgICAgbV9iaXRz
IHw9IG90aGVyLm1fYml0czsKK30KKwogaW5saW5lIGJvb2wgVGlueUJsb29tRmlsdGVyOjpydWxl
T3V0KEJpdHMgYml0cykgY29uc3QKIHsKICAgICBpZiAoIWJpdHMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>