<?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>149228</bug_id>
          
          <creation_ts>2015-09-16 13:07:10 -0700</creation_ts>
          <short_desc>Interpreter::unwind() shouldn&apos;t be responsible for filtering out uncatchable exceptions</short_desc>
          <delta_ts>2015-09-17 11:31:58 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147374</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1126438</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-16 13:07:10 -0700</bug_when>
    <thetext>op_catch should do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126537</commentid>
    <comment_count>1</comment_count>
      <attachid>261343</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-16 17:58:34 -0700</bug_when>
    <thetext>Created attachment 261343
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126538</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 18:00:36 -0700</bug_when>
    <thetext>Attachment 261343 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1462:  The parameter name &quot;profiler&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/interpreter/Interpreter.cpp:657:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:2145:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3 in 17 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>1126556</commentid>
    <comment_count>3</comment_count>
      <attachid>261343</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-16 18:29:14 -0700</bug_when>
    <thetext>Comment on attachment 261343
patch

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

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        the exception further down the call stack. This is necessary
&gt; +        in a later patch that will implement exception handling
&gt; +        in the DFG, and part of that patch includes exception
&gt; +        handling that doesn&apos;t go through genericUnwind. This patch
&gt; +        enables that by destroying the notion that all exception 

Can you explain a little more about this? Why does the DFG sometimes want to call into genericUnwind and sometimes want not to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126557</commentid>
    <comment_count>4</comment_count>
      <attachid>261345</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-16 18:29:25 -0700</bug_when>
    <thetext>Created attachment 261345
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126559</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 18:30:55 -0700</bug_when>
    <thetext>Attachment 261345 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1462:  The parameter name &quot;profiler&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/interpreter/Interpreter.cpp:657:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:2145:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 4 in 19 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>1126563</commentid>
    <comment_count>6</comment_count>
      <attachid>261349</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-16 18:50:00 -0700</bug_when>
    <thetext>Created attachment 261349
patch

fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126564</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 18:53:21 -0700</bug_when>
    <thetext>Attachment 261349 did not pass style-queue:


ERROR: Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1462:  The parameter name &quot;profiler&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:2147:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 2 in 19 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>1126710</commentid>
    <comment_count>8</comment_count>
      <attachid>261349</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-17 09:38:29 -0700</bug_when>
    <thetext>Comment on attachment 261349
patch

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

r=me.  Since you&apos;re changing the LLINT, please do a test run of the JSC tests on the cloop build as well to make sure nothing broke.  Thanks.

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        the exception further down the call stack. This is necessary
&gt; +        in a later patch that will implement exception handling
&gt; +        in the DFG, and part of that patch includes exception
&gt; +        handling that doesn&apos;t go through genericUnwind. This patch

I think you can provide a little more detail to motivate this.  How about something like:

... This is necessary in a later patch that will implement exception handling in the DFG.  The DFG may determine that an exception thrown in a function (or an inlined callee) is caught by a catch block in the sane function, and optimize away the call to genericUnwind altogether. ...

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:658
&gt; +        if (!m_isTermination) {
&gt; +            if (m_codeBlock &amp;&amp; !isWebAssemblyExecutable(m_codeBlock-&gt;ownerExecutable()))
&gt; +                m_handler = m_codeBlock-&gt;handlerForBytecodeOffset(bytecodeOffset);
&gt; +            else
&gt; +                m_handler = nullptr;
&gt; +        }
&gt; +
&gt; +        if (!m_isTermination &amp;&amp; m_handler)
&gt; +            return StackVisitor::Done;

nit, but I suggest reducing this further to:

        m_handler = nullptr;
        if (!m_isTermination) {
            if (m_codeBlock &amp;&amp; !isWebAssemblyExecutable(m_codeBlock-&gt;ownerExecutable()))
                m_handler = m_codeBlock-&gt;handlerForBytecodeOffset(bytecodeOffset);
        }

        if (m_handler)
            return StackVisitor::Done;

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:741
&gt;  
&gt;      ASSERT(vm.exception() &amp;&amp; vm.exception()-&gt;stack().size());

Above these lines, there&apos;s a check for:
    if (exceptionValue.isObject())
        isTermination = isTerminatedExecutionException(exception);

You can now remove the &quot;if (exceptionValue.isObject())&quot; check.

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:1468
&gt; +        genericUnwind(&amp;vm, exec);
&gt; +        pc = returnToThrow(exec);
&gt; +        LLINT_RETURN_TWO(pc, bitwise_cast&lt;void*&gt;(static_cast&lt;uintptr_t&gt;(1)));

Why not just do a &quot;LLINT_RETURN_TWO(pc, 1);&quot; here instead and let llint_throw_from_slow_path_trampoline take care of calling genericUnwind()?

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:1846
&gt; +    dispatch(0) # go to exception handler because this is a terminating exception.

Why not just do a  &quot;jmp _llint_throw_from_slow_path_trampoline&quot; here?

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1736
&gt; +    dispatch(0) # go to exception handler because this is a terminating exception.

Why not just do a  &quot;jmp _llint_throw_from_slow_path_trampoline&quot; here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126760</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-17 11:31:58 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/189920</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261343</attachid>
            <date>2015-09-16 17:58:34 -0700</date>
            <delta_ts>2015-09-16 18:29:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>19191</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5ODg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDE1LTA5LTE2ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVycHJldGVyOjp1bndpbmQoKSBzaG91bGRuJ3QgYmUgcmVzcG9uc2libGUgZm9yIGZpbHRl
