<?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>132166</bug_id>
          
          <creation_ts>2014-04-24 20:45:01 -0700</creation_ts>
          <short_desc>GC should be able to remove things from the DFG worklist and cancel on-going compilations if it knows that the compilation would already be invalidated</short_desc>
          <delta_ts>2014-04-28 12:13:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>132167</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>juergen</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1003951</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-24 20:45:01 -0700</bug_when>
    <thetext>This will be fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004305</commentid>
    <comment_count>1</comment_count>
      <attachid>230233</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-25 19:51:32 -0700</bug_when>
    <thetext>Created attachment 230233
I am afraid to try running this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004374</commentid>
    <comment_count>2</comment_count>
      <attachid>230253</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-26 20:49:39 -0700</bug_when>
    <thetext>Created attachment 230253
possibly done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004377</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-26 22:08:32 -0700</bug_when>
    <thetext>This appears to help but the fact that we may have a running plan hurts us.  It would be even cooler if we could cancel the running plans.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004424</commentid>
    <comment_count>4</comment_count>
      <attachid>230262</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-27 11:35:19 -0700</bug_when>
    <thetext>Created attachment 230262
more

Adding cancellation to DFG::Safepoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004431</commentid>
    <comment_count>5</comment_count>
      <attachid>230265</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-27 12:59:49 -0700</bug_when>
    <thetext>Created attachment 230265
all the pieces are in place</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004442</commentid>
    <comment_count>6</comment_count>
      <attachid>230269</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-27 15:03:45 -0700</bug_when>
    <thetext>Created attachment 230269
might actually be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004454</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-27 17:48:01 -0700</bug_when>
    <thetext>*** Bug 132236 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004456</commentid>
    <comment_count>8</comment_count>
      <attachid>230273</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-27 18:38:01 -0700</bug_when>
    <thetext>Created attachment 230273
and now, plans are cancellable at *any* time

There is no escape from the GC cancellation monster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004473</commentid>
    <comment_count>9</comment_count>
      <attachid>230276</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-27 20:26:26 -0700</bug_when>
    <thetext>Created attachment 230276
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004474</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-27 20:29:32 -0700</bug_when>
    <thetext>Attachment 230276 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:127:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004613</commentid>
    <comment_count>11</comment_count>
      <attachid>230276</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-04-28 09:24:45 -0700</bug_when>
    <thetext>Comment on attachment 230276
the patch

yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004625</commentid>
    <comment_count>12</comment_count>
      <attachid>230276</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-28 09:56:35 -0700</bug_when>
    <thetext>Comment on attachment 230276
the patch

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

What are some good stress tests for this stuff? gbemu? Our compiler-heavy benchmarks on platforms with &lt;= 2 cores? Maybe something with a bunch of workers all doing compilation?

&gt; Source/JavaScriptCore/dfg/DFGSafepoint.cpp:105
&gt; +        return true; // We were cancelled during a previous GC, so let&apos;s not mess with it this time around - pretend it&apos;s live and move on.

I don&apos;t understand this. Can you elaborate?

&gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:272
&gt; +            Deque&lt;RefPtr&lt;Plan&gt;&gt; newQueue;
&gt; +            while (!m_queue.isEmpty()) {
&gt; +                RefPtr&lt;Plan&gt; plan = m_queue.takeFirst();
&gt; +                if (plan-&gt;stage != Plan::Cancelled)
&gt; +                    continue;
&gt; +                newQueue.append(plan);
&gt; +            }
&gt; +            m_queue.swap(newQueue);

Hmm, I&apos;m confused by this code. What I see is:

(1) Create a new queue with all of the plans whose stage == Cancelled.
(2) Replace the old work queue with just the new queue of cancelled items.

I would think we would want to throw away the Cancelled plans and keep the non-cancelled ones. Is this what we&apos;re doing and I&apos;m just being dense?

&gt; Source/JavaScriptCore/heap/Heap.cpp:638
&gt; +    GCPHASE(FinalizerDFGWorklists);

s/FinalizerDFGWorklists/FinalizeDFGWorklists/ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004677</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-28 11:31:37 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 230276 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230276&amp;action=review
&gt; 
&gt; What are some good stress tests for this stuff? gbemu? Our compiler-heavy benchmarks on platforms with &lt;= 2 cores? Maybe something with a bunch of workers all doing compilation?

Our stress testing infrastructure can already do this, more-or-less.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSafepoint.cpp:105
&gt; &gt; +        return true; // We were cancelled during a previous GC, so let&apos;s not mess with it this time around - pretend it&apos;s live and move on.
&gt; 
&gt; I don&apos;t understand this. Can you elaborate?

The GC doesn&apos;t remove safepoints.  The GC cannot force forward progress in the compiler thread.  So, after we cancel the plan associated with a safepoint (i.e. cancel the safepoint), a subsequent GC may still see the same safepoint - in a cancelled state - with a cancelled plan.  This code gracefully ignores such safepoints since there is nothing left to do for them and they do not reference any GC memory anymore.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGWorklist.cpp:272
&gt; &gt; +            Deque&lt;RefPtr&lt;Plan&gt;&gt; newQueue;
&gt; &gt; +            while (!m_queue.isEmpty()) {
&gt; &gt; +                RefPtr&lt;Plan&gt; plan = m_queue.takeFirst();
&gt; &gt; +                if (plan-&gt;stage != Plan::Cancelled)
&gt; &gt; +                    continue;
&gt; &gt; +                newQueue.append(plan);
&gt; &gt; +            }
&gt; &gt; +            m_queue.swap(newQueue);
&gt; 
&gt; Hmm, I&apos;m confused by this code. What I see is:
&gt; 
&gt; (1) Create a new queue with all of the plans whose stage == Cancelled.
&gt; (2) Replace the old work queue with just the new queue of cancelled items.
&gt; 
&gt; I would think we would want to throw away the Cancelled plans and keep the non-cancelled ones. Is this what we&apos;re doing and I&apos;m just being dense?

Yeah, the logic was inverted.  Thanks for catching it!

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:638
&gt; &gt; +    GCPHASE(FinalizerDFGWorklists);
&gt; 
&gt; s/FinalizerDFGWorklists/FinalizeDFGWorklists/ ?

Lol I will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004687</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-28 12:13:22 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/167897</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230233</attachid>
            <date>2014-04-25 19:51:32 -0700</date>
            <delta_ts>2014-04-26 20:49:39 -0700</delta_ts>
            <desc>I am afraid to try running this patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13587</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3Miw2ICsxOTcyLDQ5IEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJp
bmdTY2FuKCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBJbnRlcnByZXRlciBhbmQg
QmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4K
KyAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhp
cyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBp
ZgorICAgIC8vIHRoZXkgYXJlIGV4ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRo
ZWlyIHdlYWsgcmVmZXJlbmNlcyB0bworICAgIC8vIGFsbG93IHRoZW0gdG8gY29udGludWUgdG8g
ZXhlY3V0ZSBzb3VuZGx5LgorICAgIGlmIChtX21heUJlRXhlY3V0aW5nKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZURGR0NvZGVCbG9ja0xpdmVuZXNzKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitib29sIENvZGVCbG9jazo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFRoaXMgc2hvdWxkIHJl
dHVybiB0cnVlIGZvcjoKKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgYmVoYXZlIGxpa2Ugbm9y
bWFsIG9iamVjdHMgLSBpLmUuIGlmIHRoZXkgYXJlIHJlZmVyZW5jZWQgdGhlbiB0aGV5CisgICAg
Ly8gICBhcmUgbGl2ZS4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgd2VyZSBydW5uaW5nIG9u
IHRoZSBzdGFjay4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgc3Vydml2ZWQgdGhlIGxhc3Qg
R0MgaWYgdGhlIGN1cnJlbnQgR0MgaXMgYW4gRWRlbiBHQy4gVGhpcyBpcworICAgIC8vICAgYmVj
YXVzZSBlaXRoZXIgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMg
dHJ1ZSBvciBtX21heUJlRXhlY3V0aW5nCisgICAgLy8gICB3b3VsZCBzdXJ2aXZlIGFzIHRydWUu
CisgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IGRvbid0IGhhdmUgYW55IGRlYWQgd2VhayByZWZl
cmVuY2VzLgorICAgIAorICAgIHJldHVybiBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2NhbigpCisgICAgICAgIHx8IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNz
SGFzQmVlblByb3ZlZDsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKQEAgLTIyMTUsNyArMjI1OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlz
b24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7Cisg
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIGhhcyBkZWFkIHdl
YWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxuIik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwMSwyOSArMTAwMSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wQXJyYXlQ
cm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBib29sJiBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKICAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJpbnRTdHJlYW0m
LCBjb25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBoYXNQcmludGVkUHJv
ZmlsaW5nKTsKICAgICAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgYm9vbCBzaG91bGRJ
bW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpCi0gICAgewotICAgICAgICAvLyBJ
bnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBq
ZXR0aXNvbmVkIHdoZW4KLSAgICAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2VzIGdvIHN0YWxl
LiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCi0gICAgICAgIC8vIHNjYW5uZWQs
IHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQncyBsaXZlLgotICAgICAgICBp
ZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIGRvbid0IGF0dGVtcHQg
dG8gamV0dGlzb24gY29kZSBibG9ja3MgZHVyaW5nIEdDIGlmCi0gICAgICAgIC8vIHRoZXkgYXJl
IGV4ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRoZWlyIHdlYWsgcmVmZXJlbmNl
cyB0bwotICAgICAgICAvLyBhbGxvdyB0aGVtIHRvIGNvbnRpbnVlIHRvIGV4ZWN1dGUgc291bmRs
eS4KLSAgICAgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2RlQmxvY2tMaXZlbmVzcygpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSNlbHNlCi0gICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nh
bigpIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgorICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlB
c3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCk7IC8vIFdpbGwgb25seSByZXR1cm4gdmFsaWQgcmVzdWx0cyB3aGVuIGNhbGxlZCBkdXJp
bmcgR0MuIEFzc3VtZXMgdGhhdCB5b3UndmUgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0IHRoZSBv
d25lciBleGVjdXRhYmxlIGlzIGxpdmUuCiAgICAgCiAgICAgdm9pZCBwcm9wYWdhdGVUcmFuc2l0
aW9ucyhTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpc2l0
b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24g
MTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIFBsYW46OlBsYW4oUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IHBhc3NlZEMKICAgICAsIGlkZW50aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKICAgICAsIHdl
YWtSZWZlcmVuY2VzKGNvZGVCbG9jay5nZXQoKSkKICAgICAsIHdpbGxUcnlUb1RpZXJVcChmYWxz
ZSkKLSAgICAsIGlzQ29tcGlsZWQoZmFsc2UpCisgICAgLCBzdGFnZShQcmVwYXJpbmcpCiB7CiB9
CiAKQEAgLTM4NCwxMCArMzg0LDE1IEBAIHZvaWQgUGxhbjo6cmVhbGx5QWRkKENvbW1vbkRhdGEq
IGNvbW1vbkQKICAgICB3cml0ZUJhcnJpZXJzLnRyaWdnZXIodm0pOwogfQogCit2b2lkIFBsYW46
Om5vdGlmeUNvbXBpbGluZygpCit7CisgICAgc3RhZ2UgPSBDb21waWxpbmc7Cit9CisKIHZvaWQg
UGxhbjo6bm90aWZ5UmVhZHkoKQogewogICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJlY29t
ZVJlYWR5QXN5bmNocm9ub3VzbHkoY29kZUJsb2NrLmdldCgpKTsKLSAgICBpc0NvbXBpbGVkID0g
dHJ1ZTsKKyAgICBzdGFnZSA9IENvbXBpbGVkOwogfQogCiBDb21waWxhdGlvblJlc3VsdCBQbGFu
OjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCkBAIC00MTksOCArNDI0LDExIEBA
IENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQordm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
ciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogeworICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkVmFsdWUoJm11c3RIYW5kbGVWYWx1ZXNbaV0pOwogICAgIApAQCAtNDM0
LDYgKzQ0MiwxOSBAQCB2b2lkIFBsYW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpCiAg
ICAgdHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorYm9vbCBQbGFuOjpp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpCit7CisgICAgaWYgKHN0YWdlICE9IFByZXBhcmluZykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFIZWFwOjppc01hcmtlZChjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhcHJvZmlsZWRERkdDb2RlQmxvY2sgJiYgIXByb2Zp
bGVkREZHQ29kZUJsb2NrLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsMTMgQEAgc3RydWN0IFBs
YW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZp
bmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUFuZE5v
dGlmeUNhbGxiYWNrKCk7CiAgICAgCisgICAgdm9pZCBub3RpZnlDb21waWxpbmcoKTsKICAgICB2
b2lkIG5vdGlmeVJlYWR5KCk7CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAg
Ci0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7Cisg
ICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYsIENvZGVC
bG9ja1NldCYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICAKICAg
ICBWTSYgdm07CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwpAQCAtOTYsOCArOTgs
OSBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgYm9vbCB3
aWxsVHJ5VG9UaWVyVXA7CiAKICAgICBkb3VibGUgYmVmb3JlRlRMOwotICAgIAotICAgIGJvb2wg
aXNDb21waWxlZDsKKworICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENvbXBpbGluZywgQ29t
cGlsZWQgfTsKKyAgICBTdGFnZSBzdGFnZTsKIAogICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBA
QCBXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhCiAgICAgUGxhbk1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuZmluZChrZXkpOwogICAgIGlmIChpdGVyID09IG1fcGxh
bnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBOb3RLbm93bjsKLSAgICByZXR1cm4gaXRlci0+dmFs
dWUtPmlzQ29tcGlsZWQgPyBDb21waWxlZCA6IENvbXBpbGluZzsKKyAgICByZXR1cm4gaXRlci0+
dmFsdWUtPnN0YWdlID09IENvbXBpbGVkID8gQ29tcGlsZWQgOiBDb21waWxpbmc7CiB9CiAKIHZv
aWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYgdm0pCkBAIC0x
MzAsNyArMTMwLDcgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZQog
ICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmICgmaXRlci0+dmFsdWUtPnZtICE9
ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghaXRlci0+
dmFsdWUtPmlzQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2Ug
IT0gQ29tcGlsZWQpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVDb21waWxlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTUxLDcgKzE1MSw3IEBA
IHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgKICAgICAgICAgUmVmUHRy
PFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAgIGlmICgmcGxhbi0+dm0gIT0g
JnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcGxhbi0+aXNDb21waWxl
ZCkKKyAgICAgICAgaWYgKHBsYW4tPnN0YWdlICE9IENvbXBpbGVkKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIG15UmVhZHlQbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgIG1fcmVh
ZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKQEAgLTE4Miw3ICsxODIsNyBAQCBX
b3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhCiAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQogICAgICAgICAgICAgZGF0YUxvZygqdGhp
cywgIjogQ29tcGxldGluZyAiLCBjdXJyZW50S2V5LCAiXG4iKTsKICAgICAgICAgCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChwbGFuLT5zdGFnZSA9PSBDb21waWxlZCk7CiAgICAgICAgIAogICAgICAgICBwbGFuLT5maW5h
bGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgICAgIApAQCAtMjIwLDIwICsyMjAsMTAgQEAg
dm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51
bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQordm9pZCBXb3JrbGlzdDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSogdm0gPSB2aXNpdG9yLmhl
YXAoKS0+dm0oKTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0
ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBQbGFuKiBwbGFuID0g
aXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoJnBsYW4tPnZtICE9IHZtKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXRlci0+dmFsdWUtPnZpc2l0Q2hp
bGRyZW4odmlzaXRvciwgY29kZUJsb2Nrcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ly8gVGhpcyBsb29wIGRvZXNuJ3QgbmVlZCBmdXJ0aGVyIGxvY2tpbmcgYmVjYXVzZToKKyAgICAv
LyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGxvY2tpbmcgYmVjYXVzZToKICAgICAvLyAoMSkgbm8g
bmV3IHRocmVhZHMgY2FuIGJlIGFkZGVkIHRvIG1fdGhyZWFkcy4gSGVuY2UsIGl0IGlzIGltbXV0
YWJsZSBhbmQgbmVlZHMgbm8gbG9ja3MuCiAgICAgLy8gKDIpIFRocmVhZERhdGE6Om1fc2FmZXBv
aW50IGlzIHByb3RlY3RlZCBieSB0aGF0IHRocmVhZCdzIG1fcmlnaHRUb1J1biB3aGljaCB3ZSBt
dXN0IGJlCiAgICAgLy8gICAgIGhvbGRpbmcgaGVyZSBiZWNhdXNlIG9mIGEgcHJpb3IgY2FsbCB0
byBzdXNwZW5kQWxsVGhyZWFkcygpLgpAQCAtMjQ1LDYgKzIzNSw0NiBAQCB2b2lkIFdvcmtsaXN0
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yCiAgICAgfQogfQogCit2b2lkIFdvcmtsaXN0Ojp2
aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBDb2RlQmxvY2tTZXQmIGNv
ZGVCbG9ja3MpCit7CisgICAgVk0qIHZtID0gdmlzaXRvci5oZWFwKCktPnZtKCk7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICgmcGxhbi0+
dm0gIT0gdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaXRlci0+dmFsdWUtPmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IsIGNvZGVCbG9ja3MpOworICAgIH0K
K30KKwordm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKCkKK3sKKyAgICBWTSogdm0gPSB2
aXNpdG9yLmhlYXAoKS0+dm0oKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5LCA4PiBkZWFkUGxhbktleXM7CisgICAgVmVjdG9yPENv
bXBpbGF0aW9uS2V5LCA4PiBkZWFkUGxhbktleXM7CisgICAgZm9yIChQbGFuTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICgm
cGxhbi0+dm0gIT0gdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHBsYW4t
PmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPT0gUHJlcGFyaW5nKTsKKyAgICAgICAgQVNT
RVJUKCFkZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpKTsKKyAgICAgICAgZGVhZFBs
YW5LZXlzLmFkZChwbGFuLT5rZXkoKSk7CisgICAgfQorICAgIGlmIChkZWFkUGxhbktleXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgRGVxdWU8UmVmUHRyPFBsYW4+PiBuZXdRdWV1
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9xdWV1ZS5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoZGVhZFBsYW5LZXlzLmNvbnRhaW5zKG1fcXVldWVbaV0tPmtleSgpKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBuZXdRdWV1ZS5hcHBlbmQobV9xdWV1ZVtpXSk7
CisgICAgfQorICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktleSwgOD46Oml0ZXJhdG9yIGl0
ZXIgPSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsr
ZGVhZFBsYW5LZXlzKQorICAgICAgICBtX3BsYW5zLnJlbW92ZSgqaXRlcik7Cit9CisKIHNpemVf
dCBXb3JrbGlzdDo6cXVldWVMZW5ndGgoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xv
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNp
b24gMTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBp
c0FjdGl2ZUZvclZNKFZNJikgY29uc3Q7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7IC8vIE9ubHkgY2FsbGVkIG9uIHRoZSBtYWluIHRo
cmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgorICAgIC8vIE9ubHkgY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZCBhZnRlciBzdXNwZW5kaW5nIGFsbCB0aHJlYWRzLgorICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYsIENvZGVCbG9ja1NldCYpOworICAgIHZvaWQgcmVtb3ZlRGVhZFBsYW5z
KCk7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNyw3
ICs2MjcsNyBAQCB2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdHMoKQogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIEdDUEhBU0UoVmlzaXRERkdXb3JrbGlzdHMpOwogICAgIGZvciAoYXV0
byB3b3JrbGlzdCA6IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMpCi0gICAgICAgIHdvcmts
aXN0LT52aXNpdENoaWxkcmVuKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CisgICAgICAg
IHdvcmtsaXN0LT52aXNpdENoaWxkcmVuKG1fc2xvdFZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJERkcg
V29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CkBAIC02MzYsNiArNjM2LDI3IEBAIHZvaWQg
SGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0cygpCiAjZW5kaWYKIH0KIAordm9pZCBIZWFwOjp2
aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpCit7CisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgR0NQSEFTRShWaXNpdERGR1dvcmtsaXN0V2Vha1JlZmVyZW5jZXMpOworICAgIGZv
ciAoYXV0byB3b3JrbGlzdCA6IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMpCisgICAgICAg
IHdvcmtsaXN0LT52aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nr
cyk7CisKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyNlbmRp
ZgorfQorCit2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpCit7
CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgR0NQSEFTRShGaW5hbGl6ZXJERkdXb3JrbGlzdHMp
OworICAgIGZvciAoYXV0byB3b3JrbGlzdCA6IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMp
CisgICAgICAgIHdvcmtsaXN0LT5yZW1vdmVEZWFkUGxhbnMoKTsKKyNlbmRpZgorfQorCiB2b2lk
IEhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290Vmlz
aXRvcikKIHsKICAgICBHQ1BIQVNFKFZpc2l0UHJvdGVjdGVkT2JqZWN0cyk7CkBAIC03NDMsNiAr
NzY0LDcgQEAgdm9pZCBIZWFwOjp2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaQogICAgIHdo
aWxlICh0cnVlKSB7CiAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9y
KTsKICAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIHZpc2l0Q29tcGls
ZXJXb3JrbGlzdFdlYWtSZWZlcmVudmVzKCk7CiAgICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC05OTgsNiArMTAyMCw3IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICBjb3B5QmFja2luZ1N0b3Jl
cygpOwogCiAgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIHJlbW92
ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAgIGRlbGV0ZVVubWFya2VkQ29tcGls
ZWRDb2RlKCk7CiAgICAgZGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKICAgICBub3RpZnlJ
bmNyZW1lbnRhbFN3ZWVwZXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230253</attachid>
            <date>2014-04-26 20:49:39 -0700</date>
            <delta_ts>2014-04-27 11:35:19 -0700</delta_ts>
            <desc>possibly done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15204</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3Miw2ICsxOTcyLDQ5IEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJp
bmdTY2FuKCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBJbnRlcnByZXRlciBhbmQg
QmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4K
KyAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhp
cyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBp
ZgorICAgIC8vIHRoZXkgYXJlIGV4ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRo
ZWlyIHdlYWsgcmVmZXJlbmNlcyB0bworICAgIC8vIGFsbG93IHRoZW0gdG8gY29udGludWUgdG8g
ZXhlY3V0ZSBzb3VuZGx5LgorICAgIGlmIChtX21heUJlRXhlY3V0aW5nKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZURGR0NvZGVCbG9ja0xpdmVuZXNzKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitib29sIENvZGVCbG9jazo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFRoaXMgc2hvdWxkIHJl
dHVybiB0cnVlIGZvcjoKKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgYmVoYXZlIGxpa2Ugbm9y
bWFsIG9iamVjdHMgLSBpLmUuIGlmIHRoZXkgYXJlIHJlZmVyZW5jZWQgdGhlbiB0aGV5CisgICAg
Ly8gICBhcmUgbGl2ZS4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgd2VyZSBydW5uaW5nIG9u
IHRoZSBzdGFjay4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgc3Vydml2ZWQgdGhlIGxhc3Qg
R0MgaWYgdGhlIGN1cnJlbnQgR0MgaXMgYW4gRWRlbiBHQy4gVGhpcyBpcworICAgIC8vICAgYmVj
YXVzZSBlaXRoZXIgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMg
dHJ1ZSBvciBtX21heUJlRXhlY3V0aW5nCisgICAgLy8gICB3b3VsZCBzdXJ2aXZlIGFzIHRydWUu
CisgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IGRvbid0IGhhdmUgYW55IGRlYWQgd2VhayByZWZl
cmVuY2VzLgorICAgIAorICAgIHJldHVybiBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2NhbigpCisgICAgICAgIHx8IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNz
SGFzQmVlblByb3ZlZDsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKQEAgLTIyMTUsNyArMjI1OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlz
b24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7Cisg
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIGhhcyBkZWFkIHdl
YWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxuIik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtOTQ3LDYgKzk0Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luVmFsaWRhdGlv
bkRpZEZhaWwoKTsKICAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlv
bkRpZEZhaWwoKTsKIAorICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsgLy8gV2ls
bCBvbmx5IHJldHVybiB2YWxpZCByZXN1bHRzIHdoZW4gY2FsbGVkIGR1cmluZyBHQy4gQXNzdW1l
cyB0aGF0IHlvdSd2ZSBhbHJlYWR5IGVzdGFibGlzaGVkIHRoYXQgdGhlIG93bmVyIGV4ZWN1dGFi
bGUgaXMgbGl2ZS4KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CkBAIC0xMDAxLDI5ICsxMDAzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGR1bXBBcnJheVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgIHZvaWQgZHVtcFJhcmVD
YXNlUHJvZmlsZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmls
ZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2Fu
KCkKLSAgICB7Ci0gICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJs
b2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgotICAgICAgICAvLyB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdl
dHMKLSAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhh
dCBpdCdzIGxpdmUuCi0gICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBGb3Igc2ltcGxp
Y2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJsb2NrcyBkdXJpbmcgR0Mg
aWYKLSAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFkIHdlIHN0cm9uZ2x5IG1h
cmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCi0gICAgICAgIC8vIGFsbG93IHRoZW0gdG8gY29u
dGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9tYXlCZUV4ZWN1dGluZykK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpmb3JjZURG
R0NvZGVCbG9ja0xpdmVuZXNzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2Vsc2UKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5
QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCisgICAg
Ym9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpOwogICAgIAog
ICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBQbGFu
OjpQbGFuKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDCiAgICAgLCBpZGVudGlmaWVycyhj
b2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCiAg
ICAgLCB3aWxsVHJ5VG9UaWVyVXAoZmFsc2UpCi0gICAgLCBpc0NvbXBpbGVkKGZhbHNlKQorICAg
ICwgc3RhZ2UoUHJlcGFyaW5nKQogewogfQogCkBAIC0zODQsMTAgKzM4NCwxNSBAQCB2b2lkIFBs
YW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmln
Z2VyKHZtKTsKIH0KIAordm9pZCBQbGFuOjpub3RpZnlDb21waWxpbmcoKQoreworICAgIHN0YWdl
ID0gQ29tcGlsaW5nOworfQorCiB2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKICAgICBjYWxs
YmFjay0+Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9jay5n
ZXQoKSk7Ci0gICAgaXNDb21waWxlZCA9IHRydWU7CisgICAgc3RhZ2UgPSBDb21waWxlZDsKIH0K
IAogQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJh
Y2soKQpAQCAtNDE5LDggKzQyNCwxMSBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAg
IHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwog
fQogCi12b2lkIFBsYW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVC
bG9ja1NldCYgY29kZUJsb2NrcykKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsK
KyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykK
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZtdXN0SGFuZGxlVmFsdWVz
W2ldKTsKICAgICAKQEAgLTQzNCw2ICs0NDIsMjEgQEAgdm9pZCBQbGFuOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aQogICAgIHRyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CiB9CiAKK2Jvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQoreworICAgIGlmICh0
cnVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RhZ2UgIT0gUHJlcGFyaW5nKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCktPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoISFwcm9maWxlZERGR0NvZGVCbG9jayAmJiAhcHJvZmls
ZWRERkdDb2RlQmxvY2stPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMyBAQCBzdHJ1Y3QgUGxh
biA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmlu
YWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKTsKICAgICB2b2lkIGZpbmFsaXplQW5kTm90
aWZ5Q2FsbGJhY2soKTsKICAgICAKKyAgICB2b2lkIG5vdGlmeUNvbXBpbGluZygpOwogICAgIHZv
aWQgbm90aWZ5UmVhZHkoKTsKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAK
LSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQmKTsKKyAg
ICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiwgQ29kZUJs
b2NrU2V0Jik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIAogICAg
IFZNJiB2bTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CkBAIC05Niw4ICs5OCw5
IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBib29sIHdp
bGxUcnlUb1RpZXJVcDsKIAogICAgIGRvdWJsZSBiZWZvcmVGVEw7Ci0gICAgCi0gICAgYm9vbCBp
c0NvbXBpbGVkOworCisgICAgZW51bSBTdGFnZSB7IFByZXBhcmluZywgQ29tcGlsaW5nLCBDb21w
aWxlZCB9OworICAgIFN0YWdlIHN0YWdlOwogCiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjaz4gY2FsbGJhY2s7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBA
IFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGEKICAgICBQbGFuTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9wbGFucy5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9wbGFu
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIE5vdEtub3duOwotICAgIHJldHVybiBpdGVyLT52YWx1
ZS0+aXNDb21waWxlZCA/IENvbXBpbGVkIDogQ29tcGlsaW5nOworICAgIHJldHVybiBpdGVyLT52
YWx1ZS0+c3RhZ2UgPT0gUGxhbjo6Q29tcGlsZWQgPyBDb21waWxlZCA6IENvbXBpbGluZzsKIH0K
IAogdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJiB2bSkK
QEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFdvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZN
QXJlCiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKCZpdGVyLT52YWx1ZS0+
dm0gIT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFp
dGVyLT52YWx1ZS0+aXNDb21waWxlZCkgeworICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT5z
dGFnZSAhPSBQbGFuOjpDb21waWxlZCkgewogICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBpbGVk
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNTEs
NyArMTUxLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKAogICAg
ICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcmVhZHlQbGFuc1tpXTsKICAgICAgICAgaWYgKCZw
bGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFwbGFu
LT5pc0NvbXBpbGVkKQorICAgICAgICBpZiAocGxhbi0+c3RhZ2UgIT0gUGxhbjo6Q29tcGlsZWQp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbXlSZWFkeVBsYW5zLmFwcGVuZChwbGFu
KTsKICAgICAgICAgbV9yZWFkeVBsYW5zW2ktLV0gPSBtX3JlYWR5UGxhbnMubGFzdCgpOwpAQCAt
MTgyLDcgKzE4Miw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWEK
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCiAgICAgICAg
ICAgICBkYXRhTG9nKCp0aGlzLCAiOiBDb21wbGV0aW5nICIsIGN1cnJlbnRLZXksICJcbiIpOwog
ICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+aXNDb21waWxlZCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlID09IFBsYW46OkNvbXBpbGVkKTsKICAgICAg
ICAgCiAgICAgICAgIHBsYW4tPmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKTsKICAgICAgICAg
CkBAIC0yMjAsMjAgKzIyMCwxMCBAQCB2b2lkIFdvcmtsaXN0OjpyZXN1bWVBbGxUaHJlYWRzKCkK
ICAgICBtX3N1c3BlbnNpb25Mb2NrLnVubG9jaygpOwogfQogCi12b2lkIFdvcmtsaXN0Ojp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3Mp
Cit2b2lkIFdvcmtsaXN0Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIFZNKiB2bSA9IHZpc2l0b3IuaGVhcCgpLT52bSgpOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGlm
ICgmcGxhbi0+dm0gIT0gdm0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBpdGVyLT52YWx1ZS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yLCBjb2RlQmxvY2tzKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGZ1cnRoZXIg
bG9ja2luZyBiZWNhdXNlOgorICAgIC8vIFRoaXMgbG9vcCBkb2Vzbid0IG5lZWQgbG9ja2luZyBi
ZWNhdXNlOgogICAgIC8vICgxKSBubyBuZXcgdGhyZWFkcyBjYW4gYmUgYWRkZWQgdG8gbV90aHJl
YWRzLiBIZW5jZSwgaXQgaXMgaW1tdXRhYmxlIGFuZCBuZWVkcyBubyBsb2Nrcy4KICAgICAvLyAo
MikgVGhyZWFkRGF0YTo6bV9zYWZlcG9pbnQgaXMgcHJvdGVjdGVkIGJ5IHRoYXQgdGhyZWFkJ3Mg
bV9yaWdodFRvUnVuIHdoaWNoIHdlIG11c3QgYmUKICAgICAvLyAgICAgaG9sZGluZyBoZXJlIGJl
Y2F1c2Ugb2YgYSBwcmlvciBjYWxsIHRvIHN1c3BlbmRBbGxUaHJlYWRzKCkuCkBAIC0yNDUsNiAr
MjM1LDQ2IEBAIHZvaWQgV29ya2xpc3Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3IKICAgICB9
CiB9CiAKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKK3sKKyAgICBWTSogdm0gPSB2aXNpdG9y
LmhlYXAoKS0+dm0oKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBmb3Ig
KFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFu
cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQo
KTsKKyAgICAgICAgaWYgKCZwbGFuLT52bSAhPSB2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpdGVyLT52YWx1ZS0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4odmlzaXRv
ciwgY29kZUJsb2Nrcyk7CisgICAgfQorfQorCit2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxh
bnMoVk0mIHZtKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIEhhc2hT
ZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYg
KCZwbGFuLT52bSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHBs
YW4tPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPT0gUGxhbjo6UHJlcGFyaW5nKTsKKyAg
ICAgICAgQVNTRVJUKCFkZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpKTsKKyAgICAg
ICAgZGVhZFBsYW5LZXlzLmFkZChwbGFuLT5rZXkoKSk7CisgICAgfQorICAgIGlmIChkZWFkUGxh
bktleXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgRGVxdWU8UmVmUHRyPFBsYW4+
PiBuZXdRdWV1ZTsKKyAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFJl
ZlB0cjxQbGFuPiBwbGFuID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKGRlYWRQ
bGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOworICAgIH0KKyAgICBtX3F1ZXVlLnN3YXAobmV3
UXVldWUpOworICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktleT46Oml0ZXJhdG9yIGl0ZXIg
PSBkZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsraXRl
cikKKyAgICAgICAgbV9wbGFucy5yZW1vdmUoKml0ZXIpOworfQorCiBzaXplX3QgV29ya2xpc3Q6
OnF1ZXVlTGVuZ3RoKCkKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNyArNzEsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNBY3RpdmVGb3JW
TShWTSYpIGNvbnN0OwogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYs
IENvZGVCbG9ja1NldCYpOyAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIg
c3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KKyAgICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0
aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KKyAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImLCBDb2RlQmxvY2tTZXQmKTsKKyAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhWTSYpOwogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAxNjc4Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsNiArMTQ1LDggQEAgdm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2Vk
KFNsb3RWaXNpdAogdm9pZCBDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5n
Q29kZUJsb2NrcyhIZWFwKiBoZWFwKQogewogI2lmIEVOQUJMRShHR0MpCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIlJlbWVtYmVyaW5nICIsIG1fY3VycmVudGx5RXhlY3V0aW5n
LnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwogICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykgewogICAgICAgICBoZWFwLT5hZGRUb1JlbWVtYmVy
ZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CiAgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjcsNyArNjI3LDcgQEAgdm9pZCBIZWFwOjp2aXNp
dENvbXBpbGVyV29ya2xpc3RzKCkKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBHQ1BIQVNFKFZp
c2l0REZHV29ya2xpc3RzKTsKICAgICBmb3IgKGF1dG8gd29ya2xpc3QgOiBtX3N1c3BlbmRlZENv
bXBpbGVyV29ya2xpc3RzKQotICAgICAgICB3b3JrbGlzdC0+dmlzaXRDaGlsZHJlbihtX3Nsb3RW
aXNpdG9yLCBtX2NvZGVCbG9ja3MpOworICAgICAgICB3b3JrbGlzdC0+dmlzaXRDaGlsZHJlbiht
X3Nsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIG1fc2xvdFZpc2l0
b3IpOwpAQCAtNjM2LDYgKzYzNiwyNiBAQCB2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlz
dHMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1Jl
ZmVyZW5jZXMoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGZvciAoYXV0byB3b3JrbGlz
dCA6IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMpCisgICAgICAgIHdvcmtsaXN0LT52aXNp
dFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CisKKyAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyNlbmRpZgorfQorCit2b2lkIEhl
YXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpCit7CisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgR0NQSEFTRShGaW5hbGl6ZXJERkdXb3JrbGlzdHMpOworICAgIGZvciAoYXV0
byB3b3JrbGlzdCA6IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMpCisgICAgICAgIHdvcmts
aXN0LT5yZW1vdmVEZWFkUGxhbnMoKm1fdm0pOworI2VuZGlmCit9CisKIHZvaWQgSGVhcDo6dmlz
aXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewog
ICAgIEdDUEhBU0UoVmlzaXRQcm90ZWN0ZWRPYmplY3RzKTsKQEAgLTc0Myw2ICs3NjMsOCBAQCB2
b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpCiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwogICAgICAg
ICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0
V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tzLnRyYWNlTWFya2VkKG1fc2xv
dFZpc2l0b3IpOyAvLyBOZXcgImV4ZWN1dGluZyIgY29kZSBibG9ja3MgbWF5IGJlIGRpc2NvdmVy
ZWQuCiAgICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCkBAIC05OTgsNiArMTAyMCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0
aW9uIGNvbGxlY3QKICAgICBjb3B5QmFja2luZ1N0b3JlcygpOwogCiAgICAgZmluYWxpemVVbmNv
bmRpdGlvbmFsRmluYWxpemVycygpOworICAgIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50
cmllcygpOwogICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CiAgICAgZGVsZXRlU291
cmNlUHJvdmlkZXJDYWNoZXMoKTsKICAgICBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDYgKzI3
NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAgIHZvaWQg
dmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgdmlz
aXRDb21waWxlcldvcmtsaXN0cygpOworICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKTsKKyAgICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmll
cygpOwogICAgIHZvaWQgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwog
ICAgIHZvaWQgdmlzaXRUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230262</attachid>
            <date>2014-04-27 11:35:19 -0700</date>
            <delta_ts>2014-04-27 12:59:49 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18616</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3Miw2ICsxOTcyLDQ5IEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJp
bmdTY2FuKCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBJbnRlcnByZXRlciBhbmQg
QmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4K
KyAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhp
cyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBp
ZgorICAgIC8vIHRoZXkgYXJlIGV4ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRo
ZWlyIHdlYWsgcmVmZXJlbmNlcyB0bworICAgIC8vIGFsbG93IHRoZW0gdG8gY29udGludWUgdG8g
ZXhlY3V0ZSBzb3VuZGx5LgorICAgIGlmIChtX21heUJlRXhlY3V0aW5nKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZURGR0NvZGVCbG9ja0xpdmVuZXNzKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitib29sIENvZGVCbG9jazo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFRoaXMgc2hvdWxkIHJl
dHVybiB0cnVlIGZvcjoKKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgYmVoYXZlIGxpa2Ugbm9y
bWFsIG9iamVjdHMgLSBpLmUuIGlmIHRoZXkgYXJlIHJlZmVyZW5jZWQgdGhlbiB0aGV5CisgICAg
Ly8gICBhcmUgbGl2ZS4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgd2VyZSBydW5uaW5nIG9u
IHRoZSBzdGFjay4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgc3Vydml2ZWQgdGhlIGxhc3Qg
R0MgaWYgdGhlIGN1cnJlbnQgR0MgaXMgYW4gRWRlbiBHQy4gVGhpcyBpcworICAgIC8vICAgYmVj
YXVzZSBlaXRoZXIgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMg
dHJ1ZSBvciBtX21heUJlRXhlY3V0aW5nCisgICAgLy8gICB3b3VsZCBzdXJ2aXZlIGFzIHRydWUu
CisgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IGRvbid0IGhhdmUgYW55IGRlYWQgd2VhayByZWZl
cmVuY2VzLgorICAgIAorICAgIHJldHVybiBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2NhbigpCisgICAgICAgIHx8IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNz
SGFzQmVlblByb3ZlZDsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKQEAgLTIyMTUsNyArMjI1OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlz
b24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7Cisg
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIGhhcyBkZWFkIHdl
YWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxuIik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtOTQ3LDYgKzk0Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luVmFsaWRhdGlv
bkRpZEZhaWwoKTsKICAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlv
bkRpZEZhaWwoKTsKIAorICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsgLy8gV2ls
bCBvbmx5IHJldHVybiB2YWxpZCByZXN1bHRzIHdoZW4gY2FsbGVkIGR1cmluZyBHQy4gQXNzdW1l
cyB0aGF0IHlvdSd2ZSBhbHJlYWR5IGVzdGFibGlzaGVkIHRoYXQgdGhlIG93bmVyIGV4ZWN1dGFi
bGUgaXMgbGl2ZS4KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CkBAIC0xMDAxLDI5ICsxMDAzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGR1bXBBcnJheVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgIHZvaWQgZHVtcFJhcmVD
YXNlUHJvZmlsZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmls
ZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2Fu
KCkKLSAgICB7Ci0gICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJs
b2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgotICAgICAgICAvLyB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdl
dHMKLSAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhh
dCBpdCdzIGxpdmUuCi0gICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBGb3Igc2ltcGxp
Y2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJsb2NrcyBkdXJpbmcgR0Mg
aWYKLSAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFkIHdlIHN0cm9uZ2x5IG1h
cmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCi0gICAgICAgIC8vIGFsbG93IHRoZW0gdG8gY29u
dGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9tYXlCZUV4ZWN1dGluZykK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpmb3JjZURG
R0NvZGVCbG9ja0xpdmVuZXNzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2Vsc2UKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5
QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCisgICAg
Ym9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpOwogICAgIAog
ICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBQbGFu
OjpQbGFuKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDCiAgICAgLCBpZGVudGlmaWVycyhj
b2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCiAg
ICAgLCB3aWxsVHJ5VG9UaWVyVXAoZmFsc2UpCi0gICAgLCBpc0NvbXBpbGVkKGZhbHNlKQorICAg
ICwgc3RhZ2UoUHJlcGFyaW5nKQogewogfQogCkBAIC0zODQsMTAgKzM4NCwxNSBAQCB2b2lkIFBs
YW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmln
Z2VyKHZtKTsKIH0KIAordm9pZCBQbGFuOjpub3RpZnlDb21waWxpbmcoKQoreworICAgIHN0YWdl
ID0gQ29tcGlsaW5nOworfQorCiB2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKICAgICBjYWxs
YmFjay0+Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9jay5n
ZXQoKSk7Ci0gICAgaXNDb21waWxlZCA9IHRydWU7CisgICAgc3RhZ2UgPSBDb21waWxlZDsKIH0K
IAogQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJh
Y2soKQpAQCAtNDE5LDggKzQyNCwxMSBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAg
IHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwog
fQogCi12b2lkIFBsYW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVC
bG9ja1NldCYgY29kZUJsb2NrcykKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsK
KyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykK
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZtdXN0SGFuZGxlVmFsdWVz
W2ldKTsKICAgICAKQEAgLTQzNCw2ICs0NDIsMTkgQEAgdm9pZCBQbGFuOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aQogICAgIHRyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CiB9CiAKK2Jvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQoreworICAgIGlmIChz
dGFnZSAhPSBQcmVwYXJpbmcpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghSGVhcDo6
aXNNYXJrZWQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghIXByb2ZpbGVkREZH
Q29kZUJsb2NrICYmICFwcm9maWxlZERGR0NvZGVCbG9jay0+aXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEg
KzY2LDEzIEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICBD
b21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpOwogICAg
IHZvaWQgZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwogICAgIAorICAgIHZvaWQgbm90aWZ5
Q29tcGlsaW5nKCk7CiAgICAgdm9pZCBub3RpZnlSZWFkeSgpOwogICAgIAogICAgIENvbXBpbGF0
aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYs
IENvZGVCbG9ja1NldCYpOworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQmKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1
cmluZ0dDKCk7CiAgICAgCiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVC
bG9jazsKQEAgLTk2LDggKzk4LDkgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZQogICAgIGJvb2wgd2lsbFRyeVRvVGllclVwOwogCiAgICAgZG91YmxlIGJlZm9yZUZU
TDsKLSAgICAKLSAgICBib29sIGlzQ29tcGlsZWQ7CisKKyAgICBlbnVtIFN0YWdlIHsgUHJlcGFy
aW5nLCBDb21waWxpbmcsIENvbXBpbGVkIH07CisgICAgU3RhZ2Ugc3RhZ2U7CiAKICAgICBSZWZQ
dHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjazsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMTY3ODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMCArMzUsMzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1TYWZlcG9pbnQ6OlNhZmVwb2ludChQbGFuJiBwbGFuKQorU2FmZXBvaW50OjpSZXN1bHQ6
On5SZXN1bHQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gQ2xlYXJlZCk7Cit9
CisKK2Jvb2wgU2FmZXBvaW50OjpSZXN1bHQ6OmRpZEdldENhbmNlbGxlZCgpCit7CisgICAgc3dp
dGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBDbGVhcmVkOgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTaG91bGRD
b250aW51ZToKKyAgICAgICAgbV9zdGF0ZSA9IENsZWFyZWQ7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBjYXNlIEdvdENhbmNlbGxlZDoKKyAgICAgICAgbV9zdGF0ZSA9IENsZWFyZWQ7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU2FmZXBvaW50OjpTYWZlcG9pbnQoUGxhbiYg
cGxhbiwgUmVzdWx0JiByZXN1bHQpCiAgICAgOiBtX3BsYW4ocGxhbikKICAgICAsIG1fZGlkQ2Fs
bEJlZ2luKGZhbHNlKQorICAgICwgbV9yZXN1bHQocmVzdWx0KQogeworICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5tX3N0YXRlID09IFJlc3VsdDo6Q2xlYXJlZCk7CiB9CiAKIFNhZmVwb2ludDo6
flNhZmVwb2ludCgpCkBAIC02NiwxNSArOTAsMzkgQEAgdm9pZCBTYWZlcG9pbnQ6OmJlZ2luKCkK
ICAgICAgICAgZGF0YS0+bV9yaWdodFRvUnVuLnVubG9jaygpOwogICAgIH0KICAgICBtX2RpZENh
bGxCZWdpbiA9IHRydWU7CisgICAgbV9yZXN1bHQubV9zdGF0ZSA9IFJlc3VsdDo6U2hvdWxkQ29u
dGludWU7CiB9CiAKLXZvaWQgU2FmZXBvaW50Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2lu
KTsKKworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fc2Nhbm5hYmxlcy5zaXplKCk7IGktLTsp
CiAgICAgICAgIG1fc2Nhbm5hYmxlc1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAor
Ym9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9z
Y2FubmFibGVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAoIW1fc2Nhbm5hYmxlc1tpXS0+
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2FmZXBvaW50OjpjYW5jZWwo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBtX3Jl
c3VsdC5tX3N0YXRlID0gUmVzdWx0OjpHb3RDYW5jZWxsZWQ7Cit9CisKIFZNJiBTYWZlcG9pbnQ6
OnZtKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGFuLnZtOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NCArNDIsMzIgQEAgc3RydWN0IFBsYW47CiAKIGNsYXNzIFNhZmVwb2ludCB7CiBwdWJsaWM6Ci0g
ICAgU2FmZXBvaW50KFBsYW4mKTsKKyAgICBjbGFzcyBSZXN1bHQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgUmVzdWx0KCkKKyAgICAgICAgICAgIDogbV9zdGF0ZShDbGVhcmVkKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5SZXN1bHQoKTsKKyAgICAgICAgCisgICAg
ICAgIGJvb2wgZGlkR2V0Q2FuY2VsbGVkKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIGVudW0gU3RhdGUgeyBDbGVhcmVkLCBTaG91bGRDb250aW51ZSwgR290Q2FuY2VsbGVkIH07
CisgICAgICAgIFN0YXRlIG1fc3RhdGU7CisgICAgfTsKKyAgICAKKyAgICBTYWZlcG9pbnQoUGxh
biYsIFJlc3VsdCYpOwogICAgIH5TYWZlcG9pbnQoKTsKICAgICAKICAgICB2b2lkIGFkZChTY2Fu
bmFibGUqKTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
KyAgICB2b2lkIGNhbmNlbCgpOwogICAgIAogICAgIFZNJiB2bSgpIGNvbnN0OwogCkBAIC01Nyw2
ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIFZlY3RvcjxTY2FubmFi
bGUqPiBtX3NjYW5uYWJsZXM7CiAgICAgYm9vbCBtX2RpZENhbGxCZWdpbjsKKyAgICBSZXN1bHQm
IG1fcmVzdWx0OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY2FubmFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjYW5uYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBTY2FubmFibGUoKSB7IH0KICAgICB2aXJ0dWFs
IH5TY2FubmFibGUoKSB7IH0KICAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmts
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmts
aXN0LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBXb3JrbGlz
dDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhCiAgICAgUGxhbk1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fcGxhbnMuZmluZChrZXkpOwogICAgIGlmIChpdGVyID09IG1fcGxhbnMuZW5kKCkp
CiAgICAgICAgIHJldHVybiBOb3RLbm93bjsKLSAgICByZXR1cm4gaXRlci0+dmFsdWUtPmlzQ29t
cGlsZWQgPyBDb21waWxlZCA6IENvbXBpbGluZzsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUtPnN0
YWdlID09IFBsYW46OkNvbXBpbGVkID8gQ29tcGlsZWQgOiBDb21waWxpbmc7CiB9CiAKIHZvaWQg
V29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYgdm0pCkBAIC0xMzAs
NyArMTMwLDcgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZQogICAg
ICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmICgmaXRlci0+dmFsdWUtPnZtICE9ICZ2
bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghaXRlci0+dmFs
dWUtPmlzQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2UgIT0g
UGxhbjo6Q29tcGlsZWQpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVDb21waWxlZCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTUxLDcgKzE1MSw3
IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgKICAgICAgICAgUmVm
UHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAgIGlmICgmcGxhbi0+dm0g
IT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcGxhbi0+aXNDb21w
aWxlZCkKKyAgICAgICAgaWYgKHBsYW4tPnN0YWdlICE9IFBsYW46OkNvbXBpbGVkKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIG15UmVhZHlQbGFucy5hcHBlbmQocGxhbik7CiAgICAg
ICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKQEAgLTE4Miw3ICsx
ODIsNyBAQCBXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhCiAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQogICAgICAgICAgICAgZGF0
YUxvZygqdGhpcywgIjogQ29tcGxldGluZyAiLCBjdXJyZW50S2V5LCAiXG4iKTsKICAgICAgICAg
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChwbGFuLT5zdGFnZSA9PSBQbGFuOjpDb21waWxlZCk7CiAgICAgICAgIAogICAg
ICAgICBwbGFuLT5maW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgICAgIApAQCAtMjIw
LDIwICsyMjAsMTAgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1lQWxsVGhyZWFkcygpCiAgICAgbV9z
dXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6dmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQordm9pZCBX
b3JrbGlzdDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBWTSog
dm0gPSB2aXNpdG9yLmhlYXAoKS0+dm0oKTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Bs
YW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAg
ICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoJnBsYW4t
PnZtICE9IHZtKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaXRlci0+
dmFsdWUtPnZpc2l0Q2hpbGRyZW4odmlzaXRvciwgY29kZUJsb2Nrcyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgLy8gVGhpcyBsb29wIGRvZXNuJ3QgbmVlZCBmdXJ0aGVyIGxvY2tpbmcg
YmVjYXVzZToKKyAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGxvY2tpbmcgYmVjYXVzZToK
ICAgICAvLyAoMSkgbm8gbmV3IHRocmVhZHMgY2FuIGJlIGFkZGVkIHRvIG1fdGhyZWFkcy4gSGVu
Y2UsIGl0IGlzIGltbXV0YWJsZSBhbmQgbmVlZHMgbm8gbG9ja3MuCiAgICAgLy8gKDIpIFRocmVh
ZERhdGE6Om1fc2FmZXBvaW50IGlzIHByb3RlY3RlZCBieSB0aGF0IHRocmVhZCdzIG1fcmlnaHRU
b1J1biB3aGljaCB3ZSBtdXN0IGJlCiAgICAgLy8gICAgIGhvbGRpbmcgaGVyZSBiZWNhdXNlIG9m
IGEgcHJpb3IgY2FsbCB0byBzdXNwZW5kQWxsVGhyZWFkcygpLgpAQCAtMjQ1LDYgKzIzNSw0NiBA
QCB2b2lkIFdvcmtsaXN0Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yCiAgICAgfQogfQogCit2
b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBD
b2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCit7CisgICAgVk0qIHZtID0gdmlzaXRvci5oZWFwKCkt
PnZtKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgZm9yIChQbGFuTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAg
ICAgIGlmICgmcGxhbi0+dm0gIT0gdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aXRlci0+dmFsdWUtPmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IsIGNvZGVC
bG9ja3MpOworICAgIH0KK30KKwordm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2
bSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBIYXNoU2V0PENvbXBp
bGF0aW9uS2V5PiBkZWFkUGxhbktleXM7CisgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICgmcGxhbi0+
dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChwbGFuLT5pc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlID09IFBsYW46OlByZXBhcmluZyk7CisgICAgICAgIEFT
U0VSVCghZGVhZFBsYW5LZXlzLmNvbnRhaW5zKHBsYW4tPmtleSgpKSk7CisgICAgICAgIGRlYWRQ
bGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOworICAgIH0KKyAgICBpZiAoZGVhZFBsYW5LZXlzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIERlcXVlPFJlZlB0cjxQbGFuPj4gbmV3UXVl
dWU7CisgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGxh
bj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChkZWFkUGxhbktleXMu
Y29udGFpbnMocGxhbi0+a2V5KCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG5l
d1F1ZXVlLmFwcGVuZChwbGFuKTsKKyAgICB9CisgICAgbV9xdWV1ZS5zd2FwKG5ld1F1ZXVlKTsK
KyAgICBmb3IgKEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+OjppdGVyYXRvciBpdGVyID0gZGVhZFBs
YW5LZXlzLmJlZ2luKCk7IGl0ZXIgIT0gZGVhZFBsYW5LZXlzLmVuZCgpOyArK2l0ZXIpCisgICAg
ICAgIG1fcGxhbnMucmVtb3ZlKCppdGVyKTsKK30KKwogc2l6ZV90IFdvcmtsaXN0OjpxdWV1ZUxl
bmd0aCgpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDcgKzcxLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBj
b25zdDsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxv
Y2tTZXQmKTsgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRp
bmcgYWxsIHRocmVhZHMuCisgICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFm
dGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiwgQ29k
ZUJsb2NrU2V0Jik7CisgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ1LDYgKzE0NSw4IEBAIHZvaWQgQ29kZUJsb2NrU2V0Ojp0cmFjZU1hcmtlZChTbG90Vmlz
aXQKIHZvaWQgQ29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9j
a3MoSGVhcCogaGVhcCkKIHsKICNpZiBFTkFCTEUoR0dDKQorICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJSZW1lbWJlcmluZyAiLCBtX2N1cnJlbnRseUV4ZWN1dGluZy5zaXplKCks
ICIgY29kZSBibG9ja3MuXG4iKTsKICAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9j
dXJyZW50bHlFeGVjdXRpbmcpIHsKICAgICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0KGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5t
X21heUJlRXhlY3V0aW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjI3LDcgKzYyNyw3IEBAIHZvaWQgSGVhcDo6dmlzaXRDb21waWxl
cldvcmtsaXN0cygpCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgR0NQSEFTRShWaXNpdERGR1dv
cmtsaXN0cyk7CiAgICAgZm9yIChhdXRvIHdvcmtsaXN0IDogbV9zdXNwZW5kZWRDb21waWxlcldv
cmtsaXN0cykKLSAgICAgICAgd29ya2xpc3QtPnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvciwg
bV9jb2RlQmxvY2tzKTsKKyAgICAgICAgd29ya2xpc3QtPnZpc2l0Q2hpbGRyZW4obV9zbG90Vmlz
aXRvcik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
CiAgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKQEAg
LTYzNiw2ICs2MzYsMjYgQEAgdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RzKCkKICNl
bmRpZgogfQogCit2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2Vz
KCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBmb3IgKGF1dG8gd29ya2xpc3QgOiBtX3N1
c3BlbmRlZENvbXBpbGVyV29ya2xpc3RzKQorICAgICAgICB3b3JrbGlzdC0+dmlzaXRXZWFrUmVm
ZXJlbmNlcyhtX3Nsb3RWaXNpdG9yLCBtX2NvZGVCbG9ja3MpOworCisgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJERkcgV29y
a2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisjZW5kaWYKK30KKwordm9pZCBIZWFwOjpyZW1v
dmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKQoreworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIEdDUEhBU0UoRmluYWxpemVyREZHV29ya2xpc3RzKTsKKyAgICBmb3IgKGF1dG8gd29ya2xp
c3QgOiBtX3N1c3BlbmRlZENvbXBpbGVyV29ya2xpc3RzKQorICAgICAgICB3b3JrbGlzdC0+cmVt
b3ZlRGVhZFBsYW5zKCptX3ZtKTsKKyNlbmRpZgorfQorCiB2b2lkIEhlYXA6OnZpc2l0UHJvdGVj
dGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKIHsKICAgICBHQ1BI
QVNFKFZpc2l0UHJvdGVjdGVkT2JqZWN0cyk7CkBAIC03NDMsNiArNzYzLDggQEAgdm9pZCBIZWFw
Ojp2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaQogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKICAgICAgICAgaGFydmVz
dFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZl
cmVuY2VzKCk7CisgICAgICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZChtX3Nsb3RWaXNpdG9y
KTsgLy8gTmV3ICJleGVjdXRpbmciIGNvZGUgYmxvY2tzIG1heSBiZSBkaXNjb3ZlcmVkLgogICAg
ICAgICBpZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKIApA
QCAtOTk4LDYgKzEwMjAsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xs
ZWN0CiAgICAgY29weUJhY2tpbmdTdG9yZXMoKTsKIAogICAgIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKKyAgICByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsK
ICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwogICAgIGRlbGV0ZVNvdXJjZVByb3Zp
ZGVyQ2FjaGVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0Q29u
c2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGls
ZXJXb3JrbGlzdHMoKTsKKyAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVu
Y2VzKCk7CisgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAg
ICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lk
IHZpc2l0VGVtcFNvcnRWZWN0b3JzKEhlYXBSb290VmlzaXRvciYpOwogICAgIHZvaWQgdmlzaXRB
cmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230265</attachid>
            <date>2014-04-27 12:59:49 -0700</date>
            <delta_ts>2014-04-27 15:03:45 -0700</delta_ts>
            <desc>all the pieces are in place</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28229</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3ODU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE0LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaW5ncyBmcm9tIHRoZSBERkcgd29ya2xpc3Qg