cmluZyBvdXQgdW5jYXRjaGFibGUgZXhjZXB0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgb3BfY2F0Y2ggaXMgbm93IHJlc3BvbnNpYmxlIGZvciBm
aWx0ZXJpbmcgZXhjZXB0aW9ucyB0aGF0CisgICAgICAgIGFyZW4ndCBjYXRjaGFibGUuIFdoZW4g
b3BfY2F0Y2ggZW5jb3VudGVycyBhbiB1bmNhdGNoYWJsZQorICAgICAgICBleGNlcHRpb24sIGl0
IHdpbGwgY2FsbCBiYWNrIGludG8gZ2VuZXJpY1Vud2luZCBhbmQgdGhyb3cKKyAgICAgICAgdGhl
IGV4Y2VwdGlvbiBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suIFRoaXMgaXMgbmVjZXNzYXJ5
CisgICAgICAgIGluIGEgbGF0ZXIgcGF0Y2ggdGhhdCB3aWxsIGltcGxlbWVudCBleGNlcHRpb24g
aGFuZGxpbmcKKyAgICAgICAgaW4gdGhlIERGRywgYW5kIHBhcnQgb2YgdGhhdCBwYXRjaCBpbmNs
dWRlcyBleGNlcHRpb24KKyAgICAgICAgaGFuZGxpbmcgdGhhdCBkb2Vzbid0IGdvIHRocm91Z2gg
Z2VuZXJpY1Vud2luZC4gVGhpcyBwYXRjaAorICAgICAgICBlbmFibGVzIHRoYXQgYnkgZGVzdHJv
eWluZyB0aGUgbm90aW9uIHRoYXQgYWxsIGV4Y2VwdGlvbiAKKyAgICAgICAgaGFuZGxpbmcgbXVz
dCBmaWx0ZXIgdGhyb3VnaCBnZW5lcmljVW53aW5kLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFp
bnRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZGVidWdnZXIgYW5kCisgICAgICAgIHByb2Zp
bGVyIGJ5IGVuc3VyaW5nIHdlIG5vdGlmeSB0aGUgZGVidWdnZXIgd2hlbiBhbgorICAgICAgICBl
eGNlcHRpb24gaXMgdGhyb3duIGluc2lkZSBWTTo6dGhyb3dFeGNlcHRpb24gYW5kIG5vdAorICAg
ICAgICBpbiBnZW5lcmljVW53aW5kLiBJdCBhbHNvIG5vdGlmaWVzIHRoZSBwcm9maWxlciB0aGF0
IHdlJ3ZlCisgICAgICAgIHBvdGVudGlhbGx5IGNoYW5nZWQgY2FsbCBmcmFtZXMgaW5zaWRlIG9w
X2NhdGNoLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjp1bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlND
OjpnZXRTdGFja0ZyYW1lQ29kZVR5cGUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bik6
CisgICAgICAgIChKU0M6OmNoZWNrZWRSZXR1cm4pOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OlN1c3BlbmRFeGNlcHRpb25TY29wZTo6U3VzcGVu
ZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNjb3BlOjp+
U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnNhbXBs
ZXIpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmg6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxp
bnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmlzVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAg
ICAoSlNDOjpWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQpOgorICAgICAgICAoSlND
OjpWTTo6cmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFy
RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFyTGFzdEV4Y2VwdGlvbik6CisgICAg
ICAgIChKU0M6OlZNOjpleGNlcHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6YWRkcmVzc09mRXhj
ZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OnNldEV4Y2VwdGlvbik6CisKIDIwMTUtMDktMTYg
IEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0
Q29yZSBzaG91bGQgZGlzY2FyZCBiYXNlbGluZSBjb2RlIGFmdGVyIHNvbWUgdGltZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAx
ODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MjEsNiArNjIxLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5l
ZWRlZChDYWxsRnJhbWUqIAogICAgIHsKICAgICAgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiBy
ZWFzb24oKnRoaXMsIGRpZEhpdEJyZWFrcG9pbnQgPyBQYXVzZWRGb3JCcmVha3BvaW50IDogbV9y
ZWFzb25Gb3JQYXVzZSk7CiAgICAgICAgIGhhbmRsZVBhdXNlKHZtRW50cnlHbG9iYWxPYmplY3Qs
IG1fcmVhc29uRm9yUGF1c2UpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbEZyYW1lLT5o
YWRFeGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgbV9wYXVzaW5nQnJlYWtwb2ludElEID0gbm9C
cmVha3BvaW50SUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OCw3ICs0NDgsOCBAQCBzdGF0aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tWaXNpdG9yCiAg
ICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuICF2aXNpdG9yLT5jYWxsZXJJc1ZNRW50cnlGcmFtZSgpOworICAgIGJvb2wgc2hvdWxk
Q29udGludWVVbndpbmRpbmcgPSAhdmlzaXRvci0+Y2FsbGVySXNWTUVudHJ5RnJhbWUoKTsKKyAg
ICByZXR1cm4gc2hvdWxkQ29udGludWVVbndpbmRpbmc7CiB9CiAKIHN0YXRpYyBTdGFja0ZyYW1l
Q29kZVR5cGUgZ2V0U3RhY2tGcmFtZUNvZGVUeXBlKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKQEAg
LTY0Niw4ICs2NDcsMTggQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3It
PmNvZGVCbG9jaygpOwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3It
PmJ5dGVjb2RlT2Zmc2V0KCk7CiAKLSAgICAgICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1f
aGFuZGxlciA9IChtX2NvZGVCbG9jayAmJiAhaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUobV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgPyBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSA6IG51bGxwdHIpKSB7Ci0gICAgICAgICAgICBpZiAo
IXVud2luZENhbGxGcmFtZSh2aXNpdG9yKSkgeworICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlv
bikgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrICYmICFpc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZShtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQorICAgICAgICAgICAgICAgIG1f
aGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGFuZGxlciA9IG51
bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbiAmJiBtX2hh
bmRsZXIpCisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWVVbndpbmRpbmcgPSB1bndpbmRD
YWxsRnJhbWUodmlzaXRvcik7CisgICAgICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlVW53aW5k
aW5nKSB7CiAgICAgICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZt
LmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICAgICAgICAgICAgICBwcm9maWxlci0+ZXhjZXB0
aW9uVW53aW5kKG1fY2FsbEZyYW1lKTsKIApAQCAtNjU1LDggKzY2Niw3IEBAIHB1YmxpYzoKIAog
ICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
KyAgICAgICAgfQogCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZl
cih2aXNpdG9yKTsKIApAQCAtNzMxLDExICs3NDEsMjIgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJ
bmZvKiBJbnRlcnByZXRlcjo6dQogCiAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpICYmIHZtLmV4
Y2VwdGlvbigpLT5zdGFjaygpLnNpemUoKSk7CiAKKyAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0
aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgorICAg
IEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gbnVsbHB0cjsKKyAgICBpc1Rlcm1pbmF0aW9uID0gZmFs
c2U7CisgICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKGNhbGxGcmFtZSwgaXNUZXJtaW5hdGlvbiwg
Y29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Cisg
ICAgaWYgKCFoYW5kbGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBo
YW5kbGVyOworfQorCit2b2lkIEludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9u
VG9CZVRocm93bihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCit7
CisgICAgYm9vbCBpc1Rlcm1pbmF0aW9uID0gaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KGV4Y2VwdGlvbik7CiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CiAgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2Vy
LT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpICYmICFleGNlcHRpb24tPmRpZE5vdGlmeUluc3Bl
Y3Rvck9mVGhyb3coKSkgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBleGNlcHRp
b24gaGVyZSBpbiBvcmRlciB0byBzZWUgaWYgYSBuZXcgZXhjZXB0aW9uIGhhcHBlbnMuCi0gICAg
ICAgIC8vIEFmdGVyd2FyZHMsIHRoZSB2YWx1ZXMgYXJlIHB1dCBiYWNrIHRvIGNvbnRpbnVlIHBy
b2Nlc3NpbmcgdGhpcyBlcnJvci4KLSAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3Bl
KCZ2bSk7CiAgICAgICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgaWYgdGhlIGRlYnVnZ2Vy
IGlzIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBpbmxpbmluZy4KICAgICAgICAgLy8gSWYgdGhh
dCBhc3N1bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZSB0aGVuIHdlJ2xsIGlnbm9yZSB0aGUg
aW5saW5lZCBjYWxsCiAgICAgICAgIC8vIGZyYW1lcy4KQEAgLTc1MiwyNCArNzczLDEyIEBAIE5F
VkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICAgICAgICAgIGhhc0Nh
dGNoSGFuZGxlciA9ICEhaGFuZGxlcjsKICAgICAgICAgfQogCi0gICAgICAgIGRlYnVnZ2VyLT5l
eGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgaGFzQ2F0Y2hIYW5kbGVyKTsKLSAg
ICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgZGVidWdn
ZXItPmV4Y2VwdGlvbihjYWxsRnJhbWUsIGV4Y2VwdGlvbi0+dmFsdWUoKSwgaGFzQ2F0Y2hIYW5k
bGVyKTsKICAgICB9CiAgICAgZXhjZXB0aW9uLT5zZXREaWROb3RpZnlJbnNwZWN0b3JPZlRocm93
KCk7Ci0KLSAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRp
bmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgotICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
bnVsbHB0cjsKLSAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1lLCBpc1Rlcm1pbmF0
aW9uLCBjb2RlQmxvY2ssIGhhbmRsZXIpOwotICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9y
KTsKLSAgICBpZiAoIWhhbmRsZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAg
ICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxGcmFtZSk7Ci0KLSAgICByZXR1cm4gaGFu
ZGxlcjsKIH0KIAorCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUgY2hlY2tlZFJldHVybihKU1ZhbHVl
IHJldHVyblZhbHVlKQogewogICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24g
MTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2VwdGlvblNjb3BlKCkKICAgICAgICAgewotICAg
ICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uKG9sZEV4Y2VwdGlvbik7CisgICAgICAgICAgICBt
X3ZtLT5yZXN0b3JlUHJldmlvdXNFeGNlcHRpb24ob2xkRXhjZXB0aW9uKTsKICAgICAgICAgfQog
ICAgIHByaXZhdGU6CiAgICAgICAgIEV4Y2VwdGlvbiogb2xkRXhjZXB0aW9uOwpAQCAtMjI2LDYg
KzIyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIo
KSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qLCBVbndpbmRTdGFy
dCk7CisgICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oQ2Fs
bEZyYW1lKiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENh
bGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0YWNrVHJhY2VBc1N0
cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTc3Niw2ICs3NzYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FWlN5bXRhYkosIGludCwgU3ltYm9sVGFibGUqLCBSZWdpc3RlcklEKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlN5bXRh
YkosIGludCwgU3ltYm9sVGFibGUqLCBSZWdpc3RlcklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KFpfSklUT3BlcmF0aW9uX0UpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKFZfSklUT3BlcmF0aW9u
X0VKLCBSZWdpc3RlcklEKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsMTMgQEAgQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhaX0pJVE9w
ZXJhdGlvbl9FIG9wZXJhdGlvbikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwor
ICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlv
bik7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uKQogewogICAgIHNldHVwQXJndW1lbnRz
RXhlY1N0YXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxMCw2ICs4MTAsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogCiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0
aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKKyAgICBKdW1wIGlzQ2F0Y2hhYmxl
RXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlz
KTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOworCiAgICAgLy8gTm93
IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9uVGhyb3cuCiAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QyKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODk4MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDQsNiArNTA0LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBj
dXIKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogCisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcik7CisgICAg
SnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgIGlzQ2F0Y2hhYmxlRXhj
ZXB0aW9uLmxpbmsodGhpcyk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVn
VDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg5
ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEzNSw2ICsyMTM1LDIyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Qcm9jZXNzVHlwZVAKICAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygpLT5wcm9j
ZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkxvZyBGdWxsLCBjYWxsZWQgZnJvbSBpbnNpZGUg
YmFzZWxpbmUgSklUIikpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hl
Y2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgUkVMRUFTRV9BU1NFUlQoISF2bS5leGNlcHRpb24o
KSk7CisKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2Zp
bGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25VbndpbmQoZXhlYyk7CisKKyAgICBp
ZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CisgICAgICAgIHJldHVybiAxOworICAgIH0g
ZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwogfSAvLyBleHRlcm4gIkMiCiAKIC8vIE5vdGU6
IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKCkgbmVlZHMgdG8gYmUgcGxhY2Vk
IGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ28KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKEV4
ZWNTdGF0ZSopOworCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dl
bmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7CiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiwgSlNDZWxsKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTQsNiArMTQ1NCwyMiBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK0xMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jaGVja19pZl9leGNlcHRpb25faXNfdW5jYXRjaGFibGVf
YW5kX25vdGlmeV9wcm9maWxlcikKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCEhdm0uZXhjZXB0aW9uKCkpOworCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9m
aWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9u
VW53aW5kKGV4ZWMpOworCisgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2
bS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOworICAg
ICAgICBwYyA9IHJldHVyblRvVGhyb3coZXhlYyk7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08o
cGMsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSkpOworICAg
IH0KKyAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCAwKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0
aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90
b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB2bS0+dG9w
Q2FsbEZyYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmgJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcgogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9oYW5kbGVfZXhjZXB0aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpOworTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9jaGVja19pZl9leGNlcHRpb25faXNfdW5jYXRjaGFibGVfYW5kX25v
dGlmeV9wcm9maWxlcik7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJv
d19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFM
OwogI2lmICFFTkFCTEUoSklUKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
c3RhY2tfY2hlY2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5BTDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTg0MCw2ICsxODQwLDE2IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICByZXN0b3JlU3RhY2tQ
b2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxvYWRpIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9y
VGhyb3dbdDNdLCBQQworCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY2hlY2tf
aWZfZXhjZXB0aW9uX2lzX3VuY2F0Y2hhYmxlX2FuZF9ub3RpZnlfcHJvZmlsZXIpCisgICAgYnBl
cSByMSwgMCwgLmlzQ2F0Y2hhYmxlRXhjZXB0aW9uCisgICAgZGlzcGF0Y2goMCkgIyBnbyB0byBl
eGNlcHRpb24gaGFuZGxlciBiZWNhdXNlIHRoaXMgaXMgYSB0ZXJtaW5hdGluZyBleGNlcHRpb24u
CisKKy5pc0NhdGNoYWJsZUV4Y2VwdGlvbjoKKyAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zm
c2V0W2Nmcl0sIHQzCisgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCisgICAgbG9hZHAgTWFy
a2VkQmxvY2s6Om1fd2Vha1NldCArIFdlYWtTZXQ6Om1fdm1bdDNdLCB0MworCiAgICAgbG9hZGkg
Vk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKICAgICBzdG9yZWkgMCwgVk06Om1fZXhjZXB0aW9uW3Qz
XQogICAgIGxvYWRpIDRbUENdLCB0MgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4OTgxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMxLDYgKzE3MzEsMTUgQEAgX2xsaW50X29wX2NhdGNoOgog
ICAgIHN1YnAgUEIsIFBDCiAgICAgcnNoaWZ0cCAzLCBQQwogCisgICAgY2FsbFNsb3dQYXRoKF9s
bGludF9zbG93X3BhdGhfY2hlY2tfaWZfZXhjZXB0aW9uX2lzX3VuY2F0Y2hhYmxlX2FuZF9ub3Rp
ZnlfcHJvZmlsZXIpCisgICAgYnBlcSByMSwgMCwgLmlzQ2F0Y2hhYmxlRXhjZXB0aW9uCisgICAg
ZGlzcGF0Y2goMCkgIyBnbyB0byBleGNlcHRpb24gaGFuZGxlciBiZWNhdXNlIHRoaXMgaXMgYSB0
ZXJtaW5hdGluZyBleGNlcHRpb24uCisKKy5pc0NhdGNoYWJsZUV4Y2VwdGlvbjoKKyAgICBsb2Fk
cCBDYWxsZWVbY2ZyXSwgdDMKKyAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKKyAgICBsb2Fk
cCBNYXJrZWRCbG9jazo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCisKICAgICBs
b2FkcSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3JlcSAwLCBWTTo6bV9leGNlcHRp
b25bdDNdCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlz
aW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIEpTT2JqZWN0KiBjcmVh
dGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXAKIAogYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CisgICAgaWYgKCFleGNlcHRpb24tPnZh
bHVlKCkuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGV4
Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8o
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTM0LDggKzUzNCwxMSBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsCiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRl
cihleGVjKSwgIiBmb3IgY29kZSBibG9jayAiLCAqZXhlYy0+Y29kZUJsb2NrKCksICJcbiIpOwog
ICAgICAgICBDUkFTSCgpOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChleGVjID09IHRvcENh
bGxGcmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpIHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkp
OworCisgICAgaW50ZXJwcmV0ZXItPm5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3du
KGV4ZWMsIGV4Y2VwdGlvbik7CisKICAgICBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODk4MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDIs
MTUgKzQwMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0s
IHRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKKyAgICB2b2lkIHJlc3RvcmVQcmV2
aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0
aW9uKTsgfQorCiAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxs
cHRyOyB9CiAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9
IG51bGxwdHI7IH0KIAotICAgIHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQotICAgIHsKLSAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247Ci0gICAgICAgIG1fbGFz
dEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLSAgICB9Ci0KICAgICBFeGNlcHRpb24qIGV4Y2VwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09m
RXhjZXB0aW9uKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0
aW9uKTsgfQogCkBAIC01ODksNiArNTg1LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0
ZVN0YWNrTGltaXQoKTsKIAorICAgIHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0
aW9uKQorICAgIHsKKyAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIG1f
bGFzdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICB9CisKICNpZiBFTkFCTEUoQVNTRU1CTEVS
KQogICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261345</attachid>
            <date>2015-09-16 18:29:25 -0700</date>
            <delta_ts>2015-09-16 18:50:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>20570</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5ODkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDE1LTA5LTE2ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVycHJldGVyOjp1bndpbmQoKSBzaG91bGRuJ3QgYmUgcmVzcG9uc2libGUgZm9yIGZpbHRl
cmluZyBvdXQgdW5jYXRjaGFibGUgZXhjZXB0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgb3BfY2F0Y2ggaXMgbm93IHJlc3BvbnNpYmxlIGZvciBm
aWx0ZXJpbmcgZXhjZXB0aW9ucyB0aGF0CisgICAgICAgIGFyZW4ndCBjYXRjaGFibGUuIFdoZW4g
b3BfY2F0Y2ggZW5jb3VudGVycyBhbiB1bmNhdGNoYWJsZQorICAgICAgICBleGNlcHRpb24sIGl0
IHdpbGwgY2FsbCBiYWNrIGludG8gZ2VuZXJpY1Vud2luZCBhbmQgdGhyb3cKKyAgICAgICAgdGhl
IGV4Y2VwdGlvbiBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suIFRoaXMgaXMgbmVjZXNzYXJ5
CisgICAgICAgIGluIGEgbGF0ZXIgcGF0Y2ggdGhhdCB3aWxsIGltcGxlbWVudCBleGNlcHRpb24g
aGFuZGxpbmcKKyAgICAgICAgaW4gdGhlIERGRywgYW5kIHBhcnQgb2YgdGhhdCBwYXRjaCBpbmNs
dWRlcyBleGNlcHRpb24KKyAgICAgICAgaGFuZGxpbmcgdGhhdCBkb2Vzbid0IGdvIHRocm91Z2gg
Z2VuZXJpY1Vud2luZC4gVGhpcyBwYXRjaAorICAgICAgICBlbmFibGVzIHRoYXQgYnkgZGVzdHJv
eWluZyB0aGUgbm90aW9uIHRoYXQgYWxsIGV4Y2VwdGlvbiAKKyAgICAgICAgaGFuZGxpbmcgbXVz
dCBmaWx0ZXIgdGhyb3VnaCBnZW5lcmljVW53aW5kLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFp
bnRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZGVidWdnZXIgYW5kCisgICAgICAgIHByb2Zp
bGVyIGJ5IGVuc3VyaW5nIHdlIG5vdGlmeSB0aGUgZGVidWdnZXIgd2hlbiBhbgorICAgICAgICBl
eGNlcHRpb24gaXMgdGhyb3duIGluc2lkZSBWTTo6dGhyb3dFeGNlcHRpb24gYW5kIG5vdAorICAg
ICAgICBpbiBnZW5lcmljVW53aW5kLiBJdCBhbHNvIG5vdGlmaWVzIHRoZSBwcm9maWxlciB0aGF0
IHdlJ3ZlCisgICAgICAgIHBvdGVudGlhbGx5IGNoYW5nZWQgY2FsbCBmcmFtZXMgaW5zaWRlIG9w
X2NhdGNoLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjp1bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlND
OjpnZXRTdGFja0ZyYW1lQ29kZVR5cGUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bik6
CisgICAgICAgIChKU0M6OmNoZWNrZWRSZXR1cm4pOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OlN1c3BlbmRFeGNlcHRpb25TY29wZTo6U3VzcGVu
ZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNjb3BlOjp+
U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnNhbXBs
ZXIpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmg6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxp
bnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmlzVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAg
ICAoSlNDOjpWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQpOgorICAgICAgICAoSlND
OjpWTTo6cmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFy
RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFyTGFzdEV4Y2VwdGlvbik6CisgICAg
ICAgIChKU0M6OlZNOjpleGNlcHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6YWRkcmVzc09mRXhj
ZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OnNldEV4Y2VwdGlvbik6CisKIDIwMTUtMDktMTYg
IFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAKICAgICAgICAgSW1w
bGVtZW50IGluZGlyZWN0IGNhbGxzIGluIFdlYkFzc2VtYmx5CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyMSw2ICs2MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFt
ZSogCiAgICAgewogICAgICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywg
ZGlkSGl0QnJlYWtwb2ludCA/IFBhdXNlZEZvckJyZWFrcG9pbnQgOiBtX3JlYXNvbkZvclBhdXNl
KTsKICAgICAgICAgaGFuZGxlUGF1c2Uodm1FbnRyeUdsb2JhbE9iamVjdCwgbV9yZWFzb25Gb3JQ
YXVzZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigp
KTsKICAgICB9CiAKICAgICBtX3BhdXNpbmdCcmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw4IEBA
IHN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3IKICAgICAgICAgQVNTRVJU
KCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CiAKLSAgICByZXR1cm4gIXZpc2l0
b3ItPmNhbGxlcklzVk1FbnRyeUZyYW1lKCk7CisgICAgYm9vbCBzaG91bGRDb250aW51ZVVud2lu
ZGluZyA9ICF2aXNpdG9yLT5jYWxsZXJJc1ZNRW50cnlGcmFtZSgpOworICAgIHJldHVybiBzaG91
bGRDb250aW51ZVVud2luZGluZzsKIH0KIAogc3RhdGljIFN0YWNrRnJhbWVDb2RlVHlwZSBnZXRT
dGFja0ZyYW1lQ29kZVR5cGUoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNjQ2LDggKzY0Nywx
OCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCk7
CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdmlzaXRvci0+Ynl0ZWNvZGVPZmZz
ZXQoKTsKIAotICAgICAgICBpZiAobV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0gKG1f
Y29kZUJsb2NrICYmICFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZShtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCkpKSA/IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpIDogbnVsbHB0cikpIHsKLSAgICAgICAgICAgIGlmICghdW53aW5kQ2FsbEZy
YW1lKHZpc2l0b3IpKSB7CisgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2sgJiYgIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gbV9j
b2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9oYW5kbGVyID0gbnVsbHB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uICYmIG1faGFuZGxlcikKKyAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYm9vbCBzaG91bGRDb250aW51ZVVud2luZGluZyA9IHVud2luZENhbGxGcmFtZSh2aXNp
dG9yKTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVVbndpbmRpbmcpIHsKICAgICAg
ICAgICAgICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2Zp
bGVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25VbndpbmQobV9j
YWxsRnJhbWUpOwogCkBAIC02NTUsOCArNjY2LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICB9CiAK
ICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwog
CkBAIC03MzEsMTEgKzc0MSwyMiBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJl
dGVyOjp1CiAKICAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkgJiYgdm0uZXhjZXB0aW9uKCktPnN0
YWNrKCkuc2l6ZSgpKTsKIAorICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2
UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCisgICAgSGFuZGxlckluZm8q
IGhhbmRsZXIgPSBudWxscHRyOworICAgIGlzVGVybWluYXRpb24gPSBmYWxzZTsKKyAgICBVbndp
bmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1lLCBpc1Rlcm1pbmF0aW9uLCBjb2RlQmxvY2ssIGhh
bmRsZXIpOworICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBpZiAoIWhhbmRs
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGhhbmRsZXI7Cit9CisK
K3ZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3sKKyAgICBib29sIGlz
VGVybWluYXRpb24gPSBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKTsK
ICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3Qo
KS0+ZGVidWdnZXIoKTsKICAgICBpZiAoZGVidWdnZXIgJiYgZGVidWdnZXItPm5lZWRzRXhjZXB0
aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+ZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygp
KSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIGluIG9y
ZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KLSAgICAgICAgLy8gQWZ0ZXJ3
YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlz
IGVycm9yLgotICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKICAgICAg
ICAgLy8gVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBpZiB0aGUgZGVidWdnZXIgaXMgZW5hYmxlZCB0
aGVuIHRoZXJlIGlzIG5vIGlubGluaW5nLgogICAgICAgICAvLyBJZiB0aGF0IGFzc3VtcHRpb24g
dHVybnMgb3V0IHRvIGJlIGZhbHNlIHRoZW4gd2UnbGwgaWdub3JlIHRoZSBpbmxpbmVkIGNhbGwK
ICAgICAgICAgLy8gZnJhbWVzLgpAQCAtNzUyLDIyICs3NzMsOSBAQCBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgICAgICAgICBoYXNDYXRjaEhhbmRsZXIgPSAh
IWhhbmRsZXI7CiAgICAgICAgIH0KIAotICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGNhbGxG
cmFtZSwgZXhjZXB0aW9uVmFsdWUsIGhhc0NhdGNoSGFuZGxlcik7Ci0gICAgICAgIEFTU0VSVCgh
Y2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24o
Y2FsbEZyYW1lLCBleGNlcHRpb24tPnZhbHVlKCksIGhhc0NhdGNoSGFuZGxlcik7CiAgICAgfQog
ICAgIGV4Y2VwdGlvbi0+c2V0RGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpOwotCi0gICAgLy8g
Q2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVz
IGFzIG5lY2Vzc2FyeS4KLSAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAg
VW53aW5kRnVuY3RvciBmdW5jdG9yKGNhbGxGcmFtZSwgaXNUZXJtaW5hdGlvbiwgY29kZUJsb2Nr
LCBoYW5kbGVyKTsKLSAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci0gICAgaWYgKCFo
YW5kbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKLSAgICAgICAgcHJvZmlsZXItPmV4
Y2VwdGlvblVud2luZChjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBjaGVja2VkUmV0dXJuKEpTVmFsdWUgcmV0dXJuVmFsdWUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2VwdGlvblNjb3BlKCkKICAg
ICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0RXhjZXB0aW9uKG9sZEV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICBtX3ZtLT5yZXN0b3JlUHJldmlvdXNFeGNlcHRpb24ob2xkRXhjZXB0aW9uKTsK
ICAgICAgICAgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEV4Y2VwdGlvbiogb2xkRXhjZXB0aW9u
OwpAQCAtMjI2LDYgKzIyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTYW1wbGluZ1Rv
b2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24q
LCBVbndpbmRTdGFydCk7CisgICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRv
QmVUaHJvd24oQ2FsbEZyYW1lKiwgRXhjZXB0aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2
b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9va0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0
YWNrVHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBWZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTc3Niw2ICs3NzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0pJVE9wZXJhdGlvbl9FWlN5bXRhYkosIGludCwgU3ltYm9sVGFibGUqLCBSZWdpc3RlcklE
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FWlN5bXRhYkosIGludCwgU3ltYm9sVGFibGUqLCBSZWdpc3RlcklEKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSiwgUmVn
aXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKFpfSklUT3BlcmF0aW9uX0UpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKFZf
SklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklEKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEs
MTMgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9CiAKK0FMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhaX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOworICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgIHJldHVybiBhcHBlbmRD
YWxsKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uKQogewogICAgIHNl
dHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
MCw2ICs4MTAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgog
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2Nr
KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25D
aGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKKyAgICBKdW1w
IGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgaXNDYXRjaGFibGVFeGNlcHRp
b24ubGluayh0aGlzKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwor
CiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9uVGhy
b3cuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJl
Z1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAx
ODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKElu
c3RydWN0aW9uKiBjdXIKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9m
aWxlcik7CisgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUik7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgIGlz
Q2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9m
ZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzNSw2ICsyMTM1LDIyIEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVAKICAgICBleGVjLT52bSgpLnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkxvZyBGdWxsLCBjYWxsZWQg
ZnJvbSBpbnNpZGUgYmFzZWxpbmUgSklUIikpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcihF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgUkVMRUFTRV9BU1NFUlQoISF2
bS5leGNlcHRpb24oKSk7CisKKyAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0u
ZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25VbndpbmQoZXhl
Yyk7CisKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlv
bigpKSkgeworICAgICAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CisgICAgICAgIHJldHVy
biAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwogfSAvLyBleHRlcm4gIkMi
CiAKIC8vIE5vdGU6IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKCkgbmVlZHMg
dG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ28KIAogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7CiAKK2ludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlm
eVByb2ZpbGVyKEV4ZWNTdGF0ZSopOworCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKik7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiwgSlNDZWxsKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTQsNiArMTQ1NCwyMiBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAgICAgTExJTlRfRU5EKCk7CiB9
CiAKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jaGVja19pZl9leGNlcHRpb25faXNf
dW5jYXRjaGFibGVfYW5kX25vdGlmeV9wcm9maWxlcikKK3sKKyAgICBMTElOVF9CRUdJTigpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCEhdm0uZXhjZXB0aW9uKCkpOworCisgICAgaWYgKExlZ2FjeVBy
b2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICBwcm9maWxl
ci0+ZXhjZXB0aW9uVW53aW5kKGV4ZWMpOworCisgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbih2bS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZ2VuZXJpY1Vud2luZCgmdm0s
IGV4ZWMpOworICAgICAgICBwYyA9IHJldHVyblRvVGhyb3coZXhlYyk7CisgICAgICAgIExMSU5U
X1JFVFVSTl9UV08ocGMsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSkpOworICAgIH0KKyAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCAwKTsKK30KKwogZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3Io
Vk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB2bS0+dG9wQ2FsbEZyYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiAr
MTE4LDcgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcgogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9oYW5kbGVfZXhjZXB0aW9uKTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpOworTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jaGVja19pZl9leGNlcHRpb25faXNfdW5jYXRj
aGFibGVfYW5kX25vdGlmeV9wcm9maWxlcik7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikg
V1RGX0lOVEVSTkFMOwogI2lmICFFTkFCTEUoSklUKQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVy
blR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1fZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9J
TlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtMTg0MCw2ICsxODQwLDE2IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICBy
ZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKIAogICAgIGxvYWRpIFZNOjp0YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfY2hlY2tfaWZfZXhjZXB0aW9uX2lzX3VuY2F0Y2hhYmxlX2FuZF9ub3RpZnlfcHJvZmls
ZXIpCisgICAgYnBlcSByMSwgMCwgLmlzQ2F0Y2hhYmxlRXhjZXB0aW9uCisgICAgZGlzcGF0Y2go
MCkgIyBnbyB0byBleGNlcHRpb24gaGFuZGxlciBiZWNhdXNlIHRoaXMgaXMgYSB0ZXJtaW5hdGlu
ZyBleGNlcHRpb24uCisKKy5pc0NhdGNoYWJsZUV4Y2VwdGlvbjoKKyAgICBsb2FkcCBDYWxsZWUg
KyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCisgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCisg
ICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCArIFdlYWtTZXQ6Om1fdm1bdDNdLCB0Mwor
CiAgICAgbG9hZGkgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKICAgICBzdG9yZWkgMCwgVk06Om1f
ZXhjZXB0aW9uW3QzXQogICAgIGxvYWRpIDRbUENdLCB0MgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMxLDYgKzE3MzEsMTUgQEAgX2xsaW50
X29wX2NhdGNoOgogICAgIHN1YnAgUEIsIFBDCiAgICAgcnNoaWZ0cCAzLCBQQwogCisgICAgY2Fs
bFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY2hlY2tfaWZfZXhjZXB0aW9uX2lzX3VuY2F0Y2hh
YmxlX2FuZF9ub3RpZnlfcHJvZmlsZXIpCisgICAgYnBlcSByMSwgMCwgLmlzQ2F0Y2hhYmxlRXhj
ZXB0aW9uCisgICAgZGlzcGF0Y2goMCkgIyBnbyB0byBleGNlcHRpb24gaGFuZGxlciBiZWNhdXNl
IHRoaXMgaXMgYSB0ZXJtaW5hdGluZyBleGNlcHRpb24uCisKKy5pc0NhdGNoYWJsZUV4Y2VwdGlv
bjoKKyAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKKyAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywg
dDMKKyAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10s
IHQzCisKICAgICBsb2FkcSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3JlcSAwLCBW
TTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIEpT
T2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXAKIAogYm9vbCBpc1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CisgICAgaWYgKCFl
eGNlcHRpb24tPnZhbHVlKCkuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgcmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5pbmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3I6OmluZm8oKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM0LDggKzUzNCwxMSBAQCB2b2lkIFZNOjp0aHJvd0V4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUg
IiwgUmF3UG9pbnRlcihleGVjKSwgIiBmb3IgY29kZSBibG9jayAiLCAqZXhlYy0+Y29kZUJsb2Nr
KCksICJcbiIpOwogICAgICAgICBDUkFTSCgpOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChl
eGVjID09IHRvcENhbGxGcmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpIHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCkpOworCisgICAgaW50ZXJwcmV0ZXItPm5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRp
b25Ub0JlVGhyb3duKGV4ZWMsIGV4Y2VwdGlvbik7CisKICAgICBzZXRFeGNlcHRpb24oZXhjZXB0
aW9uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
ODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MDIsMTUgKzQwMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKICAgICB9CiAKKyAgICB2b2lk
IHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNl
cHRpb24oZXhjZXB0aW9uKTsgfQorCiAgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNl
cHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFz
dEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAotICAgIHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2VwdGlv
biogZXhjZXB0aW9uKQotICAgIHsKLSAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247Ci0g
ICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLSAgICB9Ci0KICAgICBFeGNlcHRp
b24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxs
KiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
Kj4oJm1fZXhjZXB0aW9uKTsgfQogCkBAIC01ODksNiArNTg1LDEyIEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHVwZGF0ZVN0YWNrTGltaXQoKTsKIAorICAgIHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247
CisgICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKKyAgICB9CisKICNpZiBFTkFC
TEUoQVNTRU1CTEVSKQogICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4OTg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA5LTE2ICBTYWFtIGJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEludGVycHJldGVyOjp1bndpbmQoKSBzaG91
bGRuJ3QgYmUgcmVzcG9uc2libGUgZm9yIGZpbHRlcmluZyBvdXQgdW5jYXRjaGFibGUgZXhjZXB0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKToK
KwogMjAxNS0wOS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IEVsZW1lbnQncyBhdHRyaWJ1dGUgTlMgQVBJIHNob3VsZCBkZWZpbmVkIHRyZWF0IHVuZGVmaW5l
ZCBuYW1lc3BhY2UgYXMgbnVsbApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlRmlsdGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHVpbnQxNl90IEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShOb2Rl
KiAKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0Nh
bGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJhY2NlcHROb2RlIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBp
ZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgLy8gUmV0aHJvdyBleGNlcHRpb24uCi0g
ICAgICAgIGV4ZWMtPnZtKCkuc2V0RXhjZXB0aW9uKHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAg
ICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAK
ICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261349</attachid>
            <date>2015-09-16 18:50:00 -0700</date>
            <delta_ts>2015-09-17 09:38:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>20837</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5ODkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDE1LTA5LTE2ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVycHJldGVyOjp1bndpbmQoKSBzaG91bGRuJ3QgYmUgcmVzcG9uc2libGUgZm9yIGZpbHRl