YW5kIGNhbmNlbCBvbi1nb2luZyBjb21waWxhdGlvbnMgaWYgaXQga25vd3MgdGhhdCB0aGUgY29t
cGlsYXRpb24gd291bGQgYWxyZWFkeSBiZSBpbnZhbGlkYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMTY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLiBU
aGlzIGFpbXMgZm9yIGEgYmlnIHNwZWVkLXVwIG9uIHNsb3dlciBkdWFsLWNvcmUgZGV2aWNlcy4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRl
bHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdH
cmFwaFNhZmVwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGhTYWZlcG9pbnQ6Okdy
YXBoU2FmZXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGhTYWZlcG9pbnQuaDoKKyAgICAg
ICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6UGxhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojpub3RpZnlDb21waWxpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om5vdGlmeUNvbXBp
bEVkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpqZXR0aXNvbkFsbFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAg
ICAqIGRmZy9ERkdTYWZlcG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6
UmVzdWx0Ojp+UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OlJlc3VsdDo6
ZGlkR2V0Q2FuY2VsbGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OlNhZmVwb2lu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpjaGVja0xpdmVuZXNzQW5kVmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50Ojppc0tub3duVG9CZUxpdmVE
dXJpbmdHQyk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpjYW5jZWwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNhZmVwb2ludDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1NhZmVwb2ludC5oOgorICAgICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6UmVz
dWx0OjpSZXN1bHQpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6
OldvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkpOgorICAgICAgICAoSlND
OjpERkc6OldvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAoSlND
OjpERkc6OldvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAgIChK
U0M6OkRGRzo6V29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OldvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMpOgorICAgICAgICAoSlNDOjpERkc6Oldvcmts
aXN0OjpydW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojp2aXNpdENoaWxk
cmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBm
dGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTENvbXBpbGUuaDoKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2Rl
QmxvY2tzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpt
YXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFr
UmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmts
aXN0RW50cmllcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb21w
aWxlcldvcmtsaXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisKIDIwMTQt
MDQtMjUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIElubGlu
ZSAoQysrKSBHZXRCeVZhbCB3aXRoIG51bWVyaWMgaW5kaWNlcyBtb3JlIGFnZ3Jlc3NpdmVseS4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3Miw2ICsxOTcyLDQ5IEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJp
bmdTY2FuKCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBJbnRlcnByZXRlciBhbmQg
QmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVlZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4K
KyAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhp
cyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBp
ZgorICAgIC8vIHRoZXkgYXJlIGV4ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRo
ZWlyIHdlYWsgcmVmZXJlbmNlcyB0bworICAgIC8vIGFsbG93IHRoZW0gdG8gY29udGludWUgdG8g
ZXhlY3V0ZSBzb3VuZGx5LgorICAgIGlmIChtX21heUJlRXhlY3V0aW5nKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpmb3JjZURGR0NvZGVCbG9ja0xpdmVuZXNzKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitib29sIENvZGVCbG9jazo6aXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIFRoaXMgc2hvdWxkIHJl
dHVybiB0cnVlIGZvcjoKKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgYmVoYXZlIGxpa2Ugbm9y
bWFsIG9iamVjdHMgLSBpLmUuIGlmIHRoZXkgYXJlIHJlZmVyZW5jZWQgdGhlbiB0aGV5CisgICAg
Ly8gICBhcmUgbGl2ZS4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgd2VyZSBydW5uaW5nIG9u
IHRoZSBzdGFjay4KKyAgICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgc3Vydml2ZWQgdGhlIGxhc3Qg
R0MgaWYgdGhlIGN1cnJlbnQgR0MgaXMgYW4gRWRlbiBHQy4gVGhpcyBpcworICAgIC8vICAgYmVj
YXVzZSBlaXRoZXIgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMg
dHJ1ZSBvciBtX21heUJlRXhlY3V0aW5nCisgICAgLy8gICB3b3VsZCBzdXJ2aXZlIGFzIHRydWUu
CisgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IGRvbid0IGhhdmUgYW55IGRlYWQgd2VhayByZWZl
cmVuY2VzLgorICAgIAorICAgIHJldHVybiBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2NhbigpCisgICAgICAgIHx8IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNz
SGFzQmVlblByb3ZlZDsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogdm9p
ZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKQEAgLTIyMTUsNyArMjI1OCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlz
b24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7Cisg
ICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIGhhcyBkZWFkIHdl
YWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxuIik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtOTQ3LDYgKzk0Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luVmFsaWRhdGlv
bkRpZEZhaWwoKTsKICAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZW5kVmFsaWRhdGlv
bkRpZEZhaWwoKTsKIAorICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsgLy8gV2ls
bCBvbmx5IHJldHVybiB2YWxpZCByZXN1bHRzIHdoZW4gY2FsbGVkIGR1cmluZyBHQy4gQXNzdW1l
cyB0aGF0IHlvdSd2ZSBhbHJlYWR5IGVzdGFibGlzaGVkIHRoYXQgdGhlIG93bmVyIGV4ZWN1dGFi
bGUgaXMgbGl2ZS4KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZl
cmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CkBAIC0xMDAxLDI5ICsxMDAzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGR1bXBBcnJheVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3Ry
dWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgIHZvaWQgZHVtcFJhcmVD
YXNlUHJvZmlsZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmls
ZSosIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2Fu
KCkKLSAgICB7Ci0gICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGluZSBKSVQgQ29kZUJs
b2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgotICAgICAgICAvLyB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQgQ29kZUJsb2NrIGdl
dHMKLSAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhh
dCBpdCdzIGxpdmUuCi0gICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBGb3Igc2ltcGxp
Y2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJsb2NrcyBkdXJpbmcgR0Mg
aWYKLSAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFkIHdlIHN0cm9uZ2x5IG1h
cmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCi0gICAgICAgIC8vIGFsbG93IHRoZW0gdG8gY29u
dGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9tYXlCZUV4ZWN1dGluZykK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpmb3JjZURG
R0NvZGVCbG9ja0xpdmVuZXNzKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2Vsc2UKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5
QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCisgICAg
Ym9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpOwogICAgIAog
ICAgIHZvaWQgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIGRl
dGVybWluZUxpdmVuZXNzKFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDggKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1HcmFwaFNhZmVwb2ludDo6R3JhcGhTYWZlcG9pbnQoR3JhcGgmIGdyYXBoKQotICAgIDog
bV9zYWZlcG9pbnQoZ3JhcGgubV9wbGFuKQorR3JhcGhTYWZlcG9pbnQ6OkdyYXBoU2FmZXBvaW50
KEdyYXBoJiBncmFwaCwgU2FmZXBvaW50OjpSZXN1bHQmIHJlc3VsdCkKKyAgICA6IG1fc2FmZXBv
aW50KGdyYXBoLm1fcGxhbiwgcmVzdWx0KQogewogICAgIG1fc2FmZXBvaW50LmFkZCgmZ3JhcGgp
OwogICAgIG1fc2FmZXBvaW50LmJlZ2luKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoU2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAgY2xhc3MgR3JhcGg7CiAKIGNsYXNzIEdyYXBoU2FmZXBvaW50IHsKIHB1
YmxpYzoKLSAgICBHcmFwaFNhZmVwb2ludChHcmFwaCYpOworICAgIEdyYXBoU2FmZXBvaW50KEdy
YXBoJiwgU2FmZXBvaW50OjpSZXN1bHQmKTsKICAgICB+R3JhcGhTYWZlcG9pbnQoKTsKICAgICAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBQbGFuOjpQbGFuKFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBwYXNzZWRDCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAgICAg
LCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3aWxsVHJ5VG9UaWVyVXAo
ZmFsc2UpCi0gICAgLCBpc0NvbXBpbGVkKGZhbHNlKQorICAgICwgc3RhZ2UoUHJlcGFyaW5nKQog
ewogfQogCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9u
Z0xpdmVkU3RhdAogCiAgICAgQ29tcGlsYXRpb25QYXRoIHBhdGggPSBjb21waWxlSW5UaHJlYWRJ
bXBsKGxvbmdMaXZlZFN0YXRlKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKGZpbmFsaXplcik7Cisg
ICAgUkVMRUFTRV9BU1NFUlQocGF0aCA9PSBDYW5jZWxQYXRoIHx8IGZpbmFsaXplcik7CiAgICAg
CiAgICAgaWYgKHJlcG9ydENvbXBpbGVUaW1lcygpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHBh
dGhOYW1lOwpAQCAtMTc5LDYgKzE3OSw4IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKExv
bmdMaXZlZFN0YXQKICAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCBiZWZvcmVGVEwgLSBi
ZWZvcmUsICIsIExMVk06ICIsIG5vdyAtIGJlZm9yZUZUTCwgIikiKTsKICAgICAgICAgZGF0YUxv
ZygiLlxuIik7CiAgICAgfQorICAgIAorICAgIHJldHVybiBwYXRoICE9IENhbmNlbFBhdGg7CiB9
CiAKIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKExvbmdM
aXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKQEAgLTMyMiwxMCArMzI0LDEzIEBAIFBsYW46OkNv
bXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZHVtcEFuZFZlcmlmeUdy
YXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKICAgICAgICAgCiAg
ICAgICAgIGJvb2wgaGF2ZUxMVk07CisgICAgICAgIFNhZmVwb2ludDo6UmVzdWx0IHNhZmVwb2lu
dFJlc3VsdDsKICAgICAgICAgewotICAgICAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBvaW50
KGRmZyk7CisgICAgICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoZGZnLCBzYWZlcG9p
bnRSZXN1bHQpOwogICAgICAgICAgICAgaGF2ZUxMVk0gPSBpbml0aWFsaXplTExWTSgpOwogICAg
ICAgICB9CisgICAgICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2VsbGVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gQ2FuY2VsUGF0aDsKICAgICAgICAgCiAgICAgICAgIGlmICghaGF2
ZUxMVk0pIHsKICAgICAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5h
bGl6ZXIoKnRoaXMpKTsKQEAgLTM0Myw4ICszNDgsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIEZUTDo6Y29tcGlsZShzdGF0ZSk7Ci0gICAgICAgICAgICAK
KyAgICAgICAgRlRMOjpjb21waWxlKHN0YXRlLCBzYWZlcG9pbnRSZXN1bHQpOworICAgICAgICBp
ZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IENhbmNlbFBhdGg7CisgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0Zh
aWxzQmVmb3JlTGluaygpKSB7CiAgICAgICAgICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAg
ICAgICAgcmV0dXJuIEZUTFBhdGg7CkBAIC0zODQsMTAgKzM5MSwyMCBAQCB2b2lkIFBsYW46OnJl
YWxseUFkZChDb21tb25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmlnZ2VyKHZt
KTsKIH0KIAordm9pZCBQbGFuOjpub3RpZnlDb21waWxpbmcoKQoreworICAgIHN0YWdlID0gQ29t
cGlsaW5nOworfQorCit2b2lkIFBsYW46Om5vdGlmeUNvbXBpbEVkKCkKK3sKKyAgICBzdGFnZSA9
IENvbXBpbGVkOworfQorCiB2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKICAgICBjYWxsYmFj
ay0+Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9jay5nZXQo
KSk7Ci0gICAgaXNDb21waWxlZCA9IHRydWU7CisgICAgc3RhZ2UgPSBSZWFkeTsKIH0KIAogQ29t
cGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQpA
QCAtNDE5LDggKzQzNiwxMSBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVy
biBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12
b2lkIFBsYW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1Nl
dCYgY29kZUJsb2NrcykKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKKyAgICBp
ZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZtdXN0SGFuZGxlVmFsdWVzW2ldKTsK
ICAgICAKQEAgLTQzNCw2ICs0NTQsMzggQEAgdm9pZCBQbGFuOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aQogICAgIHRyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAK
K2Jvb2wgUGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQoreworICAgIGlmICghY29kZUJs
b2NrKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoZSBwbGFuIGl0c2VsZiBqZXR0aXNvbmVk
IGFsbCBvZiBpdHMgc3RhdGUgZHVlIHRvIGNhbmNlbGxhdGlvbi4KKyAgICBpZiAoc3RhZ2UgPj0g
Q29tcGlsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBEb24ndCBhbGxvdyByZW1vdmFsIG9m
IHBsYW5zIHRoYXQgYXJlIGFscmVhZHkgZG9uZS4gRklYTUU6IFdlIHNob3VsZCBhbGxvdyB0aGlz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMjM2CisgICAgaWYg
KCFIZWFwOjppc01hcmtlZChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5pc0tub3du
VG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEhcHJv
ZmlsZWRERkdDb2RlQmxvY2sgJiYgIXByb2ZpbGVkREZHQ29kZUJsb2NrLT5pc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUGxhbjo6amV0dGlzb25BbGxTdGF0ZSgpCit7CisgICAgY29kZUJsb2NrID0gbnVs
bHB0cjsKKyAgICBwcm9maWxlZERGR0NvZGVCbG9jayA9IG51bGxwdHI7CisgICAgbXVzdEhhbmRs
ZVZhbHVlcy5jbGVhcigpOworICAgIGNvbXBpbGF0aW9uID0gbnVsbHB0cjsKKyAgICBmaW5hbGl6
ZXIuY2xlYXIoKTsKKyAgICBpbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKKyAgICB3YXRjaHBv
aW50cyA9IERlc2lyZWRXYXRjaHBvaW50cygpOworICAgIGlkZW50aWZpZXJzID0gRGVzaXJlZElk
ZW50aWZpZXJzKCk7CisgICAgY2hhaW5zID0gRGVzaXJlZFN0cnVjdHVyZUNoYWlucygpOworICAg
IHdlYWtSZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CisgICAgd3JpdGVCYXJy
aWVycyA9IERlc2lyZWRXcml0ZUJhcnJpZXJzKCk7CisgICAgdHJhbnNpdGlvbnMgPSBEZXNpcmVk
VHJhbnNpdGlvbnMoKTsKKyAgICBjYWxsYmFjayA9IG51bGxwdHI7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNyArNjAsMjIg
QEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgICAgICBDb21w
aWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgY29u
c3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7Ci0g
ICAgCi0gICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmLCBUaHJlYWREYXRh
Kik7CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb21waWxhdGlvbiBjb21wbGV0ZWQgbm9ybWFs
bHksIG9yIGZhbHNlIGlmIGl0IHdhcyBjYW5jZWxsZWQuCisgICAgYm9vbCBjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdGUmLCBUaHJlYWREYXRhKik7CiAgICAgCiAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKTsKICAgICB2b2lkIGZpbmFs
aXplQW5kTm90aWZ5Q2FsbGJhY2soKTsKICAgICAKKyAgICB2b2lkIG5vdGlmeUNvbXBpbGluZygp
OworICAgIHZvaWQgbm90aWZ5Q29tcGlsZWQoKTsKICAgICB2b2lkIG5vdGlmeVJlYWR5KCk7CiAg
ICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7CisgICAgdm9pZCBjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYsIENvZGVCbG9ja1NldCYpOworICAgIGJvb2wg
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICB2b2lkIGpldHRpc29uQWxsU3RhdGUoKTsK
ICAgICAKICAgICBWTSYgdm07CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwpAQCAt
OTYsMTUgKzEwMSwxNiBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
CiAgICAgYm9vbCB3aWxsVHJ5VG9UaWVyVXA7CiAKICAgICBkb3VibGUgYmVmb3JlRlRMOwotICAg
IAotICAgIGJvb2wgaXNDb21waWxlZDsKKworICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENv
bXBpbGluZywgQ29tcGlsZWQsIFJlYWR5IH07CisgICAgU3RhZ2Ugc3RhZ2U7CiAKICAgICBSZWZQ
dHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjazsKIAogcHJpdmF0ZToKICAg
ICBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpIGNvbnN0OwogICAgIAotICAgIGVudW0gQ29tcGls
YXRpb25QYXRoIHsgRmFpbFBhdGgsIERGR1BhdGgsIEZUTFBhdGggfTsKKyAgICBlbnVtIENvbXBp
bGF0aW9uUGF0aCB7IEZhaWxQYXRoLCBERkdQYXRoLCBGVExQYXRoLCBDYW5jZWxQYXRoIH07CiAg
ICAgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRocmVhZEltcGwoTG9uZ0xpdmVkU3RhdGUmKTsK
ICAgICAKICAgICBib29sIGlzU3RpbGxWYWxpZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MCArMzUsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1TYWZlcG9p
bnQ6OlNhZmVwb2ludChQbGFuJiBwbGFuKQorU2FmZXBvaW50OjpSZXN1bHQ6On5SZXN1bHQoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fd2FzQ2hlY2tlZCk7Cit9CisKK2Jvb2wgU2FmZXBvaW50
OjpSZXN1bHQ6OmRpZEdldENhbmNlbGxlZCgpCit7CisgICAgbV93YXNDaGVja2VkID0gdHJ1ZTsK
KyAgICByZXR1cm4gbV9kaWRHZXRDYW5jZWxsZWQ7Cit9CisKK1NhZmVwb2ludDo6U2FmZXBvaW50
KFBsYW4mIHBsYW4sIFJlc3VsdCYgcmVzdWx0KQogICAgIDogbV9wbGFuKHBsYW4pCiAgICAgLCBt
X2RpZENhbGxCZWdpbihmYWxzZSkKKyAgICAsIG1fcmVzdWx0KHJlc3VsdCkKIHsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQubV93YXNDaGVja2VkKTsKKyAgICByZXN1bHQubV93YXNDaGVja2Vk
ID0gZmFsc2U7CisgICAgcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkID0gZmFsc2U7CiB9CiAKIFNh
ZmVwb2ludDo6flNhZmVwb2ludCgpCkBAIC02OCwxMyArODMsMzIgQEAgdm9pZCBTYWZlcG9pbnQ6
OmJlZ2luKCkKICAgICBtX2RpZENhbGxCZWdpbiA9IHRydWU7CiB9CiAKLXZvaWQgU2FmZXBvaW50
Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBTYWZlcG9pbnQ6OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKworICAgIGlmICghaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG1fc2Nhbm5hYmxlcy5zaXplKCk7IGktLTspCiAgICAgICAgIG1fc2Nhbm5hYmxlc1tpXS0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorYm9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7Cisg
ICAgCisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworfQorCit2
b2lkIFNhZmVwb2ludDo6Y2FuY2VsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxC
ZWdpbik7CisgICAgCisgICAgbV9wbGFuLmpldHRpc29uQWxsU3RhdGUoKTsKKyAgICBtX3Jlc3Vs
dC5tX2RpZEdldENhbmNlbGxlZCA9IHRydWU7Cit9CisKIFZNJiBTYWZlcG9pbnQ6OnZtKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9wbGFuLnZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMzMg
QEAgc3RydWN0IFBsYW47CiAKIGNsYXNzIFNhZmVwb2ludCB7CiBwdWJsaWM6Ci0gICAgU2FmZXBv
aW50KFBsYW4mKTsKKyAgICBjbGFzcyBSZXN1bHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVz
dWx0KCkKKyAgICAgICAgICAgIDogbV9kaWRHZXRDYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAg
ICAsIG1fd2FzQ2hlY2tlZCh0cnVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIH5SZXN1bHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGlkR2V0Q2FuY2VsbGVk
KCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9kaWRHZXRDYW5jZWxs
ZWQ7CisgICAgICAgIGJvb2wgbV93YXNDaGVja2VkOworICAgIH07CisgICAgCisgICAgU2FmZXBv
aW50KFBsYW4mLCBSZXN1bHQmKTsKICAgICB+U2FmZXBvaW50KCk7CiAgICAgCiAgICAgdm9pZCBh
ZGQoU2Nhbm5hYmxlKik7CiAgICAgCiAgICAgdm9pZCBiZWdpbigpOwogICAgIAotICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKICAgICAKICAgICBWTSYgdm0oKSBjb25zdDsKIApA
QCAtNTcsNiArNzYsNyBAQCBwcml2YXRlOgogICAgIFBsYW4mIG1fcGxhbjsKICAgICBWZWN0b3I8
U2Nhbm5hYmxlKj4gbV9zY2FubmFibGVzOwogICAgIGJvb2wgbV9kaWRDYWxsQmVnaW47CisgICAg
UmVzdWx0JiBtX3Jlc3VsdDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAxNjc4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29t
cGlsYXRpb25TdGEKICAgICBQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5maW5kKGtl
eSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9wbGFucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIE5vdEtu
b3duOwotICAgIHJldHVybiBpdGVyLT52YWx1ZS0+aXNDb21waWxlZCA/IENvbXBpbGVkIDogQ29t
cGlsaW5nOworICAgIHJldHVybiBpdGVyLT52YWx1ZS0+c3RhZ2UgPT0gUGxhbjo6UmVhZHkgPyBD
b21waWxlZCA6IENvbXBpbGluZzsKIH0KIAogdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxh
bnNGb3JWTUFyZVJlYWR5KFZNJiB2bSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFdvcmtsaXN0
Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlCiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAg
ICAgICAgaWYgKCZpdGVyLT52YWx1ZS0+dm0gIT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNDb21waWxlZCkgeworICAgICAg
ICAgICAgaWYgKGl0ZXItPnZhbHVlLT5zdGFnZSAhPSBQbGFuOjpSZWFkeSkgewogICAgICAgICAg
ICAgICAgIGFsbEFyZUNvbXBpbGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlQWxs
UmVhZHlQbGFuc0ZvclZNKAogICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcmVhZHlQbGFu
c1tpXTsKICAgICAgICAgaWYgKCZwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKCFwbGFuLT5pc0NvbXBpbGVkKQorICAgICAgICBpZiAocGxhbi0+c3Rh
Z2UgIT0gUGxhbjo6UmVhZHkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbXlSZWFk
eVBsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAgbV9yZWFkeVBsYW5zW2ktLV0gPSBtX3JlYWR5
UGxhbnMubGFzdCgpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlz
dDo6Y29tcGxldGVBbGxSZWEKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlv
blF1ZXVlKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBDb21wbGV0aW5nICIsIGN1
cnJlbnRLZXksICJcbiIpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+
aXNDb21waWxlZCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlID09IFBsYW46
OlJlYWR5KTsKICAgICAgICAgCiAgICAgICAgIHBsYW4tPmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJh
Y2soKTsKICAgICAgICAgCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVzdW1l
QWxsVGhyZWFkcygpCiAgICAgbV9zdXNwZW5zaW9uTG9jay51bmxvY2soKTsKIH0KIAotdm9pZCBX
b3JrbGlzdDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgQ29kZUJsb2NrU2V0
JiBjb2RlQmxvY2tzKQordm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYgdmlzaXRvciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogewogICAgIFZNKiB2bSA9
IHZpc2l0b3IuaGVhcCgpLT52bSgpOwogICAgIHsKQEAgLTIyOSwxMSArMjI5LDEwIEBAIHZvaWQg
V29ya2xpc3Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3IKICAgICAgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICgmcGxhbi0+dm0gIT0gdm0p
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpdGVyLT52YWx1ZS0+dmlz
aXRDaGlsZHJlbih2aXNpdG9yLCBjb2RlQmxvY2tzKTsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVl
LT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yLCBjb2RlQmxvY2tzKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGZ1cnRo
ZXIgbG9ja2luZyBiZWNhdXNlOgorICAgIC8vIFRoaXMgbG9vcCBkb2Vzbid0IG5lZWQgbG9ja2lu
ZyBiZWNhdXNlOgogICAgIC8vICgxKSBubyBuZXcgdGhyZWFkcyBjYW4gYmUgYWRkZWQgdG8gbV90
aHJlYWRzLiBIZW5jZSwgaXQgaXMgaW1tdXRhYmxlIGFuZCBuZWVkcyBubyBsb2Nrcy4KICAgICAv
LyAoMikgVGhyZWFkRGF0YTo6bV9zYWZlcG9pbnQgaXMgcHJvdGVjdGVkIGJ5IHRoYXQgdGhyZWFk
J3MgbV9yaWdodFRvUnVuIHdoaWNoIHdlIG11c3QgYmUKICAgICAvLyAgICAgaG9sZGluZyBoZXJl
IGJlY2F1c2Ugb2YgYSBwcmlvciBjYWxsIHRvIHN1c3BlbmRBbGxUaHJlYWRzKCkuCkBAIC0yNDEs
NyArMjQwLDQ1IEBAIHZvaWQgV29ya2xpc3Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3IKICAg
ICAgICAgVGhyZWFkRGF0YSogZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKICAgICAgICAgU2Fm
ZXBvaW50KiBzYWZlcG9pbnQgPSBkYXRhLT5tX3NhZmVwb2ludDsKICAgICAgICAgaWYgKHNhZmVw
b2ludCAmJiAmc2FmZXBvaW50LT52bSgpID09IHZtKQotICAgICAgICAgICAgc2FmZXBvaW50LT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICAgICAgc2FmZXBvaW50LT5jaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya2xpc3Q6
OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5L
ZXlzOworICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2lu
KCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBQbGFuKiBw
bGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAoJnBsYW4tPnZtICE9ICZ2
bSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChwbGFuLT5pc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPCBQbGFuOjpDb21waWxlZCk7CisgICAg
ICAgICAgICBBU1NFUlQoIWRlYWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpOworICAg
ICAgICAgICAgZGVhZFBsYW5LZXlzLmFkZChwbGFuLT5rZXkoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRlYWRQbGFuS2V5cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIERlcXVlPFJlZlB0cjxQbGFuPj4gbmV3UXVldWU7CisgICAgICAgIHdoaWxlICghbV9xdWV1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9xdWV1ZS50
YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIGlmIChkZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+
a2V5KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbmV3UXVldWUu
YXBwZW5kKHBsYW4pOworICAgICAgICB9CisgICAgICAgIG1fcXVldWUuc3dhcChuZXdRdWV1ZSk7
CisgICAgICAgIGZvciAoSGFzaFNldDxDb21waWxhdGlvbktleT46Oml0ZXJhdG9yIGl0ZXIgPSBk
ZWFkUGxhbktleXMuYmVnaW4oKTsgaXRlciAhPSBkZWFkUGxhbktleXMuZW5kKCk7ICsraXRlcikK
KyAgICAgICAgICAgIG1fcGxhbnMucmVtb3ZlKCppdGVyKTsKKyAgICB9CisgICAgCisgICAgLy8g
Tm8gbG9ja2luZyBuZWVkZWQgZm9yIHRoaXMgcGFydCwgc2VlIGNvbW1lbnQgaW4gdmlzaXRXZWFr
UmVmZXJlbmNlcygpLgorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGhyZWFkcy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgVGhyZWFkRGF0YSogZGF0YSA9IG1fdGhyZWFkc1tpXS5nZXQoKTsKKyAg
ICAgICAgU2FmZXBvaW50KiBzYWZlcG9pbnQgPSBkYXRhLT5tX3NhZmVwb2ludDsKKyAgICAgICAg
aWYgKHNhZmVwb2ludCAmJiAmc2FmZXBvaW50LT52bSgpID09IHZtICYmICFzYWZlcG9pbnQtPmlz
S25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgICAgICBzYWZlcG9pbnQtPmNhbmNlbCgp
OwogICAgIH0KIH0KIApAQCAtMjk0LDExICszMzEsMjUgQEAgdm9pZCBXb3JrbGlzdDo6cnVuVGhy
ZWFkKFRocmVhZERhdGEqIGRhdAogICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKGRhdGEtPm1fcmlnaHRUb1J1bik7CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICAgICAg
cGxhbi0+bm90aWZ5Q29tcGlsaW5nKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZygqdGhpcywgIjogQ29tcGlsaW5nICIsIHBsYW4tPmtleSgpLCAiIGFzeW5j
aHJvbm91c2x5XG4iKTsKICAgICAgICAgCi0gICAgICAgICAgICBwbGFuLT5jb21waWxlSW5UaHJl
YWQobG9uZ0xpdmVkU3RhdGUsIGRhdGEpOworICAgICAgICAgICAgaWYgKCFwbGFuLT5jb21waWxl
SW5UaHJlYWQobG9uZ0xpdmVkU3RhdGUsIGRhdGEpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBjb21waWxhdGlvbiB3YXMgY2FuY2VsbGVkIGFuZCBub2JvZHkgd2Fu
dHMgdG8ga25vdworICAgICAgICAgICAgICAgIC8vIHRoaXMuIFRoZXJlIHNob3VsZG4ndCBiZSBh
bnkgbm90aWZpY2F0aW9uLiBXZSBhcmUgdGhlIGxhc3Qgb25lcyB0byBldmVyCisgICAgICAgICAg
ICAgICAgLy8ga25vdyBvZiB0aGlzIHBsYW4uIEtpbGwgaXQgd2l0aG91dCBmdXJ0aGVyIGZvcm1h
bGl0aWVzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgICAgICAgICAgcGxhbi0+bm90aWZ5Q29tcGlsZWQoKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3
ICs3MSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBjb25z
dDsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tT
ZXQmKTsgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcg
YWxsIHRocmVhZHMuCisgICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVy
IHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCisgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNs
b3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7CisgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0m
KTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTY3ODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDkwLDEyICs0OTAsMTIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgIH0KIH0KIAotdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKK3ZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQp
CiB7CiAgICAgY2hhciogZXJyb3IgPSAwOwogICAgIAogICAgIHsKLSAgICAgICAgR3JhcGhTYWZl
cG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoKTsKKyAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2Fm
ZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwogICAgICAgICAKICAgICAgICAg
TExWTU1DSklUQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CiAgICAgICAgIGxsdm0tPkluaXRpYWxp
emVNQ0pJVENvbXBpbGVyT3B0aW9ucygmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpKTsKQEAgLTU2
Niw3ICs1NjYsOSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogICAgICAgICBsbHZtLT5E
aXNwb3NlUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzKTsKICAgICAgICAgbGx2bS0+RGlzcG9zZUV4
ZWN1dGlvbkVuZ2luZShlbmdpbmUpOwogICAgIH0KLQorICAgIGlmIChzYWZlcG9pbnRSZXN1bHQu
ZGlkR2V0Q2FuY2VsbGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBpZiAoc2hvdWxk
U2hvd0Rpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgRXhlY3V0
YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgJKHJldmlzaW9u
IDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5j
bHVkZSAiREZHU2FmZXBvaW50LmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi12b2lkIGNvbXBpbGUoU3RhdGUmKTsKK3ZvaWQgY29t
cGlsZShTdGF0ZSYsIERGRzo6U2FmZXBvaW50OjpSZXN1bHQmKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCB2b2lk
IENvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0CiB2b2lkIENvZGVCbG9ja1NldDo6
cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKEhlYXAqIGhlYXApCiB7CiAjaWYg
RU5BQkxFKEdHQykKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJp
bmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7CiAg
ICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKSB7CiAg
ICAgICAgIGhlYXAtPmFkZFRvUmVtZW1iZXJlZFNldChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3
ICs1MTYsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAgICAg
ICAgIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7CiAgICAgICAgIHZpc2l0U21hbGxTdHJp
bmdzKCk7CiAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMp
OwotICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RzKCk7CiAgICAgICAgIHZpc2l0UHJvdGVj
dGVkT2JqZWN0cyhoZWFwUm9vdFZpc2l0b3IpOwogICAgICAgICB2aXNpdFRlbXBTb3J0VmVjdG9y
cyhoZWFwUm9vdFZpc2l0b3IpOwogICAgICAgICB2aXNpdEFyZ3VtZW50QnVmZmVycyhoZWFwUm9v
dFZpc2l0b3IpOwpAQCAtNjIyLDE3ICs2MjEsMjMgQEAgdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcgogICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKIH0K
IAotdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RzKCkKK3ZvaWQgSGVhcDo6dmlzaXRD
b21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIEdDUEhBU0UoVmlzaXRERkdXb3JrbGlzdHMpOwogICAgIGZvciAoYXV0byB3b3JrbGlzdCA6
IG1fc3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMpCi0gICAgICAgIHdvcmtsaXN0LT52aXNpdENo
aWxkcmVuKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CisgICAgICAgIHdvcmtsaXN0LT52
aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CiAKICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgIGRhdGFM
b2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyNlbmRpZgorfQogCi0gICAg
bV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwordm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29t
cGlsZXJXb3JrbGlzdEVudHJpZXMoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIEdDUEhB
U0UoRmluYWxpemVyREZHV29ya2xpc3RzKTsKKyAgICBmb3IgKGF1dG8gd29ya2xpc3QgOiBtX3N1
c3BlbmRlZENvbXBpbGVyV29ya2xpc3RzKQorICAgICAgICB3b3JrbGlzdC0+cmVtb3ZlRGVhZFBs
YW5zKCptX3ZtKTsKICNlbmRpZgogfQogCkBAIC03NDMsNiArNzQ4LDggQEAgdm9pZCBIZWFwOjp2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaQogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
IG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKICAgICAgICAgaGFydmVzdFdl
YWtSZWZlcmVuY2VzKCk7CisgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVu
Y2VzKCk7CisgICAgICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZChtX3Nsb3RWaXNpdG9yKTsg
Ly8gTmV3ICJleGVjdXRpbmciIGNvZGUgYmxvY2tzIG1heSBiZSBkaXNjb3ZlcmVkLgogICAgICAg
ICBpZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKIApAQCAt
OTk4LDYgKzEwMDUsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0
CiAgICAgY29weUJhY2tpbmdTdG9yZXMoKTsKIAogICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplcnMoKTsKKyAgICByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAg
ICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwogICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVy
Q2FjaGVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKICAgICB2b2lkIHZp
c2l0U21hbGxTdHJpbmdzKCk7CiAgICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7Ci0gICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RzKCk7CisgICAg
dm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOworICAgIHZvaWQgcmVt
b3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB2aXNpdFByb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB2aXNpdFRlbXBTb3J0VmVjdG9y
cyhIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBS
b290VmlzaXRvciYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230269</attachid>
            <date>2014-04-27 15:03:45 -0700</date>
            <delta_ts>2014-04-27 18:38:01 -0700</delta_ts>
            <desc>might actually be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32488</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3ODYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE0LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaW5ncyBmcm9tIHRoZSBERkcgd29ya2xpc3Qg
YW5kIGNhbmNlbCBvbi1nb2luZyBjb21waWxhdGlvbnMgaWYgaXQga25vd3MgdGhhdCB0aGUgY29t
cGlsYXRpb24gd291bGQgYWxyZWFkeSBiZSBpbnZhbGlkYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMTY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLiBU
aGlzIGFpbXMgZm9yIGEgYmlnIHNwZWVkLXVwIG9uIHNsb3dlciBkdWFsLWNvcmUgZGV2aWNlcy4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRl
bHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlm
aWVyczo6RGVzaXJlZElkZW50aWZpZXJzKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAg
ICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBkZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBo
U2FmZXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaFNhZmVwb2ludDo6R3JhcGhT
YWZlcG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5oOgorICAgICAgICAq
IGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om5v
dGlmeUNvbXBpbGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5Q29tcGlsZWQp
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om5vdGlmeVJlYWR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmpldHRpc29uQWxsU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnZpc2l0
Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICog
ZGZnL0RGR1NhZmVwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpSZXN1
bHQ6On5SZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6UmVzdWx0OjpkaWRH
ZXRDYW5jZWxsZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6U2FmZXBvaW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmNhbmNlbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U2FmZXBvaW50Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBk
ZmcvREZHU2FmZXBvaW50Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpSZXN1bHQ6
OlJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6V29y
a2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSk6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6
REZHOjpXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6
OnJ1blRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnZpc2l0Q2hpbGRyZW4p
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOgorICAgICAgICAqIGZ0bC9G
VExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBm
dGwvRlRMQ29tcGlsZS5oOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9j
a3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZl
cmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RF
bnRyaWVzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRXZWFrSGFuZGxlcyk6CisgICAgICAg
IChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVy
V29ya2xpc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKwogMjAxNC0wNC0y
NSAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSW5saW5lIChD
KyspIEdldEJ5VmFsIHdpdGggbnVtZXJpYyBpbmRpY2VzIG1vcmUgYWdncmVzc2l2ZWx5LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcyLDYgKzE5NzIsNDkgQEAgdm9pZCBDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
Citib29sIENvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1Nj
YW4oKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
IC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBD
b2RlQmxvY2sgZ2V0cworICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1l
YW5zIHRoYXQgaXQncyBsaXZlLgorICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRm9yIHNpbXBsaWNpdHks
IHdlIGRvbid0IGF0dGVtcHQgdG8gamV0dGlzb24gY29kZSBibG9ja3MgZHVyaW5nIEdDIGlmCisg
ICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFkIHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIg
d2VhayByZWZlcmVuY2VzIHRvCisgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51ZSB0byBleGVj
dXRlIHNvdW5kbHkuCisgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVy
biB0cnVlOworI2VuZGlmCit9CisKK2Jvb2wgQ29kZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJp
bmdHQygpCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gVGhpcyBzaG91bGQgcmV0dXJu
IHRydWUgZm9yOgorICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCBiZWhhdmUgbGlrZSBub3JtYWwg
b2JqZWN0cyAtIGkuZS4gaWYgdGhleSBhcmUgcmVmZXJlbmNlZCB0aGVuIHRoZXkKKyAgICAvLyAg
IGFyZSBsaXZlLgorICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCB3ZXJlIHJ1bm5pbmcgb24gdGhl
IHN0YWNrLgorICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCBzdXJ2aXZlZCB0aGUgbGFzdCBHQyBp
ZiB0aGUgY3VycmVudCBHQyBpcyBhbiBFZGVuIEdDLiBUaGlzIGlzCisgICAgLy8gICBiZWNhdXNl
IGVpdGhlciBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQgd291bGQgaGF2ZSBzdXJ2aXZlZCBhcyB0cnVl
IG9yIG1fbWF5QmVFeGVjdXRpbmcKKyAgICAvLyAgIHdvdWxkIHN1cnZpdmUgYXMgdHJ1ZS4KKyAg
ICAvLyAtIENvZGUgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVhZCB3ZWFrIHJlZmVyZW5j
ZXMuCisgICAgCisgICAgcmV0dXJuIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJp
bmdTY2FuKCkKKyAgICAgICAgfHwgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCiB2b2lkIENv
ZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpAQCAtMjIxNSw3ICsyMjU4LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGxpdmUuIElmIHdlIGFyZSwgdGhlbiBqZXR0aXNvbi4K
LSAgICBpZiAoIShzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHx8
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKKyAgICBp
ZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICIgaGFzIGRlYWQgd2VhayBy
ZWZlcmVuY2VzLCBqZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTY3ODM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NDcsNiArOTQ3LDggQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlk
RmFpbCgpOwogICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlk
RmFpbCgpOwogCisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOyAvLyBXaWxsIG9u
bHkgcmV0dXJuIHZhbGlkIHJlc3VsdHMgd2hlbiBjYWxsZWQgZHVyaW5nIEdDLiBBc3N1bWVzIHRo
YXQgeW91J3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB0aGUgb3duZXIgZXhlY3V0YWJsZSBp
cyBsaXZlLgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKQEAgLTEwMDEsMjkgKzEwMDMsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZHVtcEFycmF5UHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgdm9pZCBkdW1wUmFyZUNhc2VQ
cm9maWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiwg
Ym9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgICAgIAotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKQot
ICAgIHsKLSAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tz
IGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCi0gICAgICAgIC8vIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwot
ICAgICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0
J3MgbGl2ZS4KLSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIEZvciBzaW1wbGljaXR5
LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBpZgot
ICAgICAgICAvLyB0aGV5IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0
aGVpciB3ZWFrIHJlZmVyZW5jZXMgdG8KLSAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51
ZSB0byBleGVjdXRlIHNvdW5kbHkuCi0gICAgICAgIGlmIChtX21heUJlRXhlY3V0aW5nKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlREZHQ29k
ZUJsb2NrTGl2ZW5lc3MoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0jZWxzZQotICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1
bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKKyAgICBib29s
IHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCk7CiAgICAgCiAgICAg
dm9pZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZGV0ZXJt
aW5lTGl2ZW5lc3MoU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsNiArMzMsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCitEZXNpcmVkSWRlbnRpZmllcnM6OkRlc2lyZWRJZGVudGlmaWVycygpCisgICAg
OiBtX2NvZGVCbG9jayhudWxscHRyKQoreworfQorCiBEZXNpcmVkSWRlbnRpZmllcnM6OkRlc2ly
ZWRJZGVudGlmaWVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICA6IG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElk
ZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiAr
NDAsNyBAQCBjbGFzcyBDb21tb25EYXRhOwogCiBjbGFzcyBEZXNpcmVkSWRlbnRpZmllcnMgewog
cHVibGljOgorICAgIERlc2lyZWRJZGVudGlmaWVycygpOwogICAgIERlc2lyZWRJZGVudGlmaWVy
cyhDb2RlQmxvY2sqKTsKICAgICB+RGVzaXJlZElkZW50aWZpZXJzKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJ
KHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDYgQEAgc3RydWN0IEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRj
aHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IEdlbmVyaWNTZXRBZGFwdG9yPFdhdGNo
cG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMpOwogI2lmICFBU1NF
UlRfRElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUqLCBib29s
PiBTdGF0ZU1hcDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTY3ODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKK0Rlc2lyZWRXZWFrUmVmZXJlbmNlczo6RGVzaXJlZFdlYWtSZWZlcmVu
Y2VzKCkKKyAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCit7Cit9CisKIERlc2lyZWRXZWFrUmVm
ZXJlbmNlczo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAg
IDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxNjc4
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIENvbW1vbkRhdGE7CiAK
IGNsYXNzIERlc2lyZWRXZWFrUmVmZXJlbmNlcyB7CiBwdWJsaWM6CisgICAgRGVzaXJlZFdlYWtS
ZWZlcmVuY2VzKCk7CiAgICAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayopOwogICAg
IH5EZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw4ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotR3JhcGhTYWZlcG9pbnQ6OkdyYXBoU2FmZXBvaW50KEdyYXBoJiBncmFwaCkKLSAgICA6IG1f
c2FmZXBvaW50KGdyYXBoLm1fcGxhbikKK0dyYXBoU2FmZXBvaW50OjpHcmFwaFNhZmVwb2ludChH
cmFwaCYgZ3JhcGgsIFNhZmVwb2ludDo6UmVzdWx0JiByZXN1bHQpCisgICAgOiBtX3NhZmVwb2lu
dChncmFwaC5tX3BsYW4sIHJlc3VsdCkKIHsKICAgICBtX3NhZmVwb2ludC5hZGQoJmdyYXBoKTsK
ICAgICBtX3NhZmVwb2ludC5iZWdpbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaFNhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGhTYWZlcG9pbnQuaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIGNsYXNzIEdyYXBoOwogCiBjbGFzcyBHcmFwaFNhZmVwb2ludCB7CiBwdWJs
aWM6Ci0gICAgR3JhcGhTYWZlcG9pbnQoR3JhcGgmKTsKKyAgICBHcmFwaFNhZmVwb2ludChHcmFw
aCYsIFNhZmVwb2ludDo6UmVzdWx0Jik7CiAgICAgfkdyYXBoU2FmZXBvaW50KCk7CiAgICAgCiBw
cml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgUGxhbjo6UGxhbihQYXNzUmVmUHRyPENvZGVC
bG9jaz4gcGFzc2VkQwogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrLmdldCgpKQogICAgICwg
d2Vha1JlZmVyZW5jZXMoY29kZUJsb2NrLmdldCgpKQogICAgICwgd2lsbFRyeVRvVGllclVwKGZh
bHNlKQotICAgICwgaXNDb21waWxlZChmYWxzZSkKKyAgICAsIHN0YWdlKFByZXBhcmluZykKIHsK
IH0KIApAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wgUGxhbjo6cmVwb3J0Q29tcGlsZVRpbWVzKCkg
Y29uc3QKICAgICAgICAgfHwgKE9wdGlvbnM6OnJlcG9ydEZUTENvbXBpbGVUaW1lcygpICYmIGlz
RlRMKG1vZGUpKTsKIH0KIAotdm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3Rh
dGUmIGxvbmdMaXZlZFN0YXRlLCBUaHJlYWREYXRhKiB0aHJlYWREYXRhKQorYm9vbCBQbGFuOjpj
b21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0YXRlLCBUaHJlYWREYXRh
KiB0aHJlYWREYXRhKQogewogICAgIHRoaXMtPnRocmVhZERhdGEgPSB0aHJlYWREYXRhOwogICAg
IApAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZl
ZFN0YXQKIAogICAgIENvbXBpbGF0aW9uUGF0aCBwYXRoID0gY29tcGlsZUluVGhyZWFkSW1wbChs
b25nTGl2ZWRTdGF0ZSk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChmaW5hbGl6ZXIpOworICAgIFJF
TEVBU0VfQVNTRVJUKHBhdGggPT0gQ2FuY2VsUGF0aCB8fCBmaW5hbGl6ZXIpOwogICAgIAogICAg
IGlmIChyZXBvcnRDb21waWxlVGltZXMoKSkgewogICAgICAgICBjb25zdCBjaGFyKiBwYXRoTmFt
ZTsKQEAgLTE3OSw2ICsxNzksOCBAQCB2b2lkIFBsYW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2
ZWRTdGF0CiAgICAgICAgICAgICBkYXRhTG9nKCIgKERGRzogIiwgYmVmb3JlRlRMIC0gYmVmb3Jl
LCAiLCBMTFZNOiAiLCBub3cgLSBiZWZvcmVGVEwsICIpIik7CiAgICAgICAgIGRhdGFMb2coIi5c
biIpOwogICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGF0aCAhPSBDYW5jZWxQYXRoOwogfQogCiBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbChMb25nTGl2ZWRT
dGF0ZSYgbG9uZ0xpdmVkU3RhdGUpCkBAIC0zMjIsMTAgKzMyNCwxMyBAQCBQbGFuOjpDb21waWxh
dGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChk
ZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CiAgICAgICAgIAogICAgICAg
ICBib29sIGhhdmVMTFZNOworICAgICAgICBTYWZlcG9pbnQ6OlJlc3VsdCBzYWZlcG9pbnRSZXN1
bHQ7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoU2FmZXBvaW50IHNhZmVwb2ludChkZmcp
OworICAgICAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBvaW50KGRmZywgc2FmZXBvaW50UmVz
dWx0KTsKICAgICAgICAgICAgIGhhdmVMTFZNID0gaW5pdGlhbGl6ZUxMVk0oKTsKICAgICAgICAg
fQorICAgICAgICBpZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIENhbmNlbFBhdGg7CiAgICAgICAgIAogICAgICAgICBpZiAoIWhhdmVMTFZN
KSB7CiAgICAgICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVy
KCp0aGlzKSk7CkBAIC0zNDMsOCArMzQ4LDEwIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICAgICAgICAgIHJldHVybiBGVExQYXRoOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBGVEw6OmNvbXBpbGUoc3RhdGUpOwotICAgICAgICAgICAgCisgICAg
ICAgIEZUTDo6Y29tcGlsZShzdGF0ZSwgc2FmZXBvaW50UmVzdWx0KTsKKyAgICAgICAgaWYgKHNh
ZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBDYW5j
ZWxQYXRoOworICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0Jl
Zm9yZUxpbmsoKSkgewogICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKICAgICAgICAgICAg
IHJldHVybiBGVExQYXRoOwpAQCAtMzg0LDEwICszOTEsMjAgQEAgdm9pZCBQbGFuOjpyZWFsbHlB
ZGQoQ29tbW9uRGF0YSogY29tbW9uRAogICAgIHdyaXRlQmFycmllcnMudHJpZ2dlcih2bSk7CiB9
CiAKK3ZvaWQgUGxhbjo6bm90aWZ5Q29tcGlsaW5nKCkKK3sKKyAgICBzdGFnZSA9IENvbXBpbGlu
ZzsKK30KKwordm9pZCBQbGFuOjpub3RpZnlDb21waWxlZCgpCit7CisgICAgc3RhZ2UgPSBDb21w
aWxlZDsKK30KKwogdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiB7CiAgICAgY2FsbGJhY2stPmNv
bXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShjb2RlQmxvY2suZ2V0KCkpOwot
ICAgIGlzQ29tcGlsZWQgPSB0cnVlOworICAgIHN0YWdlID0gUmVhZHk7CiB9CiAKIENvbXBpbGF0
aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKQEAgLTQx
OSw4ICs0MzYsMTEgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29t
cGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQ
bGFuOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBDb2RlQmxvY2tTZXQmIGNv
ZGVCbG9ja3MpCit2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7CisgICAgaWYgKCFp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAgICAg
CkBAIC00MzQsNiArNDU0LDM4IEBAIHZvaWQgUGxhbjo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmkKICAgICB0cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwogfQogCitib29s
IFBsYW46OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3sKKyAgICBpZiAoIWNvZGVCbG9jaykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGUgcGxhbiBpdHNlbGYgamV0dGlzb25lZCBhbGwg
b2YgaXRzIHN0YXRlIGR1ZSB0byBjYW5jZWxsYXRpb24uCisgICAgaWYgKHN0YWdlID49IENvbXBp
bGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgcmVtb3ZhbCBvZiBwbGFu
cyB0aGF0IGFyZSBhbHJlYWR5IGRvbmUuIEZJWE1FOiBXZSBzaG91bGQgYWxsb3cgdGhpcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjIzNgorICAgIGlmICghSGVh
cDo6aXNNYXJrZWQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghIXByb2ZpbGVk
REZHQ29kZUJsb2NrICYmICFwcm9maWxlZERGR0NvZGVCbG9jay0+aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFBsYW46OmpldHRpc29uQWxsU3RhdGUoKQoreworICAgIGNvZGVCbG9jayA9IG51bGxwdHI7
CisgICAgcHJvZmlsZWRERkdDb2RlQmxvY2sgPSBudWxscHRyOworICAgIG11c3RIYW5kbGVWYWx1
ZXMuY2xlYXIoKTsKKyAgICBjb21waWxhdGlvbiA9IG51bGxwdHI7CisgICAgZmluYWxpemVyLmNs
ZWFyKCk7CisgICAgaW5saW5lQ2FsbEZyYW1lcyA9IG51bGxwdHI7CisgICAgd2F0Y2hwb2ludHMg
PSBEZXNpcmVkV2F0Y2hwb2ludHMoKTsKKyAgICBpZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlm
aWVycygpOworICAgIGNoYWlucyA9IERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMoKTsKKyAgICB3ZWFr
UmVmZXJlbmNlcyA9IERlc2lyZWRXZWFrUmVmZXJlbmNlcygpOworICAgIHdyaXRlQmFycmllcnMg
PSBEZXNpcmVkV3JpdGVCYXJyaWVycygpOworICAgIHRyYW5zaXRpb25zID0gRGVzaXJlZFRyYW5z
aXRpb25zKCk7CisgICAgY2FsbGJhY2sgPSBudWxscHRyOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTcgKzYwLDIyIEBAIHN0
cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAgICAgQ29tcGlsYXRp
b25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9w
ZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+UGxhbigpOwotICAgIAot
ICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXRlJiwgVGhyZWFkRGF0YSopOwor
CisgICAgLy8gUmV0dXJuIHRydWUgaWYgY29tcGlsYXRpb24gY29tcGxldGVkIG5vcm1hbGx5LCBv
ciBmYWxzZSBpZiBpdCB3YXMgY2FuY2VsbGVkLgorICAgIGJvb2wgY29tcGlsZUluVGhyZWFkKExv
bmdMaXZlZFN0YXRlJiwgVGhyZWFkRGF0YSopOwogICAgIAogICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUFu
ZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgCisgICAgdm9pZCBub3RpZnlDb21waWxpbmcoKTsKKyAg
ICB2b2lkIG5vdGlmeUNvbXBpbGVkKCk7CiAgICAgdm9pZCBub3RpZnlSZWFkeSgpOwogICAgIAog
ICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYsIENvZGVCbG9ja1NldCYpOworICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQmKTsKKyAgICBib29sIGlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCk7CisgICAgdm9pZCBqZXR0aXNvbkFsbFN0YXRlKCk7CiAgICAg
CiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKQEAgLTk2LDE1
ICsxMDEsMTYgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAg
IGJvb2wgd2lsbFRyeVRvVGllclVwOwogCiAgICAgZG91YmxlIGJlZm9yZUZUTDsKLSAgICAKLSAg
ICBib29sIGlzQ29tcGlsZWQ7CisKKyAgICBlbnVtIFN0YWdlIHsgUHJlcGFyaW5nLCBDb21waWxp
bmcsIENvbXBpbGVkLCBSZWFkeSB9OworICAgIFN0YWdlIHN0YWdlOwogCiAgICAgUmVmUHRyPERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2s7CiAKIHByaXZhdGU6CiAgICAgYm9v
bCByZXBvcnRDb21waWxlVGltZXMoKSBjb25zdDsKICAgICAKLSAgICBlbnVtIENvbXBpbGF0aW9u
UGF0aCB7IEZhaWxQYXRoLCBERkdQYXRoLCBGVExQYXRoIH07CisgICAgZW51bSBDb21waWxhdGlv
blBhdGggeyBGYWlsUGF0aCwgREZHUGF0aCwgRlRMUGF0aCwgQ2FuY2VsUGF0aCB9OwogICAgIENv
bXBpbGF0aW9uUGF0aCBjb21waWxlSW5UaHJlYWRJbXBsKExvbmdMaXZlZFN0YXRlJik7CiAgICAg
CiAgICAgYm9vbCBpc1N0aWxsVmFsaWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1
LDI1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotU2FmZXBvaW50OjpT
YWZlcG9pbnQoUGxhbiYgcGxhbikKK1NhZmVwb2ludDo6UmVzdWx0Ojp+UmVzdWx0KCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3dhc0NoZWNrZWQpOworfQorCitib29sIFNhZmVwb2ludDo6UmVz
dWx0OjpkaWRHZXRDYW5jZWxsZWQoKQoreworICAgIG1fd2FzQ2hlY2tlZCA9IHRydWU7CisgICAg
cmV0dXJuIG1fZGlkR2V0Q2FuY2VsbGVkOworfQorCitTYWZlcG9pbnQ6OlNhZmVwb2ludChQbGFu
JiBwbGFuLCBSZXN1bHQmIHJlc3VsdCkKICAgICA6IG1fcGxhbihwbGFuKQogICAgICwgbV9kaWRD
YWxsQmVnaW4oZmFsc2UpCisgICAgLCBtX3Jlc3VsdChyZXN1bHQpCiB7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7CisgICAgcmVzdWx0Lm1fd2FzQ2hlY2tlZCA9IGZh
bHNlOworICAgIHJlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IGZhbHNlOwogfQogCiBTYWZlcG9p
bnQ6On5TYWZlcG9pbnQoKQpAQCAtNjgsMTMgKzgzLDM5IEBAIHZvaWQgU2FmZXBvaW50OjpiZWdp
bigpCiAgICAgbV9kaWRDYWxsQmVnaW4gPSB0cnVlOwogfQogCi12b2lkIFNhZmVwb2ludDo6dmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgU2FmZXBvaW50OjpjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisKKyAgICBpZiAobV9yZXN1bHQubV9kaWRHZXRD
YW5jZWxsZWQpCisgICAgICAgIHJldHVybjsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVyaW5nIGEg
cHJldmlvdXMgR0MhCisgICAgCisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQor
ICAgICAgICByZXR1cm47CisgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FubmFibGVz
LnNpemUoKTsgaS0tOykKICAgICAgICAgbV9zY2FubmFibGVzW2ldLT52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOwogfQogCitib29sIFNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICAKKyAgICBpZiAobV9y
ZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBXZSB3ZXJl
IGNhbmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQywgc28gbGV0J3Mgbm90IG1lc3Mgd2l0aCBp
dCB0aGlzIHRpbWUgYXJvdW5kIC0gcHJldGVuZCBpdCdzIGxpdmUgYW5kIG1vdmUgb24uCisgICAg
CisgICAgcmV0dXJuIG1fcGxhbi5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworfQorCit2b2lk
IFNhZmVwb2ludDo6Y2FuY2VsKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdp
bik7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKTsgLy8g
V2UgY2Fubm90IGdldCBjYW5jZWxsZWQgdHdpY2UgYmVjYXVzZSBzdWJzZXF1ZW50IEdDcyB3aWxs
IHRoaW5rIHRoYXQgd2UncmUgYWxpdmUgYW5kIHRoZXkgd2lsbCBub3QgZG8gYW55dGhpbmcgdG8g
dXMuCisgICAgCisgICAgbV9wbGFuLmpldHRpc29uQWxsU3RhdGUoKTsKKyAgICBtX3Jlc3VsdC5t
X2RpZEdldENhbmNlbGxlZCA9IHRydWU7Cit9CisKIFZNJiBTYWZlcG9pbnQ6OnZtKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9wbGFuLnZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVwb2ludC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMzUgQEAg
c3RydWN0IFBsYW47CiAKIGNsYXNzIFNhZmVwb2ludCB7CiBwdWJsaWM6Ci0gICAgU2FmZXBvaW50
KFBsYW4mKTsKKyAgICBjbGFzcyBSZXN1bHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzdWx0
KCkKKyAgICAgICAgICAgIDogbV9kaWRHZXRDYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAgICAs
IG1fd2FzQ2hlY2tlZCh0cnVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIH5SZXN1bHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGlkR2V0Q2FuY2VsbGVkKCk7
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBTYWZlcG9pbnQ7
CisgICAgICAgIAorICAgICAgICBib29sIG1fZGlkR2V0Q2FuY2VsbGVkOworICAgICAgICBib29s
IG1fd2FzQ2hlY2tlZDsKKyAgICB9OworICAgIAorICAgIFNhZmVwb2ludChQbGFuJiwgUmVzdWx0
Jik7CiAgICAgflNhZmVwb2ludCgpOwogICAgIAogICAgIHZvaWQgYWRkKFNjYW5uYWJsZSopOwog
ICAgIAogICAgIHZvaWQgYmVnaW4oKTsKICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKyAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQg
Y2FuY2VsKCk7CiAgICAgCiAgICAgVk0mIHZtKCkgY29uc3Q7CiAKQEAgLTU3LDYgKzc4LDcgQEAg
cHJpdmF0ZToKICAgICBQbGFuJiBtX3BsYW47CiAgICAgVmVjdG9yPFNjYW5uYWJsZSo+IG1fc2Nh
bm5hYmxlczsKICAgICBib29sIG1fZGlkQ2FsbEJlZ2luOworICAgIFJlc3VsdCYgbV9yZXN1bHQ7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3
ICsxMDUsNyBAQCBXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhCiAgICAg
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuZmluZChrZXkpOwogICAgIGlmIChpdGVy
ID09IG1fcGxhbnMuZW5kKCkpCiAgICAgICAgIHJldHVybiBOb3RLbm93bjsKLSAgICByZXR1cm4g
aXRlci0+dmFsdWUtPmlzQ29tcGlsZWQgPyBDb21waWxlZCA6IENvbXBpbGluZzsKKyAgICByZXR1
cm4gaXRlci0+dmFsdWUtPnN0YWdlID09IFBsYW46OlJlYWR5ID8gQ29tcGlsZWQgOiBDb21waWxp
bmc7CiB9CiAKIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShW
TSYgdm0pCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxh
bnNGb3JWTUFyZQogICAgICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5z
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmICgmaXRlci0+
dmFsdWUtPnZtICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmICghaXRlci0+dmFsdWUtPmlzQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLT52
YWx1ZS0+c3RhZ2UgIT0gUGxhbjo6UmVhZHkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVDb21w
aWxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MTUxLDcgKzE1MSw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgK
ICAgICAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAgIGlm
ICgmcGxhbi0+dm0gIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgh
cGxhbi0+aXNDb21waWxlZCkKKyAgICAgICAgaWYgKHBsYW4tPnN0YWdlICE9IFBsYW46OlJlYWR5
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG15UmVhZHlQbGFucy5hcHBlbmQocGxh
bik7CiAgICAgICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKQEAg
LTE4Miw3ICsxODIsNyBAQCBXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVh
CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQogICAgICAg
ICAgICAgZGF0YUxvZygqdGhpcywgIjogQ29tcGxldGluZyAiLCBjdXJyZW50S2V5LCAiXG4iKTsK
ICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5zdGFnZSA9PSBQbGFuOjpSZWFkeSk7CiAgICAgICAg
IAogICAgICAgICBwbGFuLT5maW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgICAgIApA
QCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogICAg
IG1fc3VzcGVuc2lvbkxvY2sudW5sb2NrKCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKK3Zv
aWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENv
ZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKICAgICBWTSogdm0gPSB2aXNpdG9yLmhlYXAoKS0+
dm0oKTsKICAgICB7CkBAIC0yMjksMTEgKzIyOSwxMCBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yCiAgICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBpZiAoJnBsYW4tPnZtICE9IHZtKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaXRlci0+dmFsdWUtPnZpc2l0Q2hpbGRyZW4odmlzaXRv
ciwgY29kZUJsb2Nrcyk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS0+Y2hlY2tMaXZlbmVzc0Fu
ZFZpc2l0Q2hpbGRyZW4odmlzaXRvciwgY29kZUJsb2Nrcyk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCi0gICAgLy8gVGhpcyBsb29wIGRvZXNuJ3QgbmVlZCBmdXJ0aGVyIGxvY2tpbmcgYmVjYXVz
ZToKKyAgICAvLyBUaGlzIGxvb3AgZG9lc24ndCBuZWVkIGxvY2tpbmcgYmVjYXVzZToKICAgICAv
LyAoMSkgbm8gbmV3IHRocmVhZHMgY2FuIGJlIGFkZGVkIHRvIG1fdGhyZWFkcy4gSGVuY2UsIGl0
IGlzIGltbXV0YWJsZSBhbmQgbmVlZHMgbm8gbG9ja3MuCiAgICAgLy8gKDIpIFRocmVhZERhdGE6
Om1fc2FmZXBvaW50IGlzIHByb3RlY3RlZCBieSB0aGF0IHRocmVhZCdzIG1fcmlnaHRUb1J1biB3
aGljaCB3ZSBtdXN0IGJlCiAgICAgLy8gICAgIGhvbGRpbmcgaGVyZSBiZWNhdXNlIG9mIGEgcHJp
b3IgY2FsbCB0byBzdXNwZW5kQWxsVGhyZWFkcygpLgpAQCAtMjQxLDcgKzI0MCw0NSBAQCB2b2lk
IFdvcmtsaXN0Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yCiAgICAgICAgIFRocmVhZERhdGEq
IGRhdGEgPSBtX3RocmVhZHNbaV0uZ2V0KCk7CiAgICAgICAgIFNhZmVwb2ludCogc2FmZXBvaW50
ID0gZGF0YS0+bV9zYWZlcG9pbnQ7CiAgICAgICAgIGlmIChzYWZlcG9pbnQgJiYgJnNhZmVwb2lu
dC0+dm0oKSA9PSB2bSkKLSAgICAgICAgICAgIHNhZmVwb2ludC0+dmlzaXRDaGlsZHJlbih2aXNp
dG9yKTsKKyAgICAgICAgICAgIHNhZmVwb2ludC0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CisgICAgfQorfQorCit2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMo
Vk0mIHZtKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKKyAgICAgICAgZm9y
IChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxh
bnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVl
LmdldCgpOworICAgICAgICAgICAgaWYgKCZwbGFuLT52bSAhPSAmdm0pCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZlRHVyaW5n
R0MoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHBsYW4tPnN0YWdlIDwgUGxhbjo6Q29tcGlsZWQpOworICAgICAgICAgICAgQVNTRVJUKCFk
ZWFkUGxhbktleXMuY29udGFpbnMocGxhbi0+a2V5KCkpKTsKKyAgICAgICAgICAgIGRlYWRQbGFu
S2V5cy5hZGQocGxhbi0+a2V5KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChkZWFkUGxhbktl
eXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBEZXF1ZTxSZWZQdHI8
UGxhbj4+IG5ld1F1ZXVlOworICAgICAgICB3aGlsZSAoIW1fcXVldWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAg
ICAgICAgICBpZiAoZGVhZFBsYW5LZXlzLmNvbnRhaW5zKHBsYW4tPmtleSgpKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5ld1F1ZXVlLmFwcGVuZChwbGFuKTsKKyAg
ICAgICAgfQorICAgICAgICBtX3F1ZXVlLnN3YXAobmV3UXVldWUpOworICAgICAgICBmb3IgKEhh
c2hTZXQ8Q29tcGlsYXRpb25LZXk+OjppdGVyYXRvciBpdGVyID0gZGVhZFBsYW5LZXlzLmJlZ2lu
KCk7IGl0ZXIgIT0gZGVhZFBsYW5LZXlzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBtX3Bs
YW5zLnJlbW92ZSgqaXRlcik7CisgICAgfQorICAgIAorICAgIC8vIE5vIGxvY2tpbmcgbmVlZGVk
IGZvciB0aGlzIHBhcnQsIHNlZSBjb21tZW50IGluIHZpc2l0V2Vha1JlZmVyZW5jZXMoKS4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFRo
cmVhZERhdGEqIGRhdGEgPSBtX3RocmVhZHNbaV0uZ2V0KCk7CisgICAgICAgIFNhZmVwb2ludCog
c2FmZXBvaW50ID0gZGF0YS0+bV9zYWZlcG9pbnQ7CisgICAgICAgIGlmIChzYWZlcG9pbnQgJiYg
JnNhZmVwb2ludC0+dm0oKSA9PSAmdm0gJiYgIXNhZmVwb2ludC0+aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MoKSkKKyAgICAgICAgICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7CiAgICAgfQogfQogCkBA
IC0yOTQsMTEgKzMzMSwyNSBAQCB2b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQoVGhyZWFkRGF0YSog
ZGF0CiAgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
ZGF0YS0+bV9yaWdodFRvUnVuKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBwbGFuLT5ub3RpZnlDb21w
aWxpbmcoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCp0
aGlzLCAiOiBDb21waWxpbmcgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwog
ICAgICAgICAKLSAgICAgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChsb25nTGl2ZWRTdGF0
ZSwgZGF0YSk7CisgICAgICAgICAgICBpZiAoIXBsYW4tPmNvbXBpbGVJblRocmVhZChsb25nTGl2
ZWRTdGF0ZSwgZGF0YSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhl
IGNvbXBpbGF0aW9uIHdhcyBjYW5jZWxsZWQgYW5kIG5vYm9keSB3YW50cyB0byBrbm93CisgICAg
ICAgICAgICAgICAgLy8gdGhpcy4gVGhlcmUgc2hvdWxkbid0IGJlIGFueSBub3RpZmljYXRpb24u
IFdlIGFyZSB0aGUgbGFzdCBvbmVzIHRvIGV2ZXIKKyAgICAgICAgICAgICAgICAvLyBrbm93IG9m
IHRoaXMgcGxhbi4gS2lsbCBpdCB3aXRob3V0IGZ1cnRoZXIgZm9ybWFsaXRpZXMuCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICBwbGFuLT5ub3RpZnlDb21waWxlZCgpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDkgQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgaXNBY3RpdmVGb3JWTShWTSYpIGNvbnN0OwogICAgIAotICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYsIENvZGVCbG9ja1NldCYpOyAvLyBPbmx5IGNh
bGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwgdGhyZWFkcy4KKyAg
ICAvLyBPbmx5IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgYWZ0ZXIgc3VzcGVuZGluZyBhbGwg
dGhyZWFkcy4KKyAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImLCBDb2Rl
QmxvY2tTZXQmKTsKKyAgICB2b2lkIHJlbW92ZURlYWRQbGFucyhWTSYpOwogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsMTIg
KzQ5MCwxMiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAg
fQogfQogCi12b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQordm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQmIHNhZmVwb2ludFJlc3VsdCkKIHsKICAgICBjaGFyKiBl
cnJvciA9IDA7CiAgICAgCiAgICAgewotICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQo
c3RhdGUuZ3JhcGgpOworICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoc3RhdGUuZ3Jh
cGgsIHNhZmVwb2ludFJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICBMTFZNTUNKSVRDb21waWxl
ck9wdGlvbnMgb3B0aW9uczsKICAgICAgICAgbGx2bS0+SW5pdGlhbGl6ZU1DSklUQ29tcGlsZXJP
cHRpb25zKCZvcHRpb25zLCBzaXplb2Yob3B0aW9ucykpOwpAQCAtNTY2LDcgKzU2Niw5IEBAIHZv
aWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGxsdm0tPkRpc3Bvc2VQYXNzTWFuYWdl
cihtb2R1bGVQYXNzZXMpOwogICAgICAgICBsbHZtLT5EaXNwb3NlRXhlY3V0aW9uRW5naW5lKGVu
Z2luZSk7CiAgICAgfQotCisgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHko
KSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+aGFu
ZGxlcygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
KiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0uZ2V0KCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEx
ICsyOCwxMiBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJERkdTYWZlcG9p
bnQuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKLXZvaWQgY29tcGlsZShTdGF0ZSYpOwordm9pZCBjb21waWxlKFN0YXRlJiwgREZH
OjpTYWZlcG9pbnQ6OlJlc3VsdCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNp
b24gMTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw4IEBAIHZvaWQgQ29kZUJsb2NrU2V0Ojp0
cmFjZU1hcmtlZChTbG90VmlzaXQKIHZvaWQgQ29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRs
eUV4ZWN1dGluZ0NvZGVCbG9ja3MoSGVhcCogaGVhcCkKIHsKICNpZiBFTkFCTEUoR0dDKQorICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZW1lbWJlcmluZyAiLCBtX2N1cnJlbnRs
eUV4ZWN1dGluZy5zaXplKCksICIgY29kZSBibG9ja3MuXG4iKTsKICAgICBmb3IgKENvZGVCbG9j
ayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpIHsKICAgICAgICAgaGVhcC0+YWRk
VG9SZW1lbWJlcmVkU2V0KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwogICAgICAgICBB
U1NFUlQoY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE2LDcgKzUxNiw2IEBAIHZvaWQg
SGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICAgICAgdmlzaXRFeHRlcm5h
bFJlbWVtYmVyZWRTZXQoKTsKICAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICAgICAg
dmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgIHZpc2l0
Q29tcGlsZXJXb3JrbGlzdHMoKTsKICAgICAgICAgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKGhlYXBS
b290VmlzaXRvcik7CiAgICAgICAgIHZpc2l0VGVtcFNvcnRWZWN0b3JzKGhlYXBSb290VmlzaXRv
cik7CiAgICAgICAgIHZpc2l0QXJndW1lbnRCdWZmZXJzKGhlYXBSb290VmlzaXRvcik7CkBAIC02
MjIsMTcgKzYyMSwyMyBAQCB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2Vy
CiAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogfQogCi12b2lkIEhlYXA6OnZp
c2l0Q29tcGlsZXJXb3JrbGlzdHMoKQordm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgR0NQSEFTRShWaXNp
dERGR1dvcmtsaXN0cyk7CiAgICAgZm9yIChhdXRvIHdvcmtsaXN0IDogbV9zdXNwZW5kZWRDb21w
aWxlcldvcmtsaXN0cykKLSAgICAgICAgd29ya2xpc3QtPnZpc2l0Q2hpbGRyZW4obV9zbG90Vmlz
aXRvciwgbV9jb2RlQmxvY2tzKTsKKyAgICAgICAgd29ya2xpc3QtPnZpc2l0V2Vha1JlZmVyZW5j
ZXMobV9zbG90VmlzaXRvciwgbV9jb2RlQmxvY2tzKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dH
QygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0
czpcbiIsIG1fc2xvdFZpc2l0b3IpOworI2VuZGlmCit9CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRv
bmF0ZUFuZERyYWluKCk7Cit2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50
cmllcygpCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgR0NQSEFTRShGaW5hbGl6ZXJERkdX
b3JrbGlzdHMpOworICAgIGZvciAoYXV0byB3b3JrbGlzdCA6IG1fc3VzcGVuZGVkQ29tcGlsZXJX
b3JrbGlzdHMpCisgICAgICAgIHdvcmtsaXN0LT5yZW1vdmVEZWFkUGxhbnMoKm1fdm0pOwogI2Vu
ZGlmCiB9CiAKQEAgLTc0Myw2ICs3NDgsOCBAQCB2b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMo
SGVhcFJvb3RWaXNpCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgbV9vYmplY3RTcGFjZS52
aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwogICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsK
KyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAg
bV9jb2RlQmxvY2tzLnRyYWNlTWFya2VkKG1fc2xvdFZpc2l0b3IpOyAvLyBOZXcgImV4ZWN1dGlu
ZyIgY29kZSBibG9ja3MgbWF5IGJlIGRpc2NvdmVyZWQuCiAgICAgICAgIGlmIChtX3Nsb3RWaXNp
dG9yLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC05OTgsNiArMTAwNSw3IEBA
IHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICBjb3B5QmFja2lu
Z1N0b3JlcygpOwogCiAgICAgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAg
IHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwogICAgIGRlbGV0ZVVubWFya2Vk
Q29tcGlsZWRDb2RlKCk7CiAgICAgZGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKICAgICBu
b3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDcgKzI3NCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2
aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwogICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3Mo
KTsKICAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsK
LSAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdHMoKTsKKyAgICB2b2lkIHZpc2l0Q29tcGls
ZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJX
b3JrbGlzdEVudHJpZXMoKTsKICAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9v
dFZpc2l0b3ImKTsKICAgICB2b2lkIHZpc2l0VGVtcFNvcnRWZWN0b3JzKEhlYXBSb290VmlzaXRv
ciYpOwogICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230273</attachid>
            <date>2014-04-27 18:38:01 -0700</date>
            <delta_ts>2014-04-27 20:26:26 -0700</delta_ts>
            <desc>and now, plans are cancellable at *any* time</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33356</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3ODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE0LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaW5ncyBmcm9tIHRoZSBERkcgd29ya2xpc3Qg