cmluZyBvdXQgdW5jYXRjaGFibGUgZXhjZXB0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgb3BfY2F0Y2ggaXMgbm93IHJlc3BvbnNpYmxlIGZvciBm
aWx0ZXJpbmcgZXhjZXB0aW9ucyB0aGF0CisgICAgICAgIGFyZW4ndCBjYXRjaGFibGUuIFdoZW4g
b3BfY2F0Y2ggZW5jb3VudGVycyBhbiB1bmNhdGNoYWJsZQorICAgICAgICBleGNlcHRpb24sIGl0
IHdpbGwgY2FsbCBiYWNrIGludG8gZ2VuZXJpY1Vud2luZCBhbmQgdGhyb3cKKyAgICAgICAgdGhl
IGV4Y2VwdGlvbiBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suIFRoaXMgaXMgbmVjZXNzYXJ5
CisgICAgICAgIGluIGEgbGF0ZXIgcGF0Y2ggdGhhdCB3aWxsIGltcGxlbWVudCBleGNlcHRpb24g
aGFuZGxpbmcKKyAgICAgICAgaW4gdGhlIERGRywgYW5kIHBhcnQgb2YgdGhhdCBwYXRjaCBpbmNs
dWRlcyBleGNlcHRpb24KKyAgICAgICAgaGFuZGxpbmcgdGhhdCBkb2Vzbid0IGdvIHRocm91Z2gg
Z2VuZXJpY1Vud2luZC4gVGhpcyBwYXRjaAorICAgICAgICBlbmFibGVzIHRoYXQgYnkgZGVzdHJv
eWluZyB0aGUgbm90aW9uIHRoYXQgYWxsIGV4Y2VwdGlvbiAKKyAgICAgICAgaGFuZGxpbmcgbXVz
dCBmaWx0ZXIgdGhyb3VnaCBnZW5lcmljVW53aW5kLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFp
bnRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZGVidWdnZXIgYW5kCisgICAgICAgIHByb2Zp
bGVyIGJ5IGVuc3VyaW5nIHdlIG5vdGlmeSB0aGUgZGVidWdnZXIgd2hlbiBhbgorICAgICAgICBl
eGNlcHRpb24gaXMgdGhyb3duIGluc2lkZSBWTTo6dGhyb3dFeGNlcHRpb24gYW5kIG5vdAorICAg
ICAgICBpbiBnZW5lcmljVW53aW5kLiBJdCBhbHNvIG5vdGlmaWVzIHRoZSBwcm9maWxlciB0aGF0
IHdlJ3ZlCisgICAgICAgIHBvdGVudGlhbGx5IGNoYW5nZWQgY2FsbCBmcmFtZXMgaW5zaWRlIG9w
X2NhdGNoLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjp1bndpbmRDYWxsRnJhbWUpOgorICAgICAgICAoSlND
OjpnZXRTdGFja0ZyYW1lQ29kZVR5cGUpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bik6
CisgICAgICAgIChKU0M6OmNoZWNrZWRSZXR1cm4pOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OlN1c3BlbmRFeGNlcHRpb25TY29wZTo6U3VzcGVu
ZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNjb3BlOjp+
U3VzcGVuZEV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnNhbXBs
ZXIpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmg6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxp
bnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmlzVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAg
ICAoSlNDOjpWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dPZmZzZXQpOgorICAgICAgICAoSlND
OjpWTTo6cmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFy
RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFyTGFzdEV4Y2VwdGlvbik6CisgICAg
ICAgIChKU0M6OlZNOjpleGNlcHRpb24pOgorICAgICAgICAoSlNDOjpWTTo6YWRkcmVzc09mRXhj
ZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OnNldEV4Y2VwdGlvbik6CisKIDIwMTUtMDktMTYg
IFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAKICAgICAgICAgSW1w
bGVtZW50IGluZGlyZWN0IGNhbGxzIGluIFdlYkFzc2VtYmx5CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyMSw2ICs2MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFt
ZSogCiAgICAgewogICAgICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywg
ZGlkSGl0QnJlYWtwb2ludCA/IFBhdXNlZEZvckJyZWFrcG9pbnQgOiBtX3JlYXNvbkZvclBhdXNl
KTsKICAgICAgICAgaGFuZGxlUGF1c2Uodm1FbnRyeUdsb2JhbE9iamVjdCwgbV9yZWFzb25Gb3JQ
YXVzZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigp
KTsKICAgICB9CiAKICAgICBtX3BhdXNpbmdCcmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw4IEBA
IHN0YXRpYyBib29sIHVud2luZENhbGxGcmFtZShTdGFja1Zpc2l0b3IKICAgICAgICAgQVNTRVJU
KCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICB9CiAKLSAgICByZXR1cm4gIXZpc2l0
b3ItPmNhbGxlcklzVk1FbnRyeUZyYW1lKCk7CisgICAgYm9vbCBzaG91bGRDb250aW51ZVVud2lu
ZGluZyA9ICF2aXNpdG9yLT5jYWxsZXJJc1ZNRW50cnlGcmFtZSgpOworICAgIHJldHVybiBzaG91
bGRDb250aW51ZVVud2luZGluZzsKIH0KIAogc3RhdGljIFN0YWNrRnJhbWVDb2RlVHlwZSBnZXRT
dGFja0ZyYW1lQ29kZVR5cGUoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNjQ2LDE3ICs2NDcs
MjUgQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygp
OwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zm
c2V0KCk7CiAKLSAgICAgICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1faGFuZGxlciA9ICht
X2NvZGVCbG9jayAmJiAhaXNXZWJBc3NlbWJseUV4ZWN1dGFibGUobV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpKSkgPyBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KSA6IG51bGxwdHIpKSB7Ci0gICAgICAgICAgICBpZiAoIXVud2luZENhbGxG
cmFtZSh2aXNpdG9yKSkgewotICAgICAgICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJv
ZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvZmls
ZXItPmV4Y2VwdGlvblVud2luZChtX2NhbGxGcmFtZSk7CisgICAgICAgIGlmICghbV9pc1Rlcm1p
bmF0aW9uKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2sgJiYgIWlzV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgICAgICAgICAg
ICAgbV9oYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9oYW5kbGVy
ID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uICYm
IG1faGFuZGxlcikKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKLSAg
ICAgICAgICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRv
cik7CisgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWVVbndpbmRpbmcgPSB1bndpbmRDYWxsRnJh
bWUodmlzaXRvcik7CisgICAgICAgIGlmICghc2hvdWxkQ29udGludWVVbndpbmRpbmcpIHsKKyAg
ICAgICAgICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmls
ZXIoKSkKKyAgICAgICAgICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKG1fY2FsbEZy
YW1lKTsKKworICAgICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVy
KHZpc2l0b3IpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpEb25lOworICAgICAgICB9CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUNh
bGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwogCkBAIC03MzEsMTEgKzc0MCwyMiBAQCBORVZFUl9J
TkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAKICAgICBBU1NFUlQodm0uZXhjZXB0
aW9uKCkgJiYgdm0uZXhjZXB0aW9uKCktPnN0YWNrKCkuc2l6ZSgpKTsKIAorICAgIC8vIENhbGN1
bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBhcyBu
ZWNlc3NhcnkuCisgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBudWxscHRyOworICAgIGlzVGVy
bWluYXRpb24gPSBmYWxzZTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1lLCBp
c1Rlcm1pbmF0aW9uLCBjb2RlQmxvY2ssIGhhbmRsZXIpOworICAgIGNhbGxGcmFtZS0+aXRlcmF0
ZShmdW5jdG9yKTsKKyAgICBpZiAoIWhhbmRsZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIGhhbmRsZXI7Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVn
Z2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFeGNlcHRpb24q
IGV4Y2VwdGlvbikKK3sKKyAgICBib29sIGlzVGVybWluYXRpb24gPSBpc1Rlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKTsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxs
RnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoZGVidWdn
ZXIgJiYgZGVidWdnZXItPm5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+
ZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2xl
YXIgdGhlIGV4Y2VwdGlvbiBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24g
aGFwcGVucy4KLSAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sg
dG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgotICAgICAgICBTdXNwZW5kRXhjZXB0
aW9uU2NvcGUgc2NvcGUoJnZtKTsKICAgICAgICAgLy8gVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBp
ZiB0aGUgZGVidWdnZXIgaXMgZW5hYmxlZCB0aGVuIHRoZXJlIGlzIG5vIGlubGluaW5nLgogICAg
ICAgICAvLyBJZiB0aGF0IGFzc3VtcHRpb24gdHVybnMgb3V0IHRvIGJlIGZhbHNlIHRoZW4gd2Un
bGwgaWdub3JlIHRoZSBpbmxpbmVkIGNhbGwKICAgICAgICAgLy8gZnJhbWVzLgpAQCAtNzUyLDIy
ICs3NzIsOSBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAg
ICAgICAgICBoYXNDYXRjaEhhbmRsZXIgPSAhIWhhbmRsZXI7CiAgICAgICAgIH0KIAotICAgICAg
ICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGhhc0NhdGNo
SGFuZGxlcik7Ci0gICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb24tPnZhbHVlKCks
IGhhc0NhdGNoSGFuZGxlcik7CiAgICAgfQogICAgIGV4Y2VwdGlvbi0+c2V0RGlkTm90aWZ5SW5z
cGVjdG9yT2ZUaHJvdygpOwotCi0gICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVy
IHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLSAgICBIYW5kbGVySW5m
byogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKGNhbGxGcmFt
ZSwgaXNUZXJtaW5hdGlvbiwgY29kZUJsb2NrLCBoYW5kbGVyKTsKLSAgICBjYWxsRnJhbWUtPml0
ZXJhdGUoZnVuY3Rvcik7Ci0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmls
ZXIoKSkKLSAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxsRnJhbWUpOwotCi0g
ICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBjaGVja2VkUmV0
dXJuKEpTVmFsdWUgcmV0dXJuVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNiw3ICsxMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICB+
U3VzcGVuZEV4Y2VwdGlvblNjb3BlKCkKICAgICAgICAgewotICAgICAgICAgICAgbV92bS0+c2V0
RXhjZXB0aW9uKG9sZEV4Y2VwdGlvbik7CisgICAgICAgICAgICBtX3ZtLT5yZXN0b3JlUHJldmlv
dXNFeGNlcHRpb24ob2xkRXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgIHByaXZhdGU6CiAgICAg
ICAgIEV4Y2VwdGlvbiogb2xkRXhjZXB0aW9uOwpAQCAtMjI2LDYgKzIyNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBs
ZXIuZ2V0KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChW
TSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qLCBVbndpbmRTdGFydCk7CisgICAgICAgIHZvaWQg
bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oQ2FsbEZyYW1lKiwgRXhjZXB0aW9u
Kik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVnSG9v
a0lEKTsKICAgICAgICAgSlNTdHJpbmcqIHN0YWNrVHJhY2VBc1N0cmluZyhFeGVjU3RhdGUqLCBW
ZWN0b3I8U3RhY2tGcmFtZT4pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc3Niw2ICs3NzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FWlN5bXRhYkosIGlu
dCwgU3ltYm9sVGFibGUqLCBSZWdpc3RlcklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FWlN5bXRhYkosIGludCwgU3ltYm9sVGFi
bGUqLCBSZWdpc3RlcklEKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FSiwgUmVnaXN0ZXJJRCk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKFpfSklUT3BlcmF0aW9uX0Up
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKFZfSklUT3BlcmF0aW9uX0VKLCBSZWdpc3RlcklEKTsK
ICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNp
b24gMTg5ODE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsMTMgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjpjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhaX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlv
bikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgIHVwZGF0ZVRvcENhbGxG
cmFtZSgpOworICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7Cit9CisKIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0Ugb3BlcmF0aW9uKQogewogICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZp
c2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxMCw2ICs4MTAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFu
ZE5vdGlmeVByb2ZpbGVyKTsKKyAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KCk7CisgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKKworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOworCiAgICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRp
b24gcmV0dXJuZWQgYnkgb3BlcmF0aW9uVGhyb3cuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKIAogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlv
bklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcik7CisgICAgSnVtcCBpc0NhdGNoYWJsZUV4
Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcigpOworICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7
CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg5ODE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEz
NSw2ICsyMTM1LDIyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVAK
ICAgICBleGVjLT52bSgpLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJ
SUxpdGVyYWwoIkxvZyBGdWxsLCBjYWxsZWQgZnJvbSBpbnNpZGUgYmFzZWxpbmUgSklUIikpOwog
fQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5j
YXRjaGFibGVBbmROb3RpZnlQcm9maWxlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgUkVMRUFTRV9BU1NFUlQoISF2bS5leGNlcHRpb24oKSk7CisKKyAgICBpZiAoTGVn
YWN5UHJvZmlsZXIqIHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgIHBy
b2ZpbGVyLT5leGNlcHRpb25VbndpbmQoZXhlYyk7CisKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBnZW5lcmljVW53aW5k
KCZ2bSwgZXhlYyk7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1
cm4gMDsKK30KKwogfSAvLyBleHRlcm4gIkMiCiAKIC8vIE5vdGU6IGdldEhvc3RDYWxsUmV0dXJu
VmFsdWVXaXRoRXhlY1N0YXRlKCkgbmVlZHMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODk4
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25J
bml0R2xvYmFsQ28KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enoo
RXhlY1N0YXRlKik7CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lmRXhj
ZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKEV4ZWNTdGF0ZSopOworCiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCBKU0NlbGwqLCBp
bnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1l
cmF0b3IoRXhlY1N0YXRlKiwgSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NTQsNiArMTQ1NCwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X3RvX3NjCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9jaGVja19pZl9leGNlcHRpb25faXNfdW5jYXRjaGFibGVfYW5kX25vdGlmeV9wcm9maWxl
cikKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIFJFTEVBU0VfQVNTRVJUKCEhdm0uZXhjZXB0
aW9uKCkpOworCisgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQ
cm9maWxlcigpKQorICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKGV4ZWMpOworCisg
ICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bS5leGNlcHRpb24oKSkpIHsK
KyAgICAgICAgZ2VuZXJpY1Vud2luZCgmdm0sIGV4ZWMpOworICAgICAgICBwYyA9IHJldHVyblRv
VGhyb3coZXhlYyk7CisgICAgICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSkpOworICAgIH0KKyAgICBMTElOVF9SRVRV
Uk5fVFdPKHBjLCAwKTsKK30KKwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
dGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9G
cmFtZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB2bS0+dG9wQ2FsbEZyYW1lOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9u
IDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9wcgogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9oYW5kbGVfZXhjZXB0aW9uKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfZ2V0X2Zyb21fc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9wdXRfdG9fc2NvcGUpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
aGVja19pZl9leGNlcHRpb25faXNfdW5jYXRjaGFibGVfYW5kX25vdGlmeV9wcm9maWxlcik7CiBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19l
cnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwogI2lmICFFTkFCTEUoSklU
KQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1f
ZW50cnkoVk0qLCBSZWdpc3RlciopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTg0MCw2ICsxODQwLDE2
IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkK
IAogICAgIGxvYWRpIFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3dbdDNdLCBQQworCisg
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY2hlY2tfaWZfZXhjZXB0aW9uX2lzX3Vu
Y2F0Y2hhYmxlX2FuZF9ub3RpZnlfcHJvZmlsZXIpCisgICAgYnBlcSByMSwgMCwgLmlzQ2F0Y2hh
YmxlRXhjZXB0aW9uCisgICAgZGlzcGF0Y2goMCkgIyBnbyB0byBleGNlcHRpb24gaGFuZGxlciBi
ZWNhdXNlIHRoaXMgaXMgYSB0ZXJtaW5hdGluZyBleGNlcHRpb24uCisKKy5pc0NhdGNoYWJsZUV4
Y2VwdGlvbjoKKyAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCisgICAg
YW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1Nl
dCArIFdlYWtTZXQ6Om1fdm1bdDNdLCB0MworCiAgICAgbG9hZGkgVk06Om1fZXhjZXB0aW9uW3Qz
XSwgdDAKICAgICBzdG9yZWkgMCwgVk06Om1fZXhjZXB0aW9uW3QzXQogICAgIGxvYWRpIDRbUENd
LCB0MgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMxLDYgKzE3MzEsMTUgQEAgX2xsaW50X29wX2NhdGNoOgogICAgIHN1YnAgUEIsIFBDCiAg
ICAgcnNoaWZ0cCAzLCBQQwogCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY2hl
Y2tfaWZfZXhjZXB0aW9uX2lzX3VuY2F0Y2hhYmxlX2FuZF9ub3RpZnlfcHJvZmlsZXIpCisgICAg
YnBlcSByMSwgMCwgLmlzQ2F0Y2hhYmxlRXhjZXB0aW9uCisgICAgZGlzcGF0Y2goMCkgIyBnbyB0
byBleGNlcHRpb24gaGFuZGxlciBiZWNhdXNlIHRoaXMgaXMgYSB0ZXJtaW5hdGluZyBleGNlcHRp
b24uCisKKy5pc0NhdGNoYWJsZUV4Y2VwdGlvbjoKKyAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMK
KyAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV93
ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCisKICAgICBsb2FkcSBWTTo6bV9leGNlcHRp
b25bdDNdLCB0MAogICAgIHN0b3JlcSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCiAgICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDEsIHQyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0
aW9uRXhjZXAKIAogYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oRXhjZXB0aW9u
KiBleGNlcHRpb24pCiB7CisgICAgaWYgKCFleGNlcHRpb24tPnZhbHVlKCkuaXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGV4Y2VwdGlvbi0+dmFsdWUoKS5p
bmhlcml0cyhUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmluZm8oKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4OTgxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM0LDgg
KzUzNCwxMSBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
ICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcihleGVjKSwgIiBmb3IgY29k
ZSBibG9jayAiLCAqZXhlYy0+Y29kZUJsb2NrKCksICJcbiIpOwogICAgICAgICBDUkFTSCgpOwog
ICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChleGVjID09IHRvcENhbGxGcmFtZSB8fCBleGVjID09
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpIHx8IGV4ZWMgPT0gZXhl
Yy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOworCisgICAgaW50ZXJwcmV0
ZXItPm5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKGV4ZWMsIGV4Y2VwdGlvbik7
CisKICAgICBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsMTUgKzQwMiwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRhcmdldE1hY2hpbmVQQ0Zv
clRocm93KTsKICAgICB9CiAKKyAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQorCiAgICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBj
bGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAotICAg
IHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKQotICAgIHsKLSAgICAgICAg
bV9leGNlcHRpb24gPSBleGNlcHRpb247Ci0gICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9IGV4Y2Vw
dGlvbjsKLSAgICB9Ci0KICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCkBAIC01ODks
NiArNTg1LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVN0YWNrTGltaXQoKTsKIAor
ICAgIHZvaWQgc2V0RXhjZXB0aW9uKEV4Y2VwdGlvbiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAg
ICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9IGV4
Y2VwdGlvbjsKKyAgICB9CisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wgbV9jYW5V
c2VBc3NlbWJsZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTg5MykKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE1LTA5LTE2ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVycHJldGVyOjp1bndpbmQoKSBzaG91bGRuJ3QgYmUgcmVzcG9uc2libGUgZm9yIGZpbHRl
cmluZyBvdXQgdW5jYXRjaGFibGUgZXhjZXB0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkg
Y3VycmVudCB0ZXN0cy4gVGhpcyBpcyBub3QgYW4gb2JzZXJ2YWJsZSBiZWhhdmlvciBjaGFuZ2Uu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKwogMjAxNS0wOS0xNiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEVsZW1lbnQncyBhdHRyaWJ1
dGUgTlMgQVBJIHNob3VsZCBkZWZpbmVkIHRyZWF0IHVuZGVmaW5lZCBuYW1lc3BhY2UgYXMgbnVs
bApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAxODk4MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBA
IHVpbnQxNl90IEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShOb2RlKiAKICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJh
Y2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJh
Y2NlcHROb2RlIiksIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRp
b24pIHsKICAgICAgICAgLy8gUmV0aHJvdyBleGNlcHRpb24uCi0gICAgICAgIGV4ZWMtPnZtKCku
c2V0RXhjZXB0aW9uKHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAgZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAKICAgICAgICAgcmV0dXJuIE5v
ZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAgICAgfQo=
</data>
<flag name="review"
          id="286561"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>