YW5kIGNhbmNlbCBvbi1nb2luZyBjb21waWxhdGlvbnMgaWYgaXQga25vd3MgdGhhdCB0aGUgY29t
cGlsYXRpb24gd291bGQgYWxyZWFkeSBiZSBpbnZhbGlkYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMTY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLiBU
aGlzIGFpbXMgZm9yIGEgYmlnIHNwZWVkLXVwIG9uIHNsb3dlciBkdWFsLWNvcmUgZGV2aWNlcy4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRl
bHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdE
ZXNpcmVkSWRlbnRpZmllcnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJZGVudGlm
aWVyczo6RGVzaXJlZElkZW50aWZpZXJzKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAg
ICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBkZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBo
U2FmZXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaFNhZmVwb2ludDo6R3JhcGhT
YWZlcG9pbnQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5oOgorICAgICAgICAq
IGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om5v
dGlmeUNvbXBpbGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5Q29tcGlsZWQp
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om5vdGlmeVJlYWR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6dmlzaXRDaGlsZHJlbik6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKiBkZmcvREZHU2Fm
ZXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OlJlc3VsdDo6flJlc3Vs
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpSZXN1bHQ6OmRpZEdldENhbmNlbGxl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpTYWZlcG9pbnQpOgorICAgICAgICAo
SlNDOjpERkc6OlNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MpOgorICAg
ICAgICAoSlNDOjpERkc6OlNhZmVwb2ludDo6Y2FuY2VsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
YWZlcG9pbnQ6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTYWZl
cG9pbnQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OlJlc3VsdDo6UmVzdWx0KToK
KyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6Oldvcmts
aXN0Ojpjb21waWxhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6d2Fp
dFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlz
dDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlz
dDo6Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpERkc6Oldvcmts
aXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6
cmVtb3ZlRGVhZFBsYW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cnVuVGhyZWFk
KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQu
CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDb21w
aWxlLmg6CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2Nrcyk6CisgICAg
ICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMpOgor
ICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFdlYWtIYW5kbGVzKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdHMp
OiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorCiAyMDE0LTA0LTI1ICBBbmRyZWFz
IEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBJbmxpbmUgKEMrKykgR2V0QnlW
YWwgd2l0aCBudW1lcmljIGluZGljZXMgbW9yZSBhZ2dyZXNzaXZlbHkuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTY3ODM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NzIsNiArMTk3Miw0OSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKK2Jvb2wgQ29k
ZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpCit7Cisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBD
b2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCisgICAgLy8gdGhlaXIg
d2VhayByZWZlcmVuY2VzIGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBn
ZXRzCisgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoaXMgbWVhbnMgdGhhdCBp
dCdzIGxpdmUuCisgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3Qg
YXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJsb2NrcyBkdXJpbmcgR0MgaWYKKyAgICAvLyB0aGV5
IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0aGVpciB3ZWFrIHJlZmVy
ZW5jZXMgdG8KKyAgICAvLyBhbGxvdyB0aGVtIHRvIGNvbnRpbnVlIHRvIGV4ZWN1dGUgc291bmRs
eS4KKyAgICBpZiAobV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2RlQmxvY2tMaXZlbmVzcygpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKK30KKworYm9vbCBDb2RlQmxvY2s6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3sK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBUaGlzIHNob3VsZCByZXR1cm4gdHJ1ZSBmb3I6
CisgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IGJlaGF2ZSBsaWtlIG5vcm1hbCBvYmplY3RzIC0g
aS5lLiBpZiB0aGV5IGFyZSByZWZlcmVuY2VkIHRoZW4gdGhleQorICAgIC8vICAgYXJlIGxpdmUu
CisgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IHdlcmUgcnVubmluZyBvbiB0aGUgc3RhY2suCisg
ICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IHN1cnZpdmVkIHRoZSBsYXN0IEdDIGlmIHRoZSBjdXJy
ZW50IEdDIGlzIGFuIEVkZW4gR0MuIFRoaXMgaXMKKyAgICAvLyAgIGJlY2F1c2UgZWl0aGVyIGxp
dmVuZXNzSGFzQmVlblByb3ZlZCB3b3VsZCBoYXZlIHN1cnZpdmVkIGFzIHRydWUgb3IgbV9tYXlC
ZUV4ZWN1dGluZworICAgIC8vICAgd291bGQgc3Vydml2ZSBhcyB0cnVlLgorICAgIC8vIC0gQ29k
ZSBibG9ja3MgdGhhdCBkb24ndCBoYXZlIGFueSBkZWFkIHdlYWsgcmVmZXJlbmNlcy4KKyAgICAK
KyAgICByZXR1cm4gc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKQor
ICAgICAgICB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQ7
CisjZWxzZQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKIHZvaWQgQ29kZUJsb2NrOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CkBAIC0yMjE1LDcgKzIyNTgsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBDaGVj
ayBpZiB3ZSdyZSBub3QgbGl2ZS4gSWYgd2UgYXJlLCB0aGVuIGpldHRpc29uLgotICAgIGlmICgh
KHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkgfHwgbV9qaXRDb2Rl
LT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKSkgeworICAgIGlmICghaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICAgICAgZGF0YUxvZygqdGhpcywgIiBoYXMgZGVhZCB3ZWFrIHJlZmVyZW5jZXMs
IGpldHRpc29uaW5nIGR1cmluZyBHQy5cbiIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0Nyw2
ICs5NDcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CiAg
ICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CiAK
KyAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7IC8vIFdpbGwgb25seSByZXR1cm4g
dmFsaWQgcmVzdWx0cyB3aGVuIGNhbGxlZCBkdXJpbmcgR0MuIEFzc3VtZXMgdGhhdCB5b3UndmUg
YWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0IHRoZSBvd25lciBleGVjdXRhYmxlIGlzIGxpdmUuCisK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgpIG92ZXJyaWRlOwpAQCAtMTAwMSwyOSArMTAwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
dW1wQXJyYXlQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBjb25zdCBJbnN0cnVjdGlvbiomLCBib29s
JiBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICB2b2lkIGR1bXBSYXJlQ2FzZVByb2ZpbGUoUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKiBuYW1lLCBSYXJlQ2FzZVByb2ZpbGUqLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgYm9v
bCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpCi0gICAgewotICAg
ICAgICAvLyBJbnRlcnByZXRlciBhbmQgQmFzZWxpbmUgSklUIENvZGVCbG9ja3MgZG9uJ3QgbmVl
ZCB0byBiZSBqZXR0aXNvbmVkIHdoZW4KLSAgICAgICAgLy8gdGhlaXIgd2VhayByZWZlcmVuY2Vz
IGdvIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRzCi0gICAgICAgIC8v
IHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgaXQncyBsaXZlLgot
ICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIGRvbid0
IGF0dGVtcHQgdG8gamV0dGlzb24gY29kZSBibG9ja3MgZHVyaW5nIEdDIGlmCi0gICAgICAgIC8v
IHRoZXkgYXJlIGV4ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRoZWlyIHdlYWsg
cmVmZXJlbmNlcyB0bwotICAgICAgICAvLyBhbGxvdyB0aGVtIHRvIGNvbnRpbnVlIHRvIGV4ZWN1
dGUgc291bmRseS4KLSAgICAgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2RlQmxvY2tMaXZl
bmVzcygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSNlbHNlCi0gICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgorICAgIGJvb2wgc2hvdWxkSW1t
ZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKTsKICAgICAKICAgICB2b2lkIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBkZXRlcm1pbmVMaXZlbmVz
cyhTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkSWRlbnRpZmllcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw2ICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
K0Rlc2lyZWRJZGVudGlmaWVyczo6RGVzaXJlZElkZW50aWZpZXJzKCkKKyAgICA6IG1fY29kZUJs
b2NrKG51bGxwdHIpCit7Cit9CisKIERlc2lyZWRJZGVudGlmaWVyczo6RGVzaXJlZElkZW50aWZp
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVu
dGlmaWVycy5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRJZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3IEBAIGNs
YXNzIENvbW1vbkRhdGE7CiAKIGNsYXNzIERlc2lyZWRJZGVudGlmaWVycyB7CiBwdWJsaWM6Cisg
ICAgRGVzaXJlZElkZW50aWZpZXJzKCk7CiAgICAgRGVzaXJlZElkZW50aWZpZXJzKENvZGVCbG9j
ayopOwogICAgIH5EZXNpcmVkSWRlbnRpZmllcnMoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24g
MTY3ODM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNiBAQCBzdHJ1Y3QgQXJyYXlCdWZmZXJW
aWV3V2F0Y2hwb2ludEFkYXB0b3IgCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRU
eXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gR2VuZXJpY1NldEFkYXB0b3I8V2F0Y2hwb2ludFNldFR5
cGU+PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyk7CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIHR5cGVkZWYgSGFzaE1hcDxXYXRjaHBvaW50U2V0VHlwZSosIGJvb2w+IFN0YXRlTWFw
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFr
UmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAorRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpEZXNpcmVkV2Vha1JlZmVyZW5jZXMoKQorICAg
IDogbV9jb2RlQmxvY2sobnVsbHB0cikKK3sKK30KKwogRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpE
ZXNpcmVkV2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgOiBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXZWFrUmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHJldmlzaW9uIDE2NzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgQ29tbW9uRGF0YTsKIAogY2xhc3MgRGVz
aXJlZFdlYWtSZWZlcmVuY2VzIHsKIHB1YmxpYzoKKyAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMo
KTsKICAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMoQ29kZUJsb2NrKik7CiAgICAgfkRlc2lyZWRX
ZWFrUmVmZXJlbmNlcygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoU2FmZXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDggKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1HcmFwaFNh
ZmVwb2ludDo6R3JhcGhTYWZlcG9pbnQoR3JhcGgmIGdyYXBoKQotICAgIDogbV9zYWZlcG9pbnQo
Z3JhcGgubV9wbGFuKQorR3JhcGhTYWZlcG9pbnQ6OkdyYXBoU2FmZXBvaW50KEdyYXBoJiBncmFw
aCwgU2FmZXBvaW50OjpSZXN1bHQmIHJlc3VsdCkKKyAgICA6IG1fc2FmZXBvaW50KGdyYXBoLm1f
cGxhbiwgcmVzdWx0KQogewogICAgIG1fc2FmZXBvaW50LmFkZCgmZ3JhcGgpOwogICAgIG1fc2Fm
ZXBvaW50LmJlZ2luKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
U2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaFNhZmVwb2ludC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgY2xhc3MgR3JhcGg7CiAKIGNsYXNzIEdyYXBoU2FmZXBvaW50IHsKIHB1YmxpYzoKLSAgICBH
cmFwaFNhZmVwb2ludChHcmFwaCYpOworICAgIEdyYXBoU2FmZXBvaW50KEdyYXBoJiwgU2FmZXBv
aW50OjpSZXN1bHQmKTsKICAgICB+R3JhcGhTYWZlcG9pbnQoKTsKICAgICAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2NzgzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCw3ICsxMjQsNyBAQCBQbGFuOjpQbGFuKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNz
ZWRDCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3ZWFrUmVmZXJl
bmNlcyhjb2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3aWxsVHJ5VG9UaWVyVXAoZmFsc2UpCi0gICAg
LCBpc0NvbXBpbGVkKGZhbHNlKQorICAgICwgc3RhZ2UoUHJlcGFyaW5nKQogewogfQogCkBAIC0x
NDMsOCArMTQzLDExIEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXQK
ICAgICB0aGlzLT50aHJlYWREYXRhID0gdGhyZWFkRGF0YTsKICAgICAKICAgICBkb3VibGUgYmVm
b3JlID0gMDsKLSAgICBpZiAocmVwb3J0Q29tcGlsZVRpbWVzKCkpCisgICAgQ1N0cmluZyBjb2Rl
QmxvY2tOYW1lOworICAgIGlmIChyZXBvcnRDb21waWxlVGltZXMoKSkgewogICAgICAgICBiZWZv
cmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGNvZGVCbG9ja05hbWUgPSB0b0NTdHJpbmco
KmNvZGVCbG9jayk7CisgICAgfQogICAgIAogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgQ29tcGlsYXRpb24gKFBsYW4pIik7CiAgICAgQ29tcGlsYXRpb25TY29wZSBjb21w
aWxhdGlvblNjb3BlOwpAQCAtMTU0LDcgKzE1Nyw4IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhy
ZWFkKExvbmdMaXZlZFN0YXQKIAogICAgIENvbXBpbGF0aW9uUGF0aCBwYXRoID0gY29tcGlsZUlu
VGhyZWFkSW1wbChsb25nTGl2ZWRTdGF0ZSk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChmaW5hbGl6
ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKHBhdGggPT0gQ2FuY2VsUGF0aCB8fCBmaW5hbGl6ZXIp
OworICAgIFJFTEVBU0VfQVNTRVJUKChwYXRoID09IENhbmNlbFBhdGgpID09IChzdGFnZSA9PSBD
YW5jZWxsZWQpKTsKICAgICAKICAgICBpZiAocmVwb3J0Q29tcGlsZVRpbWVzKCkpIHsKICAgICAg
ICAgY29uc3QgY2hhciogcGF0aE5hbWU7CkBAIC0xNjgsMTMgKzE3MiwxNiBAQCB2b2lkIFBsYW46
OmNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAgICAgICAgIGNhc2UgRlRMUGF0aDoKICAg
ICAgICAgICAgIHBhdGhOYW1lID0gIkZUTCI7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDYW5jZWxQYXRoOgorICAgICAgICAgICAgcGF0aE5hbWUgPSAiQ2FuY2VsbGVkIjsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHBhdGhOYW1lID0gIiI7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWVN
UygpOwotICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgIiwgKmNvZGVCbG9jaywgIiB1c2luZyAi
LCBtb2RlLCAiIHdpdGggIiwgcGF0aE5hbWUsICIgaW50byAiLCBmaW5hbGl6ZXItPmNvZGVTaXpl
KCksICIgYnl0ZXMgaW4gIiwgbm93IC0gYmVmb3JlLCAiIG1zIik7CisgICAgICAgIGRhdGFMb2co
Ik9wdGltaXplZCAiLCBjb2RlQmxvY2tOYW1lLCAiIHVzaW5nICIsIG1vZGUsICIgd2l0aCAiLCBw
YXRoTmFtZSwgIiBpbnRvICIsIGZpbmFsaXplciA/IGZpbmFsaXplci0+Y29kZVNpemUoKSA6IDAs
ICIgYnl0ZXMgaW4gIiwgbm93IC0gYmVmb3JlLCAiIG1zIik7CiAgICAgICAgIGlmIChwYXRoID09
IEZUTFBhdGgpCiAgICAgICAgICAgICBkYXRhTG9nKCIgKERGRzogIiwgYmVmb3JlRlRMIC0gYmVm
b3JlLCAiLCBMTFZNOiAiLCBub3cgLSBiZWZvcmVGVEwsICIpIik7CiAgICAgICAgIGRhdGFMb2co
Ii5cbiIpOwpAQCAtMzIyLDEwICszMjksMTMgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46
OmNvbXBpbGVJblRocgogICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVz
dCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIpOwogICAgICAgICAKICAgICAgICAgYm9vbCBoYXZlTExW
TTsKKyAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50UmVzdWx0OwogICAgICAgICB7
Ci0gICAgICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoZGZnKTsKKyAgICAgICAgICAg
IEdyYXBoU2FmZXBvaW50IHNhZmVwb2ludChkZmcsIHNhZmVwb2ludFJlc3VsdCk7CiAgICAgICAg
ICAgICBoYXZlTExWTSA9IGluaXRpYWxpemVMTFZNKCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYg
KHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBD
YW5jZWxQYXRoOwogICAgICAgICAKICAgICAgICAgaWYgKCFoYXZlTExWTSkgewogICAgICAgICAg
ICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOwpAQCAt
MzQzLDggKzM1MywxMCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgRlRMOjpjb21waWxlKHN0YXRlKTsKLSAgICAgICAgICAgIAorICAgICAgICBGVEw6OmNvbXBp
bGUoc3RhdGUsIHNhZmVwb2ludFJlc3VsdCk7CisgICAgICAgIGlmIChzYWZlcG9pbnRSZXN1bHQu
ZGlkR2V0Q2FuY2VsbGVkKCkpCisgICAgICAgICAgICByZXR1cm4gQ2FuY2VsUGF0aDsKKyAgICAg
ICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNCZWZvcmVMaW5rKCkpIHsK
ICAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gRlRMUGF0
aDsKQEAgLTM4NCwxMCArMzk2LDIwIEBAIHZvaWQgUGxhbjo6cmVhbGx5QWRkKENvbW1vbkRhdGEq
IGNvbW1vbkQKICAgICB3cml0ZUJhcnJpZXJzLnRyaWdnZXIodm0pOwogfQogCit2b2lkIFBsYW46
Om5vdGlmeUNvbXBpbGluZygpCit7CisgICAgc3RhZ2UgPSBDb21waWxpbmc7Cit9CisKK3ZvaWQg
UGxhbjo6bm90aWZ5Q29tcGlsZWQoKQoreworICAgIHN0YWdlID0gQ29tcGlsZWQ7Cit9CisKIHZv
aWQgUGxhbjo6bm90aWZ5UmVhZHkoKQogewogICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJl
Y29tZVJlYWR5QXN5bmNocm9ub3VzbHkoY29kZUJsb2NrLmdldCgpKTsKLSAgICBpc0NvbXBpbGVk
ID0gdHJ1ZTsKKyAgICBzdGFnZSA9IFJlYWR5OwogfQogCiBDb21waWxhdGlvblJlc3VsdCBQbGFu
OjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCkBAIC00MTksOCArNDQxLDExIEBA
IENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQordm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
ciwgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogeworICAgIGlmICghaXNLbm93blRvQmVMaXZl
RHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkVmFsdWUoJm11c3RIYW5kbGVWYWx1ZXNbaV0pOwogICAgIApAQCAtNDM0LDYgKzQ1
OSwzNyBAQCB2b2lkIFBsYW46OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpCiAgICAgdHJh
bnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAorYm9vbCBQbGFuOjppc0tub3du
VG9CZUxpdmVEdXJpbmdHQygpCit7CisgICAgaWYgKHN0YWdlID09IENhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghSGVhcDo6aXNNYXJrZWQoY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghIXByb2ZpbGVkREZHQ29kZUJsb2NrICYmICFwcm9maWxlZERG
R0NvZGVCbG9jay0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsYW46OmNhbmNlbCgpCit7CisgICAg
Y29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICBwcm9maWxlZERGR0NvZGVCbG9jayA9IG51bGxwdHI7
CisgICAgbXVzdEhhbmRsZVZhbHVlcy5jbGVhcigpOworICAgIGNvbXBpbGF0aW9uID0gbnVsbHB0
cjsKKyAgICBmaW5hbGl6ZXIuY2xlYXIoKTsKKyAgICBpbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0
cjsKKyAgICB3YXRjaHBvaW50cyA9IERlc2lyZWRXYXRjaHBvaW50cygpOworICAgIGlkZW50aWZp
ZXJzID0gRGVzaXJlZElkZW50aWZpZXJzKCk7CisgICAgY2hhaW5zID0gRGVzaXJlZFN0cnVjdHVy
ZUNoYWlucygpOworICAgIHdlYWtSZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7
CisgICAgd3JpdGVCYXJyaWVycyA9IERlc2lyZWRXcml0ZUJhcnJpZXJzKCk7CisgICAgdHJhbnNp
dGlvbnMgPSBEZXNpcmVkVHJhbnNpdGlvbnMoKTsKKyAgICBjYWxsYmFjayA9IG51bGxwdHI7Cisg
ICAgc3RhZ2UgPSBDYW5jZWxsZWQ7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNyArNjAsMjEgQEAgc3RydWN0IFBsYW4gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgICAgICBDb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7Ci0gICAgCisKICAgICB2b2lkIGNv
bXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0ZSYsIFRocmVhZERhdGEqKTsKICAgICAKICAgICBD
b21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpOwogICAg
IHZvaWQgZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwogICAgIAorICAgIHZvaWQgbm90aWZ5
Q29tcGlsaW5nKCk7CisgICAgdm9pZCBub3RpZnlDb21waWxlZCgpOwogICAgIHZvaWQgbm90aWZ5
UmVhZHkoKTsKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAKLSAgICB2b2lk
IHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQmKTsKKyAgICB2b2lkIGNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7
CisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgY2FuY2VsKCk7
CiAgICAgCiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKQEAg
LTk2LDE1ICsxMDAsMTYgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZQogICAgIGJvb2wgd2lsbFRyeVRvVGllclVwOwogCiAgICAgZG91YmxlIGJlZm9yZUZUTDsKLSAg
ICAKLSAgICBib29sIGlzQ29tcGlsZWQ7CisKKyAgICBlbnVtIFN0YWdlIHsgUHJlcGFyaW5nLCBD
b21waWxpbmcsIENvbXBpbGVkLCBSZWFkeSwgQ2FuY2VsbGVkIH07CisgICAgU3RhZ2Ugc3RhZ2U7
CiAKICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjazsKIAog
cHJpdmF0ZToKICAgICBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpIGNvbnN0OwogICAgIAotICAg
IGVudW0gQ29tcGlsYXRpb25QYXRoIHsgRmFpbFBhdGgsIERGR1BhdGgsIEZUTFBhdGggfTsKKyAg
ICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZhaWxQYXRoLCBERkdQYXRoLCBGVExQYXRoLCBDYW5j
ZWxQYXRoIH07CiAgICAgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRocmVhZEltcGwoTG9uZ0xp
dmVkU3RhdGUmKTsKICAgICAKICAgICBib29sIGlzU3RpbGxWYWxpZCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkocmV2aXNpb24gMTY3ODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMCArMzUsMjUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1TYWZlcG9pbnQ6OlNhZmVwb2ludChQbGFuJiBwbGFuKQorU2FmZXBvaW50OjpSZXN1bHQ6
On5SZXN1bHQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fd2FzQ2hlY2tlZCk7Cit9CisKK2Jv
b2wgU2FmZXBvaW50OjpSZXN1bHQ6OmRpZEdldENhbmNlbGxlZCgpCit7CisgICAgbV93YXNDaGVj
a2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gbV9kaWRHZXRDYW5jZWxsZWQ7Cit9CisKK1NhZmVwb2lu
dDo6U2FmZXBvaW50KFBsYW4mIHBsYW4sIFJlc3VsdCYgcmVzdWx0KQogICAgIDogbV9wbGFuKHBs
YW4pCiAgICAgLCBtX2RpZENhbGxCZWdpbihmYWxzZSkKKyAgICAsIG1fcmVzdWx0KHJlc3VsdCkK
IHsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQubV93YXNDaGVja2VkKTsKKyAgICByZXN1bHQu
bV93YXNDaGVja2VkID0gZmFsc2U7CisgICAgcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkID0gZmFs
c2U7CiB9CiAKIFNhZmVwb2ludDo6flNhZmVwb2ludCgpCkBAIC02OCwxMyArODMsMzkgQEAgdm9p
ZCBTYWZlcG9pbnQ6OmJlZ2luKCkKICAgICBtX2RpZENhbGxCZWdpbiA9IHRydWU7CiB9CiAKLXZv
aWQgU2FmZXBvaW50Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBT
YWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJlZ2luKTsKKworICAgIGlmICht
X3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuOyAvLyBXZSB3ZXJlIGNh
bmNlbGxlZCBkdXJpbmcgYSBwcmV2aW91cyBHQyEKKyAgICAKKyAgICBpZiAoIWlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3NjYW5uYWJsZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX3NjYW5uYWJsZXNbaV0t
PnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK2Jvb2wgU2FmZXBvaW50Ojppc0tub3duVG9C
ZUxpdmVEdXJpbmdHQygpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwor
ICAgIAorICAgIGlmIChtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJu
IHRydWU7IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDLCBzbyBsZXQn
cyBub3QgbWVzcyB3aXRoIGl0IHRoaXMgdGltZSBhcm91bmQgLSBwcmV0ZW5kIGl0J3MgbGl2ZSBh
bmQgbW92ZSBvbi4KKyAgICAKKyAgICByZXR1cm4gbV9wbGFuLmlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCk7Cit9CisKK3ZvaWQgU2FmZXBvaW50OjpjYW5jZWwoKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZGlkQ2FsbEJlZ2luKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXN1bHQubV9kaWRH
ZXRDYW5jZWxsZWQpOyAvLyBXZSBjYW5ub3QgZ2V0IGNhbmNlbGxlZCB0d2ljZSBiZWNhdXNlIHN1
YnNlcXVlbnQgR0NzIHdpbGwgdGhpbmsgdGhhdCB3ZSdyZSBhbGl2ZSBhbmQgdGhleSB3aWxsIG5v
dCBkbyBhbnl0aGluZyB0byB1cy4KKyAgICAKKyAgICBtX3BsYW4uY2FuY2VsKCk7CisgICAgbV9y
ZXN1bHQubV9kaWRHZXRDYW5jZWxsZWQgPSB0cnVlOworfQorCiBWTSYgU2FmZXBvaW50Ojp2bSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGxhbi52bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQy
LDM1IEBAIHN0cnVjdCBQbGFuOwogCiBjbGFzcyBTYWZlcG9pbnQgewogcHVibGljOgotICAgIFNh
ZmVwb2ludChQbGFuJik7CisgICAgY2xhc3MgUmVzdWx0IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFJlc3VsdCgpCisgICAgICAgICAgICA6IG1fZGlkR2V0Q2FuY2VsbGVkKGZhbHNlKQorICAgICAg
ICAgICAgLCBtX3dhc0NoZWNrZWQodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB+UmVzdWx0KCk7CisgICAgICAgIAorICAgICAgICBib29sIGRpZEdldENhbmNl
bGxlZCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU2Fm
ZXBvaW50OworICAgICAgICAKKyAgICAgICAgYm9vbCBtX2RpZEdldENhbmNlbGxlZDsKKyAgICAg
ICAgYm9vbCBtX3dhc0NoZWNrZWQ7CisgICAgfTsKKyAgICAKKyAgICBTYWZlcG9pbnQoUGxhbiYs
IFJlc3VsdCYpOwogICAgIH5TYWZlcG9pbnQoKTsKICAgICAKICAgICB2b2lkIGFkZChTY2FubmFi
bGUqKTsKICAgICAKICAgICB2b2lkIGJlZ2luKCk7CiAgICAgCi0gICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAg
ICB2b2lkIGNhbmNlbCgpOwogICAgIAogICAgIFZNJiB2bSgpIGNvbnN0OwogCkBAIC01Nyw2ICs3
OCw3IEBAIHByaXZhdGU6CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIFZlY3RvcjxTY2FubmFibGUq
PiBtX3NjYW5uYWJsZXM7CiAgICAgYm9vbCBtX2RpZENhbGxCZWdpbjsKKyAgICBSZXN1bHQmIG1f
cmVzdWx0OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDcgQEAgV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21waWxhdGlvblN0
YQogICAgIFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmZpbmQoa2V5KTsKICAgICBp
ZiAoaXRlciA9PSBtX3BsYW5zLmVuZCgpKQogICAgICAgICByZXR1cm4gTm90S25vd247Ci0gICAg
cmV0dXJuIGl0ZXItPnZhbHVlLT5pc0NvbXBpbGVkID8gQ29tcGlsZWQgOiBDb21waWxpbmc7Cisg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlLT5zdGFnZSA9PSBQbGFuOjpSZWFkeSA/IENvbXBpbGVkIDog
Q29tcGlsaW5nOwogfQogCiB2b2lkIFdvcmtsaXN0Ojp3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJl
UmVhZHkoVk0mIHZtKQpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRp
bEFsbFBsYW5zRm9yVk1BcmUKICAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0g
bV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAo
Jml0ZXItPnZhbHVlLT52bSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAo
aXRlci0+dmFsdWUtPnN0YWdlICE9IFBsYW46OlJlYWR5KSB7CiAgICAgICAgICAgICAgICAgYWxs
QXJlQ29tcGlsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5z
Rm9yVk0oCiAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9yZWFkeVBsYW5zW2ldOwogICAg
ICAgICBpZiAoJnBsYW4tPnZtICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIXBsYW4tPmlzQ29tcGlsZWQpCisgICAgICAgIGlmIChwbGFuLT5zdGFnZSAhPSBQbGFu
OjpSZWFkeSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBteVJlYWR5UGxhbnMuYXBw
ZW5kKHBsYW4pOwogICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy5sYXN0
KCk7CkBAIC0xODIsNyArMTgyLDcgQEAgV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0
ZUFsbFJlYQogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkK
ICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IENvbXBsZXRpbmcgIiwgY3VycmVudEtleSwg
IlxuIik7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5pc0NvbXBpbGVk
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPT0gUGxhbjo6UmVhZHkpOwog
ICAgICAgICAKICAgICAgICAgcGxhbi0+ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwogICAg
ICAgICAKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZXN1bWVBbGxUaHJlYWRz
KCkKICAgICBtX3N1c3BlbnNpb25Mb2NrLnVubG9jaygpOwogfQogCi12b2lkIFdvcmtsaXN0Ojp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9j
a3MpCit2b2lkIFdvcmtsaXN0Ojp2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7CiAgICAgVk0qIHZtID0gdmlzaXRvci5o
ZWFwKCktPnZtKCk7CiAgICAgewpAQCAtMjI5LDExICsyMjksMTAgQEAgdm9pZCBXb3JrbGlzdDo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvcgogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXIt
PnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKCZwbGFuLT52bSAhPSB2bSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLT52aXNpdENoaWxkcmVu
KHZpc2l0b3IsIGNvZGVCbG9ja3MpOworICAgICAgICAgICAgaXRlci0+dmFsdWUtPmNoZWNrTGl2
ZW5lc3NBbmRWaXNpdENoaWxkcmVuKHZpc2l0b3IsIGNvZGVCbG9ja3MpOwogICAgICAgICB9CiAg
ICAgfQotICAgIAotICAgIC8vIFRoaXMgbG9vcCBkb2Vzbid0IG5lZWQgZnVydGhlciBsb2NraW5n
IGJlY2F1c2U6CisgICAgLy8gVGhpcyBsb29wIGRvZXNuJ3QgbmVlZCBsb2NraW5nIGJlY2F1c2U6
CiAgICAgLy8gKDEpIG5vIG5ldyB0aHJlYWRzIGNhbiBiZSBhZGRlZCB0byBtX3RocmVhZHMuIEhl
bmNlLCBpdCBpcyBpbW11dGFibGUgYW5kIG5lZWRzIG5vIGxvY2tzLgogICAgIC8vICgyKSBUaHJl
YWREYXRhOjptX3NhZmVwb2ludCBpcyBwcm90ZWN0ZWQgYnkgdGhhdCB0aHJlYWQncyBtX3JpZ2h0
VG9SdW4gd2hpY2ggd2UgbXVzdCBiZQogICAgIC8vICAgICBob2xkaW5nIGhlcmUgYmVjYXVzZSBv
ZiBhIHByaW9yIGNhbGwgdG8gc3VzcGVuZEFsbFRocmVhZHMoKS4KQEAgLTI0MSw3ICsyNDAsNTEg
QEAgdm9pZCBXb3JrbGlzdDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvcgogICAgICAgICBUaHJl
YWREYXRhKiBkYXRhID0gbV90aHJlYWRzW2ldLmdldCgpOwogICAgICAgICBTYWZlcG9pbnQqIHNh
ZmVwb2ludCA9IGRhdGEtPm1fc2FmZXBvaW50OwogICAgICAgICBpZiAoc2FmZXBvaW50ICYmICZz
YWZlcG9pbnQtPnZtKCkgPT0gdm0pCi0gICAgICAgICAgICBzYWZlcG9pbnQtPnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CisgICAgICAgICAgICBzYWZlcG9pbnQtPmNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKHZpc2l0b3IpOworICAgIH0KK30KKwordm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVh
ZFBsYW5zKFZNJiB2bSkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICBIYXNoU2V0PENvbXBpbGF0aW9uS2V5PiBkZWFkUGxhbktleXM7CisgICAg
ICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAh
PSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVy
LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmICgmcGxhbi0+dm0gIT0gJnZtKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChwbGFuLT5zdGFnZSAhPSBQbGFuOjpDYW5jZWxsZWQpOyAvLyBTaG91bGQgbm90
IGJlIGNhbmNlbGxlZCwgeWV0LgorICAgICAgICAgICAgQVNTRVJUKCFkZWFkUGxhbktleXMuY29u
dGFpbnMocGxhbi0+a2V5KCkpKTsKKyAgICAgICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+
a2V5KCkpOworICAgICAgICB9CisgICAgICAgIGlmICghZGVhZFBsYW5LZXlzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgZm9yIChIYXNoU2V0PENvbXBpbGF0aW9uS2V5Pjo6aXRlcmF0b3IgaXRl
ciA9IGRlYWRQbGFuS2V5cy5iZWdpbigpOyBpdGVyICE9IGRlYWRQbGFuS2V5cy5lbmQoKTsgKytp
dGVyKQorICAgICAgICAgICAgICAgIG1fcGxhbnMudGFrZSgqaXRlciktPmNhbmNlbCgpOworICAg
ICAgICAgICAgRGVxdWU8UmVmUHRyPFBsYW4+PiBuZXdRdWV1ZTsKKyAgICAgICAgICAgIHdoaWxl
ICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxh
biA9IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHBsYW4tPnN0YWdl
ICE9IFBsYW46OkNhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9xdWV1ZS5zd2FwKG5ld1F1ZXVlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9yZWFkeVBsYW5zW2ldLT5zdGFnZSAhPSBQbGFuOjpDYW5jZWxsZWQpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fcmVhZHlQbGFuc1tpXSA9IG1f
cmVhZHlQbGFucy5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV9yZWFkeVBsYW5zLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBObyBs
b2NraW5nIG5lZWRlZCBmb3IgdGhpcyBwYXJ0LCBzZWUgY29tbWVudCBpbiB2aXNpdFdlYWtSZWZl
cmVuY2VzKCkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV90aHJlYWRzLnNpemUoKTsgaS0tOykg
eworICAgICAgICBUaHJlYWREYXRhKiBkYXRhID0gbV90aHJlYWRzW2ldLmdldCgpOworICAgICAg
ICBTYWZlcG9pbnQqIHNhZmVwb2ludCA9IGRhdGEtPm1fc2FmZXBvaW50OworICAgICAgICBpZiAo
c2FmZXBvaW50ICYmICZzYWZlcG9pbnQtPnZtKCkgPT0gJnZtICYmICFzYWZlcG9pbnQtPmlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgICAgICBzYWZlcG9pbnQtPmNhbmNlbCgpOwog
ICAgIH0KIH0KIApAQCAtMjk0LDE1ICszMzcsMzQgQEAgdm9pZCBXb3JrbGlzdDo6cnVuVGhyZWFk
KFRocmVhZERhdGEqIGRhdAogICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKGRhdGEtPm1fcmlnaHRUb1J1bik7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICAgICAgaWYg
KHBsYW4tPnN0YWdlID09IFBsYW46OkNhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgcGxhbi0+bm90aWZ5Q29tcGlsaW5nKCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxh
dGlvblF1ZXVlKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygqdGhpcywgIjogQ29tcGlsaW5n
ICIsIHBsYW4tPmtleSgpLCAiIGFzeW5jaHJvbm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAg
ICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQobG9uZ0xpdmVkU3RhdGUsIGRhdGEpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKHBsYW4tPnN0YWdlID09IFBsYW46OkNhbmNl
bGxlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcGxh
bi0+bm90aWZ5Q29tcGlsZWQoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBiZWVuIGNhbmNlbGxlZCBi
ZXR3ZWVuIHJlbGVhc2luZyByaWdodFRvUnVuIGFuZCBhY3F1aXJpbmcgbV9sb2NrLgorICAgICAg
ICAgICAgLy8gVGhpcyB3b3VsZCBtZWFuIHRoYXQgd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBv
ZiBHQyByaWdodCBub3cuCisgICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UgPT0gUGxhbjo6Q2Fu
Y2VsbGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICBwbGFuLT5ub3RpZnlSZWFkeSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3
MSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsK
ICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQm
KTsgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxs
IHRocmVhZHMuCisgICAgLy8gT25seSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1
c3BlbmRpbmcgYWxsIHRocmVhZHMuCisgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7CisgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsK
ICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTY3ODM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDkwLDEyICs0OTAsMTIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgIH0KIH0KIAotdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgY29t
cGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiB7
CiAgICAgY2hhciogZXJyb3IgPSAwOwogICAgIAogICAgIHsKLSAgICAgICAgR3JhcGhTYWZlcG9p
bnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoKTsKKyAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBv
aW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwogICAgICAgICAKICAgICAgICAgTExW
TU1DSklUQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CiAgICAgICAgIGxsdm0tPkluaXRpYWxpemVN
Q0pJVENvbXBpbGVyT3B0aW9ucygmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpKTsKQEAgLTU2Niw3
ICs1NjYsOSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogICAgICAgICBsbHZtLT5EaXNw
b3NlUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzKTsKICAgICAgICAgbGx2bS0+RGlzcG9zZUV4ZWN1
dGlvbkVuZ2luZShlbmdpbmUpOwogICAgIH0KLQorICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlk
R2V0Q2FuY2VsbGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBpZiAoc2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRl
LmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgRXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmgJKHJldmlzaW9uIDE2
NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVk
ZSAiREZHU2FmZXBvaW50LmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCi12b2lkIGNvbXBpbGUoU3RhdGUmKTsKK3ZvaWQgY29tcGls
ZShTdGF0ZSYsIERGRzo6U2FmZXBvaW50OjpSZXN1bHQmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1Nl
dC5jcHAJKHJldmlzaW9uIDE2NzgzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
ZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsOCBAQCB2b2lkIENv
ZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0CiB2b2lkIENvZGVCbG9ja1NldDo6cmVt
ZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKEhlYXAqIGhlYXApCiB7CiAjaWYgRU5B
QkxFKEdHQykKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiUmVtZW1iZXJpbmcg
IiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7CiAgICAg
Zm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKSB7CiAgICAg
ICAgIGhlYXAtPmFkZFRvUmVtZW1iZXJlZFNldChjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
KTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTY3ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1
MTYsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAgICAgICAg
IHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7CiAgICAgICAgIHZpc2l0U21hbGxTdHJpbmdz
KCk7CiAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwot
ICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RzKCk7CiAgICAgICAgIHZpc2l0UHJvdGVjdGVk
T2JqZWN0cyhoZWFwUm9vdFZpc2l0b3IpOwogICAgICAgICB2aXNpdFRlbXBTb3J0VmVjdG9ycyho
ZWFwUm9vdFZpc2l0b3IpOwogICAgICAgICB2aXNpdEFyZ3VtZW50QnVmZmVycyhoZWFwUm9vdFZp
c2l0b3IpOwpAQCAtNjIyLDE3ICs2MjEsMjMgQEAgdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcgogICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAot
dm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RzKCkKK3ZvaWQgSGVhcDo6dmlzaXRDb21w
aWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQotICAg
IEdDUEhBU0UoVmlzaXRERkdXb3JrbGlzdHMpOwogICAgIGZvciAoYXV0byB3b3JrbGlzdCA6IG1f
c3VzcGVuZGVkQ29tcGlsZXJXb3JrbGlzdHMpCi0gICAgICAgIHdvcmtsaXN0LT52aXNpdENoaWxk
cmVuKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CisgICAgICAgIHdvcmtsaXN0LT52aXNp
dFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IsIG1fY29kZUJsb2Nrcyk7CiAKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2co
IkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyNlbmRpZgorfQogCi0gICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwordm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGls
ZXJXb3JrbGlzdEVudHJpZXMoKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIEdDUEhBU0Uo
RmluYWxpemVyREZHV29ya2xpc3RzKTsKKyAgICBmb3IgKGF1dG8gd29ya2xpc3QgOiBtX3N1c3Bl
bmRlZENvbXBpbGVyV29ya2xpc3RzKQorICAgICAgICB3b3JrbGlzdC0+cmVtb3ZlRGVhZFBsYW5z
KCptX3ZtKTsKICNlbmRpZgogfQogCkBAIC03NDMsNiArNzQ4LDggQEAgdm9pZCBIZWFwOjp2aXNp
dFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaQogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG1f
b2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKICAgICAgICAgaGFydmVzdFdlYWtS
ZWZlcmVuY2VzKCk7CisgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2Vz
KCk7CisgICAgICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZChtX3Nsb3RWaXNpdG9yKTsgLy8g
TmV3ICJleGVjdXRpbmciIGNvZGUgYmxvY2tzIG1heSBiZSBkaXNjb3ZlcmVkLgogICAgICAgICBp
ZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtOTk4
LDYgKzEwMDUsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0CiAg
ICAgY29weUJhY2tpbmdTdG9yZXMoKTsKIAogICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoKTsKKyAgICByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICBk
ZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwogICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2Fj
aGVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNjc4MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKICAgICB2b2lkIHZpc2l0
U21hbGxTdHJpbmdzKCk7CiAgICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7Ci0gICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RzKCk7CisgICAgdm9p
ZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOworICAgIHZvaWQgcmVtb3Zl
RGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgdm9pZCB2aXNpdFByb3RlY3RlZE9i
amVjdHMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB2aXNpdFRlbXBTb3J0VmVjdG9ycyhI
ZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290
VmlzaXRvciYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230276</attachid>
            <date>2014-04-27 20:26:26 -0700</date>
            <delta_ts>2014-04-28 09:56:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34992</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3ODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDE0LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R0Mgc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaW5ncyBmcm9tIHRoZSBERkcgd29ya2xpc3Qg
YW5kIGNhbmNlbCBvbi1nb2luZyBjb21waWxhdGlvbnMgaWYgaXQga25vd3MgdGhhdCB0aGUgY29t
cGlsYXRpb24gd291bGQgYWxyZWFkeSBiZSBpbnZhbGlkYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMTY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgR0MgY2FuIGFpZCB0eXBl
IGluZmVyZW5jZSBieSByZW1vdmluZyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGRlYWQgYW5kIGpldHRp
c29uaW5nCisgICAgICAgIGNvZGUgdGhhdCByZWxpZXMgb24gdGhvc2Ugc3RydWN0dXJlcy4gVGhp
cyBjYW4gZHJhbWF0aWNhbGx5IGFjY2VsZXJhdGUgdHlwZSBpbmZlcmVuY2UKKyAgICAgICAgZm9y
IHNvbWUgdHJpY2t5IHByb2dyYW1zLgorICAgICAgICAKKyAgICAgICAgVW5mb3J0dW5hdGVseSwg
d2UgcHJldmlvdXNseSBwaW5uZWQgYW55IHN0cnVjdHVyZXMgdGhhdCBlbnF1ZXVlZCBjb21waWxh
dGlvbnMgZGVwZW5kZWQKKyAgICAgICAgb24uIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UncmUgb24g
YSBtYWNoaW5lIHRoYXQgb25seSBydW5zIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHRocmVhZAorICAg
ICAgICBhbmQgd2hlcmUgY29tcGlsYXRpb25zIGFyZSByZWxhdGl2ZWx5IHNsb3csIHlvdSBoYXZl
IGEgaGlnaCBjaGFuY2Ugb2YgbGFyZ2UgbnVtYmVycyBvZgorICAgICAgICBzdHJ1Y3R1cmVzIGJl
aW5nIHBpbm5lZCBkdXJpbmcgYW55IEdDIHNpbmNlIHRoZSBjb21waWxhdGlvbiBxdWV1ZSBpcyBs
aWtlbHkgdG8gYmUgZnVsbAorICAgICAgICBvZiByYW5kb20gc3R1ZmYuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGNvbXByZWhlbnNpdmVseSBmaXhlcyB0aGlzIGlzc3VlIGJ5IGFsbG93aW5nIHRo
ZSBHQyB0byByZW1vdmUgY29tcGlsYXRpb24gcGxhbnMKKyAgICAgICAgaWYgdGhlIHRoaW5ncyB0
aGV5IGRlcGVuZCBvbiBhcmUgZGVhZCwgYW5kIHRvIGV2ZW4gY2FuY2VsIHNhZmVwb2ludGVkIGNv
bXBpbGF0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNz
RHVyaW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNLbm93blRvQmVMaXZlRHVy
aW5nR0MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nhbik6IERlbGV0ZWQu
CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6RGVzaXJlZElkZW50aWZpZXJzOjpEZXNpcmVkSWRlbnRpZmllcnMpOgorICAgICAgICAq
IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXMpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaDoKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoU2FmZXBvaW50OjpHcmFwaFNhZmVwb2ludCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoU2Fm
ZXBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCk6
CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5Q29tcGlsaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjpub3RpZnlDb21waWxlZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5UmVh
ZHkpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6
CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2FuY2VsKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlcG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNhZmVw
b2ludDo6UmVzdWx0Ojp+UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OlJl
c3VsdDo6ZGlkR2V0Q2FuY2VsbGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OlNh
ZmVwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50Ojp+U2FmZXBvaW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmNhbmNlbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U2FmZXBvaW50Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHU2FmZXBvaW50Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50OjpSZXN1bHQ6OlJl
c3VsdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xp
c3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6
V29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6
V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZH
OjpXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6V29y
a2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJ1
blRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnZpc2l0Q2hpbGRyZW4pOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5oOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMQ29tcGlsZS5oOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3Mp
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290
cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVu
Y2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRy
aWVzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRXZWFrSGFuZGxlcyk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVyV29y
a2xpc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKwogMjAxNC0wNC0yNSAg
QW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSW5saW5lIChDKysp
IEdldEJ5VmFsIHdpdGggbnVtZXJpYyBpbmRpY2VzIG1vcmUgYWdncmVzc2l2ZWx5LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDE2Nzg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcyLDYgKzE5NzIsNDkgQEAgdm9pZCBDb2RlQmxvY2s6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCiti
b29sIENvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNlbGlu
ZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAgIC8v
IHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2Rl
QmxvY2sgZ2V0cworICAgIC8vIHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIG1lYW5z
IHRoYXQgaXQncyBsaXZlLgorICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5
cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdl
IGRvbid0IGF0dGVtcHQgdG8gamV0dGlzb24gY29kZSBibG9ja3MgZHVyaW5nIEdDIGlmCisgICAg
Ly8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFkIHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2Vh
ayByZWZlcmVuY2VzIHRvCisgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51ZSB0byBleGVjdXRl
IHNvdW5kbHkuCisgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIHJldHVybiB0
cnVlOworI2VuZGlmCit9CisKK2Jvb2wgQ29kZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJpbmdH
QygpCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gVGhpcyBzaG91bGQgcmV0dXJuIHRy
dWUgZm9yOgorICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCBiZWhhdmUgbGlrZSBub3JtYWwgb2Jq
ZWN0cyAtIGkuZS4gaWYgdGhleSBhcmUgcmVmZXJlbmNlZCB0aGVuIHRoZXkKKyAgICAvLyAgIGFy
ZSBsaXZlLgorICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCB3ZXJlIHJ1bm5pbmcgb24gdGhlIHN0
YWNrLgorICAgIC8vIC0gQ29kZSBibG9ja3MgdGhhdCBzdXJ2aXZlZCB0aGUgbGFzdCBHQyBpZiB0
aGUgY3VycmVudCBHQyBpcyBhbiBFZGVuIEdDLiBUaGlzIGlzCisgICAgLy8gICBiZWNhdXNlIGVp
dGhlciBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQgd291bGQgaGF2ZSBzdXJ2aXZlZCBhcyB0cnVlIG9y
IG1fbWF5QmVFeGVjdXRpbmcKKyAgICAvLyAgIHdvdWxkIHN1cnZpdmUgYXMgdHJ1ZS4KKyAgICAv
LyAtIENvZGUgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVhZCB3ZWFrIHJlZmVyZW5jZXMu
CisgICAgCisgICAgcmV0dXJuIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdT
Y2FuKCkKKyAgICAgICAgfHwgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNCZWVu
UHJvdmVkOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCiB2b2lkIENvZGVC
bG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHZpc2l0b3IpOwpAQCAtMjIxNSw3ICsyMjU4LDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgbm90IGxpdmUuIElmIHdlIGFyZSwgdGhlbiBqZXR0aXNvbi4KLSAg
ICBpZiAoIShzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHx8IG1f
aml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKKyAgICBpZiAo
IWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICIgaGFzIGRlYWQgd2VhayByZWZl
cmVuY2VzLCBqZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTY3ODUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NDcsNiArOTQ3LDggQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFp
bCgpOwogICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFp
bCgpOwogCisgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOyAvLyBXaWxsIG9ubHkg
cmV0dXJuIHZhbGlkIHJlc3VsdHMgd2hlbiBjYWxsZWQgZHVyaW5nIEdDLiBBc3N1bWVzIHRoYXQg
eW91J3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB0aGUgb3duZXIgZXhlY3V0YWJsZSBpcyBs
aXZlLgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKSBvdmVycmlkZTsKQEAgLTEwMDEsMjkgKzEwMDMsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZHVtcEFycmF5UHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24q
JiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgdm9pZCBkdW1wUmFyZUNhc2VQcm9m
aWxlKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiwgYm9v
bCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgICAgIAotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKQotICAg
IHsKLSAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRv
bid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCi0gICAgICAgIC8vIHRoZWlyIHdlYWsgcmVm
ZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cwotICAg
ICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3Mg
bGl2ZS4KLSAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB3
ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBpZgotICAg
ICAgICAvLyB0aGV5IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0aGVp
ciB3ZWFrIHJlZmVyZW5jZXMgdG8KLSAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51ZSB0
byBleGVjdXRlIHNvdW5kbHkuCi0gICAgICAgIGlmIChtX21heUJlRXhlY3V0aW5nKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlREZHQ29kZUJs
b2NrTGl2ZW5lc3MoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0jZWxzZQotICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVM
aXZlbmVzc0R1cmluZ1NjYW4oKSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKKyAgICBib29sIHNo
b3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCk7CiAgICAgCiAgICAgdm9p
ZCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOwogICAgIHZvaWQgZGV0ZXJtaW5l
TGl2ZW5lc3MoU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAJKHJldmlzaW9uIDE2Nzg1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsNiArMzMsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCitEZXNpcmVkSWRlbnRpZmllcnM6OkRlc2lyZWRJZGVudGlmaWVycygpCisgICAgOiBt
X2NvZGVCbG9jayhudWxscHRyKQoreworfQorCiBEZXNpcmVkSWRlbnRpZmllcnM6OkRlc2lyZWRJ
ZGVudGlmaWVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICA6IG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElkZW50
aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTY3ODUxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAs
NyBAQCBjbGFzcyBDb21tb25EYXRhOwogCiBjbGFzcyBEZXNpcmVkSWRlbnRpZmllcnMgewogcHVi
bGljOgorICAgIERlc2lyZWRJZGVudGlmaWVycygpOwogICAgIERlc2lyZWRJZGVudGlmaWVycyhD
b2RlQmxvY2sqKTsKICAgICB+RGVzaXJlZElkZW50aWZpZXJzKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJl
dmlzaW9uIDE2Nzg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDYgQEAgc3RydWN0IEFycmF5
QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBv
aW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IEdlbmVyaWNTZXRBZGFwdG9yPFdhdGNocG9p
bnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMpOwogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICB0eXBlZGVmIEhhc2hNYXA8V2F0Y2hwb2ludFNldFR5cGUqLCBib29sPiBT
dGF0ZU1hcDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTY3ODUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKK0Rlc2lyZWRXZWFrUmVmZXJlbmNlczo6RGVzaXJlZFdlYWtSZWZlcmVuY2Vz
KCkKKyAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCit7Cit9CisKIERlc2lyZWRXZWFrUmVmZXJl
bmNlczo6RGVzaXJlZFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIDog
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxNjc4NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIENvbW1vbkRhdGE7CiAKIGNs
YXNzIERlc2lyZWRXZWFrUmVmZXJlbmNlcyB7CiBwdWJsaWM6CisgICAgRGVzaXJlZFdlYWtSZWZl
cmVuY2VzKCk7CiAgICAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzKENvZGVCbG9jayopOwogICAgIH5E
ZXNpcmVkV2Vha1JlZmVyZW5jZXMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAJKHJldmlzaW9uIDE2Nzg1MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw4ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
R3JhcGhTYWZlcG9pbnQ6OkdyYXBoU2FmZXBvaW50KEdyYXBoJiBncmFwaCkKLSAgICA6IG1fc2Fm
ZXBvaW50KGdyYXBoLm1fcGxhbikKK0dyYXBoU2FmZXBvaW50OjpHcmFwaFNhZmVwb2ludChHcmFw
aCYgZ3JhcGgsIFNhZmVwb2ludDo6UmVzdWx0JiByZXN1bHQpCisgICAgOiBtX3NhZmVwb2ludChn
cmFwaC5tX3BsYW4sIHJlc3VsdCkKIHsKICAgICBtX3NhZmVwb2ludC5hZGQoJmdyYXBoKTsKICAg
ICBtX3NhZmVwb2ludC5iZWdpbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaFNhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGhTYWZlcG9pbnQuaAkocmV2aXNpb24gMTY3ODUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaFNhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBAIGNsYXNzIEdyYXBoOwogCiBjbGFzcyBHcmFwaFNhZmVwb2ludCB7CiBwdWJsaWM6
Ci0gICAgR3JhcGhTYWZlcG9pbnQoR3JhcGgmKTsKKyAgICBHcmFwaFNhZmVwb2ludChHcmFwaCYs
IFNhZmVwb2ludDo6UmVzdWx0Jik7CiAgICAgfkdyYXBoU2FmZXBvaW50KCk7CiAgICAgCiBwcml2
YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAx
Njc4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgUGxhbjo6UGxhbihQYXNzUmVmUHRyPENvZGVCbG9j
az4gcGFzc2VkQwogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrLmdldCgpKQogICAgICwgd2Vh
a1JlZmVyZW5jZXMoY29kZUJsb2NrLmdldCgpKQogICAgICwgd2lsbFRyeVRvVGllclVwKGZhbHNl
KQotICAgICwgaXNDb21waWxlZChmYWxzZSkKKyAgICAsIHN0YWdlKFByZXBhcmluZykKIHsKIH0K
IApAQCAtMTQzLDggKzE0MywxMSBAQCB2b2lkIFBsYW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2
ZWRTdGF0CiAgICAgdGhpcy0+dGhyZWFkRGF0YSA9IHRocmVhZERhdGE7CiAgICAgCiAgICAgZG91
YmxlIGJlZm9yZSA9IDA7Ci0gICAgaWYgKHJlcG9ydENvbXBpbGVUaW1lcygpKQorICAgIENTdHJp
bmcgY29kZUJsb2NrTmFtZTsKKyAgICBpZiAocmVwb3J0Q29tcGlsZVRpbWVzKCkpIHsKICAgICAg
ICAgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOworICAgICAgICBjb2RlQmxvY2tOYW1lID0gdG9D
U3RyaW5nKCpjb2RlQmxvY2spOworICAgIH0KICAgICAKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChQbGFuKSIpOwogICAgIENvbXBpbGF0aW9uU2Nv
cGUgY29tcGlsYXRpb25TY29wZTsKQEAgLTE1NCw3ICsxNTcsOCBAQCB2b2lkIFBsYW46OmNvbXBp
bGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAKICAgICBDb21waWxhdGlvblBhdGggcGF0aCA9IGNv
bXBpbGVJblRocmVhZEltcGwobG9uZ0xpdmVkU3RhdGUpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQo
ZmluYWxpemVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChwYXRoID09IENhbmNlbFBhdGggfHwgZmlu
YWxpemVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgocGF0aCA9PSBDYW5jZWxQYXRoKSA9PSAoc3Rh
Z2UgPT0gQ2FuY2VsbGVkKSk7CiAgICAgCiAgICAgaWYgKHJlcG9ydENvbXBpbGVUaW1lcygpKSB7
CiAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGhOYW1lOwpAQCAtMTY4LDEzICsxNzIsMTYgQEAgdm9p
ZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICBjYXNlIEZUTFBh
dGg6CiAgICAgICAgICAgICBwYXRoTmFtZSA9ICJGVEwiOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2FuY2VsUGF0aDoKKyAgICAgICAgICAgIHBhdGhOYW1lID0gIkNhbmNlbGxl
ZCI7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBwYXRoTmFtZSA9ICIiOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZG91YmxlIG5vdyA9IGN1cnJl
bnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxvZygiT3B0aW1pemVkICIsICpjb2RlQmxvY2ssICIg
dXNpbmcgIiwgbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1lLCAiIGludG8gIiwgZmluYWxpemVyLT5j
b2RlU2l6ZSgpLCAiIGJ5dGVzIGluICIsIG5vdyAtIGJlZm9yZSwgIiBtcyIpOworICAgICAgICBk
YXRhTG9nKCJPcHRpbWl6ZWQgIiwgY29kZUJsb2NrTmFtZSwgIiB1c2luZyAiLCBtb2RlLCAiIHdp
dGggIiwgcGF0aE5hbWUsICIgaW50byAiLCBmaW5hbGl6ZXIgPyBmaW5hbGl6ZXItPmNvZGVTaXpl
KCkgOiAwLCAiIGJ5dGVzIGluICIsIG5vdyAtIGJlZm9yZSwgIiBtcyIpOwogICAgICAgICBpZiAo
cGF0aCA9PSBGVExQYXRoKQogICAgICAgICAgICAgZGF0YUxvZygiIChERkc6ICIsIGJlZm9yZUZU
TCAtIGJlZm9yZSwgIiwgTExWTTogIiwgbm93IC0gYmVmb3JlRlRMLCAiKSIpOwogICAgICAgICBk
YXRhTG9nKCIuXG4iKTsKQEAgLTMyMiwxMCArMzI5LDEzIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0
aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdy
YXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
aGF2ZUxMVk07CisgICAgICAgIFNhZmVwb2ludDo6UmVzdWx0IHNhZmVwb2ludFJlc3VsdDsKICAg
ICAgICAgewotICAgICAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBvaW50KGRmZyk7CisgICAg
ICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoZGZnLCBzYWZlcG9pbnRSZXN1bHQpOwog
ICAgICAgICAgICAgaGF2ZUxMVk0gPSBpbml0aWFsaXplTExWTSgpOwogICAgICAgICB9CisgICAg
ICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2VsbGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gQ2FuY2VsUGF0aDsKICAgICAgICAgCiAgICAgICAgIGlmICghaGF2ZUxMVk0pIHsKICAg
ICAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMp
KTsKQEAgLTM0Myw4ICszNTMsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIEZUTDo6Y29tcGlsZShzdGF0ZSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgRlRM
Ojpjb21waWxlKHN0YXRlLCBzYWZlcG9pbnRSZXN1bHQpOworICAgICAgICBpZiAoc2FmZXBvaW50
UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIENhbmNlbFBhdGg7
CisgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlTGlu
aygpKSB7CiAgICAgICAgICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJu
IEZUTFBhdGg7CkBAIC0zODQsMTAgKzM5NiwyMCBAQCB2b2lkIFBsYW46OnJlYWxseUFkZChDb21t
b25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmlnZ2VyKHZtKTsKIH0KIAordm9p
ZCBQbGFuOjpub3RpZnlDb21waWxpbmcoKQoreworICAgIHN0YWdlID0gQ29tcGlsaW5nOworfQor
Cit2b2lkIFBsYW46Om5vdGlmeUNvbXBpbGVkKCkKK3sKKyAgICBzdGFnZSA9IENvbXBpbGVkOwor
fQorCiB2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKICAgICBjYWxsYmFjay0+Y29tcGlsYXRp
b25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9jay5nZXQoKSk7Ci0gICAgaXND
b21waWxlZCA9IHRydWU7CisgICAgc3RhZ2UgPSBSZWFkeTsKIH0KIAogQ29tcGlsYXRpb25SZXN1
bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQpAQCAtNDE5LDggKzQ0
MSwxMSBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlv
bktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12b2lkIFBsYW46OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2Nr
cykKK3ZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKKyAgICBpZiAoIWlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZtdXN0SGFuZGxlVmFsdWVzW2ldKTsKICAgICAKQEAgLTQz
NCw2ICs0NTksMzcgQEAgdm9pZCBQbGFuOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aQog
ICAgIHRyYW5zaXRpb25zLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiB9CiAKK2Jvb2wgUGxhbjo6
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKQoreworICAgIGlmIChzdGFnZSA9PSBDYW5jZWxsZWQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoISFwcm9maWxlZERGR0NvZGVCbG9jayAmJiAhcHJv
ZmlsZWRERkdDb2RlQmxvY2stPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbGFuOjpjYW5jZWwoKQor
eworICAgIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgcHJvZmlsZWRERkdDb2RlQmxvY2sgPSBu
dWxscHRyOworICAgIG11c3RIYW5kbGVWYWx1ZXMuY2xlYXIoKTsKKyAgICBjb21waWxhdGlvbiA9
IG51bGxwdHI7CisgICAgZmluYWxpemVyLmNsZWFyKCk7CisgICAgaW5saW5lQ2FsbEZyYW1lcyA9
IG51bGxwdHI7CisgICAgd2F0Y2hwb2ludHMgPSBEZXNpcmVkV2F0Y2hwb2ludHMoKTsKKyAgICBp
ZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVycygpOworICAgIGNoYWlucyA9IERlc2lyZWRT
dHJ1Y3R1cmVDaGFpbnMoKTsKKyAgICB3ZWFrUmVmZXJlbmNlcyA9IERlc2lyZWRXZWFrUmVmZXJl
bmNlcygpOworICAgIHdyaXRlQmFycmllcnMgPSBEZXNpcmVkV3JpdGVCYXJyaWVycygpOworICAg
IHRyYW5zaXRpb25zID0gRGVzaXJlZFRyYW5zaXRpb25zKCk7CisgICAgY2FsbGJhY2sgPSBudWxs
cHRyOworICAgIHN0YWdlID0gQ2FuY2VsbGVkOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxNjc4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTcgKzYwLDIxIEBAIHN0cnVjdCBQ
bGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAgICAgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+UGxhbigpOwotICAgIAorCiAgICAg
dm9pZCBjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmLCBUaHJlYWREYXRhKik7CiAgICAg
CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2so
KTsKICAgICB2b2lkIGZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKTsKICAgICAKKyAgICB2b2lk
IG5vdGlmeUNvbXBpbGluZygpOworICAgIHZvaWQgbm90aWZ5Q29tcGlsZWQoKTsKICAgICB2b2lk
IG5vdGlmeVJlYWR5KCk7CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0g
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0Jik7CisgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYsIENvZGVCbG9j
a1NldCYpOworICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKKyAgICB2b2lkIGNh
bmNlbCgpOwogICAgIAogICAgIFZNJiB2bTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxv
Y2s7CkBAIC05NiwxNSArMTAwLDE2IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGUKICAgICBib29sIHdpbGxUcnlUb1RpZXJVcDsKIAogICAgIGRvdWJsZSBiZWZvcmVG
VEw7Ci0gICAgCi0gICAgYm9vbCBpc0NvbXBpbGVkOworCisgICAgZW51bSBTdGFnZSB7IFByZXBh
cmluZywgQ29tcGlsaW5nLCBDb21waWxlZCwgUmVhZHksIENhbmNlbGxlZCB9OworICAgIFN0YWdl
IHN0YWdlOwogCiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJh
Y2s7CiAKIHByaXZhdGU6CiAgICAgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKSBjb25zdDsKICAg
ICAKLSAgICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZhaWxQYXRoLCBERkdQYXRoLCBGVExQYXRo
IH07CisgICAgZW51bSBDb21waWxhdGlvblBhdGggeyBGYWlsUGF0aCwgREZHUGF0aCwgRlRMUGF0
aCwgQ2FuY2VsUGF0aCB9OwogICAgIENvbXBpbGF0aW9uUGF0aCBjb21waWxlSW5UaHJlYWRJbXBs
KExvbmdMaXZlZFN0YXRlJik7CiAgICAgCiAgICAgYm9vbCBpc1N0aWxsVmFsaWQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJKHJldmlzaW9uIDE2
Nzg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDI1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotU2FmZXBvaW50OjpTYWZlcG9pbnQoUGxhbiYgcGxhbikKK1NhZmVwb2ludDo6
UmVzdWx0Ojp+UmVzdWx0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3dhc0NoZWNrZWQpOwor
fQorCitib29sIFNhZmVwb2ludDo6UmVzdWx0OjpkaWRHZXRDYW5jZWxsZWQoKQoreworICAgIG1f
d2FzQ2hlY2tlZCA9IHRydWU7CisgICAgcmV0dXJuIG1fZGlkR2V0Q2FuY2VsbGVkOworfQorCitT
YWZlcG9pbnQ6OlNhZmVwb2ludChQbGFuJiBwbGFuLCBSZXN1bHQmIHJlc3VsdCkKICAgICA6IG1f
cGxhbihwbGFuKQogICAgICwgbV9kaWRDYWxsQmVnaW4oZmFsc2UpCisgICAgLCBtX3Jlc3VsdChy
ZXN1bHQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Lm1fd2FzQ2hlY2tlZCk7CisgICAg
cmVzdWx0Lm1fd2FzQ2hlY2tlZCA9IGZhbHNlOworICAgIHJlc3VsdC5tX2RpZEdldENhbmNlbGxl
ZCA9IGZhbHNlOwogfQogCiBTYWZlcG9pbnQ6On5TYWZlcG9pbnQoKQpAQCAtNDYsOCArNjEsOCBA
QCBTYWZlcG9pbnQ6On5TYWZlcG9pbnQoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGlkQ2FsbEJl
Z2luKTsKICAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxhbi50aHJlYWREYXRhKSB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEtPm1fc2FmZXBvaW50ID09IHRoaXMpOwotICAgICAg
ICBkYXRhLT5tX3NhZmVwb2ludCA9IG51bGxwdHI7CiAgICAgICAgIGRhdGEtPm1fcmlnaHRUb1J1
bi5sb2NrKCk7CisgICAgICAgIGRhdGEtPm1fc2FmZXBvaW50ID0gbnVsbHB0cjsKICAgICB9CiB9
CiAKQEAgLTY4LDEzICs4MywzOSBAQCB2b2lkIFNhZmVwb2ludDo6YmVnaW4oKQogICAgIG1fZGlk
Q2FsbEJlZ2luID0gdHJ1ZTsKIH0KIAotdm9pZCBTYWZlcG9pbnQ6OnZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIFNhZmVwb2ludDo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9k
aWRDYWxsQmVnaW4pOworCisgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0Q2FuY2VsbGVkKQorICAg
ICAgICByZXR1cm47IC8vIFdlIHdlcmUgY2FuY2VsbGVkIGR1cmluZyBhIHByZXZpb3VzIEdDIQor
ICAgIAorICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fc2Nhbm5hYmxlcy5zaXplKCk7IGktLTsp
CiAgICAgICAgIG1fc2Nhbm5hYmxlc1tpXS0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKIH0KIAor
Ym9vbCBTYWZlcG9pbnQ6OmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2RpZENhbGxCZWdpbik7CisgICAgCisgICAgaWYgKG1fcmVzdWx0Lm1fZGlkR2V0
Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gV2Ugd2VyZSBjYW5jZWxsZWQgZHVy
aW5nIGEgcHJldmlvdXMgR0MsIHNvIGxldCdzIG5vdCBtZXNzIHdpdGggaXQgdGhpcyB0aW1lIGFy
b3VuZCAtIHByZXRlbmQgaXQncyBsaXZlIGFuZCBtb3ZlIG9uLgorICAgIAorICAgIHJldHVybiBt
X3BsYW4uaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKK30KKwordm9pZCBTYWZlcG9pbnQ6OmNh
bmNlbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOworICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCk7IC8vIFdlIGNhbm5vdCBnZXQg
Y2FuY2VsbGVkIHR3aWNlIGJlY2F1c2Ugc3Vic2VxdWVudCBHQ3Mgd2lsbCB0aGluayB0aGF0IHdl
J3JlIGFsaXZlIGFuZCB0aGV5IHdpbGwgbm90IGRvIGFueXRoaW5nIHRvIHVzLgorICAgIAorICAg
IG1fcGxhbi5jYW5jZWwoKTsKKyAgICBtX3Jlc3VsdC5tX2RpZEdldENhbmNlbGxlZCA9IHRydWU7
Cit9CisKIFZNJiBTYWZlcG9pbnQ6OnZtKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGFuLnZt
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCShyZXZpc2lv
biAxNjc4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMzUgQEAgc3RydWN0IFBsYW47CiAKIGNsYXNzIFNh
ZmVwb2ludCB7CiBwdWJsaWM6Ci0gICAgU2FmZXBvaW50KFBsYW4mKTsKKyAgICBjbGFzcyBSZXN1
bHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzdWx0KCkKKyAgICAgICAgICAgIDogbV9kaWRH
ZXRDYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fd2FzQ2hlY2tlZCh0cnVlKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5SZXN1bHQoKTsKKyAgICAgICAg
CisgICAgICAgIGJvb2wgZGlkR2V0Q2FuY2VsbGVkKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIGZyaWVuZCBjbGFzcyBTYWZlcG9pbnQ7CisgICAgICAgIAorICAgICAgICBib29s
IG1fZGlkR2V0Q2FuY2VsbGVkOworICAgICAgICBib29sIG1fd2FzQ2hlY2tlZDsKKyAgICB9Owor
ICAgIAorICAgIFNhZmVwb2ludChQbGFuJiwgUmVzdWx0Jik7CiAgICAgflNhZmVwb2ludCgpOwog
ICAgIAogICAgIHZvaWQgYWRkKFNjYW5uYWJsZSopOwogICAgIAogICAgIHZvaWQgYmVnaW4oKTsK
ICAgICAKLSAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgYm9vbCBpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpOworICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCiAgICAgVk0m
IHZtKCkgY29uc3Q7CiAKQEAgLTU3LDYgKzc4LDcgQEAgcHJpdmF0ZToKICAgICBQbGFuJiBtX3Bs
YW47CiAgICAgVmVjdG9yPFNjYW5uYWJsZSo+IG1fc2Nhbm5hYmxlczsKICAgICBib29sIG1fZGlk
Q2FsbEJlZ2luOworICAgIFJlc3VsdCYgbV9yZXN1bHQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNw
cAkocmV2aXNpb24gMTY3ODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBXb3JrbGlzdDo6U3Rh
dGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhCiAgICAgUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fcGxhbnMuZmluZChrZXkpOwogICAgIGlmIChpdGVyID09IG1fcGxhbnMuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBOb3RLbm93bjsKLSAgICByZXR1cm4gaXRlci0+dmFsdWUtPmlzQ29tcGlsZWQg
PyBDb21waWxlZCA6IENvbXBpbGluZzsKKyAgICByZXR1cm4gaXRlci0+dmFsdWUtPnN0YWdlID09
IFBsYW46OlJlYWR5ID8gQ29tcGlsZWQgOiBDb21waWxpbmc7CiB9CiAKIHZvaWQgV29ya2xpc3Q6
OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYgdm0pCkBAIC0xMzAsNyArMTMwLDcg
QEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZQogICAgICAgICBmb3Ig
KFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIGlmICgmaXRlci0+dmFsdWUtPnZtICE9ICZ2bSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUtPmlzQ29t
cGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2UgIT0gUGxhbjo6UmVh
ZHkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVDb21waWxlZCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgV29y
a2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgKICAgICAgICAgUmVmUHRyPFBsYW4+IHBs
YW4gPSBtX3JlYWR5UGxhbnNbaV07CiAgICAgICAgIGlmICgmcGxhbi0+dm0gIT0gJnZtKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcGxhbi0+aXNDb21waWxlZCkKKyAgICAg
ICAgaWYgKHBsYW4tPnN0YWdlICE9IFBsYW46OlJlYWR5KQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIG15UmVhZHlQbGFucy5hcHBlbmQocGxhbik7CiAgICAgICAgIG1fcmVhZHlQbGFu
c1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKQEAgLTE4Miw3ICsxODIsNyBAQCBXb3JrbGlz
dDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhCiAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQogICAgICAgICAgICAgZGF0YUxvZygqdGhpcywgIjog
Q29tcGxldGluZyAiLCBjdXJyZW50S2V5LCAiXG4iKTsKICAgICAgICAgCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFu
LT5zdGFnZSA9PSBQbGFuOjpSZWFkeSk7CiAgICAgICAgIAogICAgICAgICBwbGFuLT5maW5hbGl6
ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgICAgIApAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlc3VtZUFsbFRocmVhZHMoKQogICAgIG1fc3VzcGVuc2lvbkxvY2sudW5sb2Nr
KCk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKK3ZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykK
IHsKICAgICBWTSogdm0gPSB2aXNpdG9yLmhlYXAoKS0+dm0oKTsKICAgICB7CkBAIC0yMjksMTEg
KzIyOSwxMCBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yCiAgICAg
ICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
JnBsYW4tPnZtICE9IHZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aXRlci0+dmFsdWUtPnZpc2l0Q2hpbGRyZW4odmlzaXRvciwgY29kZUJsb2Nrcyk7CisgICAgICAg
ICAgICBpdGVyLT52YWx1ZS0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4odmlzaXRvciwg
Y29kZUJsb2Nrcyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBsb29wIGRv
ZXNuJ3QgbmVlZCBmdXJ0aGVyIGxvY2tpbmcgYmVjYXVzZToKKyAgICAvLyBUaGlzIGxvb3AgZG9l
c24ndCBuZWVkIGxvY2tpbmcgYmVjYXVzZToKICAgICAvLyAoMSkgbm8gbmV3IHRocmVhZHMgY2Fu
IGJlIGFkZGVkIHRvIG1fdGhyZWFkcy4gSGVuY2UsIGl0IGlzIGltbXV0YWJsZSBhbmQgbmVlZHMg
bm8gbG9ja3MuCiAgICAgLy8gKDIpIFRocmVhZERhdGE6Om1fc2FmZXBvaW50IGlzIHByb3RlY3Rl
ZCBieSB0aGF0IHRocmVhZCdzIG1fcmlnaHRUb1J1biB3aGljaCB3ZSBtdXN0IGJlCiAgICAgLy8g
ICAgIGhvbGRpbmcgaGVyZSBiZWNhdXNlIG9mIGEgcHJpb3IgY2FsbCB0byBzdXNwZW5kQWxsVGhy
ZWFkcygpLgpAQCAtMjQxLDcgKzI0MCw1NiBAQCB2b2lkIFdvcmtsaXN0Ojp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yCiAgICAgICAgIFRocmVhZERhdGEqIGRhdGEgPSBtX3RocmVhZHNbaV0uZ2V0
KCk7CiAgICAgICAgIFNhZmVwb2ludCogc2FmZXBvaW50ID0gZGF0YS0+bV9zYWZlcG9pbnQ7CiAg
ICAgICAgIGlmIChzYWZlcG9pbnQgJiYgJnNhZmVwb2ludC0+dm0oKSA9PSB2bSkKLSAgICAgICAg
ICAgIHNhZmVwb2ludC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgICAgIHNhZmVw
b2ludC0+Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgfQorfQor
Cit2b2lkIFdvcmtsaXN0OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQoreworICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIEhhc2hTZXQ8Q29tcGlsYXRp
b25LZXk+IGRlYWRQbGFuS2V5czsKKyAgICAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICAgICAgaWYg
KCZwbGFuLT52bSAhPSAmdm0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAocGxhbi0+aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlICE9IFBsYW46
OkNhbmNlbGxlZCk7IC8vIFNob3VsZCBub3QgYmUgY2FuY2VsbGVkLCB5ZXQuCisgICAgICAgICAg
ICBBU1NFUlQoIWRlYWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpOworICAgICAgICAg
ICAgZGVhZFBsYW5LZXlzLmFkZChwbGFuLT5rZXkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFkZWFkUGxhbktleXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmb3IgKEhhc2hTZXQ8Q29t
cGlsYXRpb25LZXk+OjppdGVyYXRvciBpdGVyID0gZGVhZFBsYW5LZXlzLmJlZ2luKCk7IGl0ZXIg
IT0gZGVhZFBsYW5LZXlzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgbV9wbGFucy50
YWtlKCppdGVyKS0+Y2FuY2VsKCk7CisgICAgICAgICAgICBEZXF1ZTxSZWZQdHI8UGxhbj4+IG5l
d1F1ZXVlOworICAgICAgICAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9xdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAg
ICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UgIT0gUGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBuZXdRdWV1ZS5hcHBlbmQocGxh
bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3F1ZXVlLnN3YXAobmV3UXVldWUpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVhZHlQbGFucy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlYWR5UGxhbnNbaV0tPnN0YWdlICE9IFBs
YW46OkNhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgbV9yZWFkeVBsYW5zW2ldID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKKyAgICAgICAgICAg
ICAgICBtX3JlYWR5UGxhbnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIE5vIGxvY2tpbmcgbmVlZGVkIGZvciB0aGlzIHBhcnQsIHNl
ZSBjb21tZW50IGluIHZpc2l0V2Vha1JlZmVyZW5jZXMoKS4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3RocmVhZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFRocmVhZERhdGEqIGRhdGEgPSBt
X3RocmVhZHNbaV0uZ2V0KCk7CisgICAgICAgIFNhZmVwb2ludCogc2FmZXBvaW50ID0gZGF0YS0+
bV9zYWZlcG9pbnQ7CisgICAgICAgIGlmICghc2FmZXBvaW50KQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmICgmc2FmZXBvaW50LT52bSgpICE9ICZ2bSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBpZiAoc2FmZXBvaW50LT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHNhZmVwb2ludC0+Y2FuY2VsKCk7CiAg
ICAgfQogfQogCkBAIC0yOTQsMTUgKzM0Miw0MyBAQCB2b2lkIFdvcmtsaXN0OjpydW5UaHJlYWQo
VGhyZWFkRGF0YSogZGF0CiAgICAgICAgIAogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIoZGF0YS0+bV9yaWdodFRvUnVuKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAo
cGxhbi0+c3RhZ2UgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
bnVtYmVyT2ZBY3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwbGFuLT5ub3RpZnlDb21waWxpbmco
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZUNvbXBpbGF0aW9uUXVldWUoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAi
OiBDb21waWxpbmcgIiwgcGxhbi0+a2V5KCksICIgYXN5bmNocm9ub3VzbHlcbiIpOwogICAgICAg
ICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwbGFuLT52bS5oZWFwLmlzQ29sbGVjdGlu
ZygpKTsKICAgICAgICAgICAgIHBsYW4tPmNvbXBpbGVJblRocmVhZChsb25nTGl2ZWRTdGF0ZSwg
ZGF0YSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcGxhbi0+dm0uaGVhcC5pc0NvbGxl
Y3RpbmcoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAocGxhbi0+c3Rh
Z2UgPT0gUGxhbjo6Q2FuY2VsbGVkKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZB
Y3RpdmVUaHJlYWRzLS07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBwbGFuLT5ub3RpZnlDb21waWxlZCgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXBsYW4tPnZtLmhlYXAuaXNDb2xs
ZWN0aW5nKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHsKICAgICAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBXZSBjb3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkIGJldHdlZW4gcmVsZWFzaW5nIHJpZ2h0VG9S
dW4gYW5kIGFjcXVpcmluZyBtX2xvY2suCisgICAgICAgICAgICAvLyBUaGlzIHdvdWxkIG1lYW4g
dGhhdCB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIEdDIHJpZ2h0IG5vdy4KKyAgICAgICAg
ICAgIGlmIChwbGFuLT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQpIHsKKyAgICAgICAgICAgICAg
ICBtX251bWJlck9mQWN0aXZlVGhyZWFkcy0tOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBwbGFuLT5ub3RpZnlSZWFk
eSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBp
bGF0aW9uUXVldWUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuaAkocmV2aXNpb24gMTY3ODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw5IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIGlzQWN0aXZlRm9yVk0oVk0mKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImLCBDb2RlQmxvY2tTZXQmKTsgLy8gT25seSBjYWxsZWQgb24g
dGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMuCisgICAgLy8gT25s
eSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIHN1c3BlbmRpbmcgYWxsIHRocmVhZHMu
CisgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiwgQ29kZUJsb2NrU2V0
Jik7CisgICAgdm9pZCByZW1vdmVEZWFkUGxhbnMoVk0mKTsKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTY3ODUxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkwLDEyICs0OTAsMTIg
QEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIH0KIH0KIAot
dm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNh
ZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCiB7CiAgICAgY2hhciogZXJyb3IgPSAw
OwogICAgIAogICAgIHsKLSAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdy
YXBoKTsKKyAgICAgICAgR3JhcGhTYWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZl
cG9pbnRSZXN1bHQpOwogICAgICAgICAKICAgICAgICAgTExWTU1DSklUQ29tcGlsZXJPcHRpb25z
IG9wdGlvbnM7CiAgICAgICAgIGxsdm0tPkluaXRpYWxpemVNQ0pJVENvbXBpbGVyT3B0aW9ucygm
b3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpKTsKQEAgLTU2Niw3ICs1NjYsMTAgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgbGx2bS0+RGlzcG9zZVBhc3NNYW5hZ2VyKG1vZHVs
ZVBhc3Nlcyk7CiAgICAgICAgIGxsdm0tPkRpc3Bvc2VFeGVjdXRpb25FbmdpbmUoZW5naW5lKTsK
ICAgICB9Ci0KKyAgICBpZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5p
c0NvbGxlY3RpbmcoKSk7CisgICAgCiAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVz
KCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhh
bmRsZSA9IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKVtpXS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5oCShyZXZpc2lvbiAxNjc4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTEgKzI4
LDEyIEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkRGR1NhZmVwb2ludC5o
IgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAotdm9pZCBjb21waWxlKFN0YXRlJik7Cit2b2lkIGNvbXBpbGUoU3RhdGUmLCBERkc6OlNh
ZmVwb2ludDo6UmVzdWx0Jik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAx
Njc4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDggQEAgdm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNl
TWFya2VkKFNsb3RWaXNpdAogdm9pZCBDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhl
Y3V0aW5nQ29kZUJsb2NrcyhIZWFwKiBoZWFwKQogewogI2lmIEVOQUJMRShHR0MpCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlbWVtYmVyaW5nICIsIG1fY3VycmVudGx5RXhl
Y3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwogICAgIGZvciAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykgewogICAgICAgICBoZWFwLT5hZGRUb1Jl
bWVtYmVyZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CiAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2Nzg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTYsNyArNTE2LDYgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogICAgICAgICB2aXNpdEV4dGVybmFsUmVt
ZW1iZXJlZFNldCgpOwogICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAgICAgICB2aXNp
dENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgdmlzaXRDb21w
aWxlcldvcmtsaXN0cygpOwogICAgICAgICB2aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RW
aXNpdG9yKTsKICAgICAgICAgdmlzaXRUZW1wU29ydFZlY3RvcnMoaGVhcFJvb3RWaXNpdG9yKTsK
ICAgICAgICAgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKQEAgLTYyMiwx
NyArNjIxLDIzIEBAIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXIKICAg
ICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRD
b21waWxlcldvcmtsaXN0cygpCit2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBHQ1BIQVNFKFZpc2l0REZH
V29ya2xpc3RzKTsKICAgICBmb3IgKGF1dG8gd29ya2xpc3QgOiBtX3N1c3BlbmRlZENvbXBpbGVy
V29ya2xpc3RzKQotICAgICAgICB3b3JrbGlzdC0+dmlzaXRDaGlsZHJlbihtX3Nsb3RWaXNpdG9y
LCBtX2NvZGVCbG9ja3MpOworICAgICAgICB3b3JrbGlzdC0+dmlzaXRXZWFrUmVmZXJlbmNlcyht
X3Nsb3RWaXNpdG9yLCBtX2NvZGVCbG9ja3MpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxu
IiwgbV9zbG90VmlzaXRvcik7CisjZW5kaWYKK30KIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKK3ZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVz
KCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBHQ1BIQVNFKEZpbmFsaXplckRGR1dvcmts
aXN0cyk7CisgICAgZm9yIChhdXRvIHdvcmtsaXN0IDogbV9zdXNwZW5kZWRDb21waWxlcldvcmts
aXN0cykKKyAgICAgICAgd29ya2xpc3QtPnJlbW92ZURlYWRQbGFucygqbV92bSk7CiAjZW5kaWYK
IH0KIApAQCAtNzQzLDYgKzc0OCw4IEBAIHZvaWQgSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyhIZWFw
Um9vdFZpc2kKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0
V2Vha1NldHModmlzaXRvcik7CiAgICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAg
ICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICBtX2Nv
ZGVCbG9ja3MudHJhY2VNYXJrZWQobV9zbG90VmlzaXRvcik7IC8vIE5ldyAiZXhlY3V0aW5nIiBj
b2RlIGJsb2NrcyBtYXkgYmUgZGlzY292ZXJlZC4KICAgICAgICAgaWYgKG1fc2xvdFZpc2l0b3Iu
aXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTk5OCw2ICsxMDA1LDcgQEAgdm9p
ZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgIGNvcHlCYWNraW5nU3Rv
cmVzKCk7CiAKICAgICBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgcmVt
b3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgZGVsZXRlVW5tYXJrZWRDb21w
aWxlZENvZGUoKTsKICAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwogICAgIG5vdGlm
eUluY3JlbWVudGFsU3dlZXBlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
cmV2aXNpb24gMTY3ODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7CiAgICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwog
ICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAg
IHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOworICAgIHZvaWQgdmlzaXRDb21waWxlcldv
cmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldvcmts
aXN0RW50cmllcygpOwogICAgIHZvaWQgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290Vmlz
aXRvciYpOwogICAgIHZvaWQgdmlzaXRUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7
CiAgICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsK
</data>
<flag name="review"
          id="254661"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>