<?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>139533</bug_id>
          
          <creation_ts>2014-12-11 00:10:04 -0800</creation_ts>
          <short_desc>REGRESSION: Use of undefined CallFrame::ScopeChain value</short_desc>
          <delta_ts>2014-12-11 18:50:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>clopez</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1054436</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 00:10:04 -0800</bug_when>
    <thetext>The CallFrame ScopeChain slot is still being read and written, even though the JSScope* value is now being stored in an allocated register.  When the DFG inlines functions and then one of those inlined functions OSR exits, the ScopeChain slots for the callee&apos;s that were inlined will contain whatever values are in memory.  The memory for the ScopeChain slots will contain values from the registers allocated by the DFG for the main and inlined functions.

The problem is that there is some other residual code elsewhere that assumes that the scope slot of the header contains valid and appropriate JSScope* values.  Currently the main code paths that read and write the ScopeChain slot in the CallFrame header and the code paths for making calls.  They are still copying from the caller’s scope slot to the callee’s scope slot.  The DFG doesn’t know anything special about the scope slots.

The fix is to eliminate all the vestige code that reads / writes the old scope slot in the header and then get rid of the space in the header.

&lt;rdar://problem/19194440&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054440</commentid>
    <comment_count>1</comment_count>
      <attachid>243109</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 01:06:11 -0800</bug_when>
    <thetext>Created attachment 243109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054484</commentid>
    <comment_count>2</comment_count>
      <attachid>243109</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-11 06:50:53 -0800</bug_when>
    <thetext>Comment on attachment 243109
Patch

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

r=me with suggested cleanup in ChangeLog and CallFrame.h.

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        Removed CallFrame::scope() and CallFrame::setScope() and eliminated or changed
&gt; +        all usages of these funcitons.  In some cases the scope is passed in or determined
&gt; +        another way.  In some cases the scope is used to calculate other values.  Lastly
&gt; +        were places where these functions where used that are no longer needed.  For
&gt; +        example when making a call, the caller&apos;s ScopeChain was copied to the callee&apos;s
&gt; +        ScopeChain.

I think it’s implicitly stated here, but can you please say it explicitly that though you are removing the CallFrame scope getter/setter functions:
1. the ScopeChain slot still exists in the CallFrame
2. it just won’t be used anymore
3. it’ll be removed later

Did I understand this correctly?

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:191
&gt; +        ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, JSScope*,

Why not remove the JSScope* arg altogether?

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:905
&gt; +    callOperation(operationCreateActivation, regT0, 0);

It seems wrong to me that we always pass a literal constant 0 for the offset of activation register.  Either:
1. it is contractually fixed to be constant 0 and we don’t need to pass it, or
2. we should “compute” the value.

But I understand that this is pre-existing code, and can be cleaned up in a separate patch.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:676
&gt; +    callOperation(operationCreateActivation, regT0, 0);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054487</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 07:44:02 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 243109 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243109&amp;action=review
&gt; 
&gt; r=me with suggested cleanup in ChangeLog and CallFrame.h.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:13
&gt; &gt; +        Removed CallFrame::scope() and CallFrame::setScope() and eliminated or changed
&gt; &gt; +        all usages of these funcitons.  In some cases the scope is passed in or determined
&gt; &gt; +        another way.  In some cases the scope is used to calculate other values.  Lastly
&gt; &gt; +        were places where these functions where used that are no longer needed.  For
&gt; &gt; +        example when making a call, the caller&apos;s ScopeChain was copied to the callee&apos;s
&gt; &gt; +        ScopeChain.
&gt; 
&gt; I think it’s implicitly stated here, but can you please say it explicitly
&gt; that though you are removing the CallFrame scope getter/setter functions:
&gt; 1. the ScopeChain slot still exists in the CallFrame
&gt; 2. it just won’t be used anymore
&gt; 3. it’ll be removed later
&gt; 
&gt; Did I understand this correctly?

You understand correctly and I&apos;ll add appropriate comments to the ChangeLog.

&gt; &gt; Source/JavaScriptCore/interpreter/CallFrame.h:191
&gt; &gt; +        ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, JSScope*,
&gt; 
&gt; Why not remove the JSScope* arg altogether?

Will do.

&gt; &gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:905
&gt; &gt; +    callOperation(operationCreateActivation, regT0, 0);
&gt; 
&gt; It seems wrong to me that we always pass a literal constant 0 for the offset
&gt; of activation register.  Either:
&gt; 1. it is contractually fixed to be constant 0 and we don’t need to pass it,
&gt; or
&gt; 2. we should “compute” the value.
&gt; 
&gt; But I understand that this is pre-existing code, and can be cleaned up in a
&gt; separate patch.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:676
&gt; &gt; +    callOperation(operationCreateActivation, regT0, 0);
&gt; 
&gt; Ditto.

The literal 0 in these two locations are existing.  The DFG computes a value, but the baseline always uses 0.  This appears to be by design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054489</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 07:52:49 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; &gt; &gt; Source/JavaScriptCore/interpreter/CallFrame.h:191
&gt; &gt; &gt; +        ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, JSScope*,
&gt; &gt; 
&gt; &gt; Why not remove the JSScope* arg altogether?

init() was dead code, so I deleted the whole function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054494</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 08:40:52 -0800</bug_when>
    <thetext>Committed r177146: &lt;http://trac.webkit.org/changeset/177146&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054510</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-12-11 09:08:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Committed r177146: &lt;http://trac.webkit.org/changeset/177146&gt;

This has broken the GTK and EFL builds: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Build%29/builds/53500/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054511</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-11 09:11:58 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; init() was dead code, so I deleted the whole function.

init() is still in use buy JSGlobalObject.cpp to create the globalExec.  This broke the build.  I restored CallFrame::init() minus the JSScope* arg, and also removed the arg from the caller.

Build fix landed in r177149: &lt;http://trac.webkit.org/r177149&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054529</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-12-11 09:40:36 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; init() was dead code, so I deleted the whole function.
&gt; 
&gt; init() is still in use buy JSGlobalObject.cpp to create the globalExec. 
&gt; This broke the build.  I restored CallFrame::init() minus the JSScope* arg,
&gt; and also removed the arg from the caller.
&gt; 
&gt; Build fix landed in r177149: &lt;http://trac.webkit.org/r177149&gt;.

Worked :) Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054530</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 09:42:02 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; init() was dead code, so I deleted the whole function.
&gt; 
&gt; init() is still in use buy JSGlobalObject.cpp to create the globalExec. 
&gt; This broke the build.  I restored CallFrame::init() minus the JSScope* arg,
&gt; and also removed the arg from the caller.
&gt; 
&gt; Build fix landed in r177149: &lt;http://trac.webkit.org/r177149&gt;.

Thanks.  My bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054619</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-11 14:23:40 -0800</bug_when>
    <thetext>This patch really should not have been r+ed without a regression test. Michael, please write a regression test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054742</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-12-11 18:50:27 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; This patch really should not have been r+ed without a regression test.
&gt; Michael, please write a regression test.

To follow up, Michael has added the regression test in http://trac.webkit.org/changeset/177203.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243109</attachid>
            <date>2014-12-11 01:06:11 -0800</date>
            <delta_ts>2014-12-11 06:50:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>139533.patch</filename>
            <type>text/plain</type>
            <size>29153</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3MTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE0LTEyLTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFJFR1JFU1NJT046IFVzZSBvZiB1bmRlZmluZWQgQ2FsbEZyYW1lOjpTY29wZUNoYWluIHZh
bHVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk1
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmVkIENhbGxGcmFtZTo6c2NvcGUoKSBhbmQgQ2FsbEZyYW1lOjpzZXRTY29wZSgpIGFuZCBlbGlt
aW5hdGVkIG9yIGNoYW5nZWQKKyAgICAgICAgYWxsIHVzYWdlcyBvZiB0aGVzZSBmdW5jaXRvbnMu
ICBJbiBzb21lIGNhc2VzIHRoZSBzY29wZSBpcyBwYXNzZWQgaW4gb3IgZGV0ZXJtaW5lZAorICAg
ICAgICBhbm90aGVyIHdheS4gIEluIHNvbWUgY2FzZXMgdGhlIHNjb3BlIGlzIHVzZWQgdG8gY2Fs
Y3VsYXRlIG90aGVyIHZhbHVlcy4gIExhc3RseQorICAgICAgICB3ZXJlIHBsYWNlcyB3aGVyZSB0
aGVzZSBmdW5jdGlvbnMgd2hlcmUgdXNlZCB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkLiAgRm9y
CisgICAgICAgIGV4YW1wbGUgd2hlbiBtYWtpbmcgYSBjYWxsLCB0aGUgY2FsbGVyJ3MgU2NvcGVD
aGFpbiB3YXMgY29waWVkIHRvIHRoZSBjYWxsZWUncworICAgICAgICBTY29wZUNoYWluLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pT
TGV4aWNhbEVudmlyb25tZW50Lmg6CisgICAgICAgIChKU0M6OkpTTGV4aWNhbEVudmlyb25tZW50
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2Fs
RW52aXJvbm1lbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0
ZV9sZXhpY2FsX2Vudmlyb25tZW50KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6
CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxM
SW50OjpzZXRVcENhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdGhyb3dfc3RhY2tf
b3ZlcmZsb3dfZXJyb3IpOgorICAgICAgICBQYXNzIHRoZSBjdXJyZW50IHNjb3BlIHZhbHVlIHRv
IHRoZSBoZWxwZXIgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbigpIGFuZAorICAgICAgICB0aGUg
Y2FsbCB0byBKU0xleGljYWxFbnZpcm9ubWVudDo6Y3JlYXRlKCkgaW5zdGVhZCBvZiB1c2luZyB0
aGUgc3RhY2sgZnJhbWUKKyAgICAgICAgc2NvcGUgY2hhaW4gdmFsdWUuCisKKyAgICAgICAgKiBk
ZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4
dXBOb2RlKToKKyAgICAgICAgQ3JlYXRlQWN0aXZhdGlvbiBub3cgaGFzIGEgc2Vjb25kIGNoaWxk
LCB0aGUgc2NvcGUuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAg
ICAgKEpTQzo6RXhlY1N0YXRlOjppbml0KTogUmVtb3ZlZCBwYXJhbWV0ZXIgbmFtZWQgc2NvcGUg
d2hpY2ggaXMgbm93IG5vdCB1c2VkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnNjb3BlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRTY29wZSk6IERlbGV0ZWQuCisK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKTogQ2hhbmdlZCBzbyB3ZSBkaWRuJ3QgYWNjZXNzIHRo
ZSBzY29wZQorICAgICAgICBjaGFpbiBzbG90LiAgCisgICAgICAgIAorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAg
ICAgICAgQ2hhbmdlZCBwcm9jZXNzIHRvIGZpbmQgSlNTY29wZSB2YWx1ZXMgb24gdGhlIHN0YWNr
IG9yIGJ5IHNvbWUgb3RoZXIgbWVhbnMuCisKKyAgICAgICAgKiBydW50aW1lL0pTV2l0aFNjb3Bl
Lmg6CisgICAgICAgIChKU0M6OkpTV2l0aFNjb3BlOjpKU1dpdGhTY29wZSk6IERlbGV0ZWQuCisg
ICAgICAgIEVsaW1pbmF0ZWQgdW51c2VkIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OlN0cmljdEV2YWxBY3Rp
dmF0aW9uOjpTdHJpY3RFdmFsQWN0aXZhdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJpY3RF
dmFsQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgQ2hhbmdlZCB0byBwYXNzIGluIHRoZSBjdXJyZW50IHNjb3BlLgorCiAy
MDE0LTEyLTEwICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgVXNlIHN0ZDo6dW5pcXVlX3B0ciBpbnN0ZWFkIG9mIE93blB0ciBpbiBKU0MgLSBoZWFw
LCBqaXQsIHJ1bnRpbWUsIGFuZCBwYXJzZXIgZGlyZWN0b3JpZXMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzcw
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzM5OCw3ICszMzk4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewotICAgICAgICAgICAgTm9kZSogbGV4
aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVBY3RpdmF0aW9uLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAg
ICBOb2RlKiBsZXhpY2FsRW52aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24s
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CiAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpLCBsZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgbGV4aWNhbEVudmlyb25tZW50
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTc3MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3Miw2ICsxMTcyLDggQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246CiAgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246IHsKICAgICAgICAgICAgIGZpeEVkZ2U8
Q2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjE2LDcg
KzEyMTgsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzTnVtYmVyOgogICAgICAgICBjYXNl
IElzT2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgICAgIGNhc2UgQ3JlYXRl
QWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIGNhc2Ug
UGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNzcwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgwLDkgKzQxODAs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2Ug
Q3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJl
ZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgcmVzdWx0R1BS
LCBmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoKSk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbiwgcmVzdWx0R1BSLCBzY29w
ZUdQUiwgZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKCkpOwogICAg
ICAgICAKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc3MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI0Myw5ICs0MjQz
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0g
c2NvcGUuZ3ByKCk7CisKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIsIGZyYW1lUG9pbnRl
ck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBmcmFtZVBv
aW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoKSk7CiAKICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3NzAyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwNCw2ICsxMjA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpzY1og
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW0zMihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTc3MDI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiAr
NDUsNiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIHRoaXNbSlNTdGFjazo6Q2FsbGVlXS5qc1ZhbHVlKCk7IH0KICAgICAg
ICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbSlNTdGFjazo6Q2FsbGVl
XS5mdW5jdGlvbigpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gdGhpc1tKU1N0YWNrOjpDb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQot
ICAgICAgICBKU1Njb3BlKiBzY29wZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0aGlzW0pTU3RhY2s6OlNjb3BlQ2hhaW5dLlJlZ2lzdGVyOjpzY29wZSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzW0pTU3RhY2s6OlNjb3BlQ2hhaW5dLlJlZ2lzdGVyOjpzY29wZSgp
OwotICAgICAgICB9Ci0KICAgICAgICAgSlNTY29wZSogc2NvcGUoaW50IHNjb3BlUmVnaXN0ZXJP
ZmZzZXQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh0aGlzW3Njb3BlUmVn
aXN0ZXJPZmZzZXRdLlJlZ2lzdGVyOjpzY29wZSgpKTsKQEAgLTE5MSwxNyArMTg1LDE1IEBAIG5h
bWVzcGFjZSBKU0MgIHsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0Q2FsbGVyRnJhbWUoQ2Fs
bEZyYW1lKiBmcmFtZSkgeyBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWUgPSBmcmFtZTsg
fQotICAgICAgICB2b2lkIHNldFNjb3BlKEpTU2NvcGUqIHNjb3BlKSB7IHN0YXRpY19jYXN0PFJl
Z2lzdGVyKj4odGhpcylbSlNTdGFjazo6U2NvcGVDaGFpbl0gPSBzY29wZTsgfQogICAgICAgICB2
b2lkIHNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3BlKiBzY29wZSkgeyBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3Njb3BlUmVnaXN0ZXJPZmZzZXRdID0gc2NvcGU7
IH0KICAgICAgICAgdm9pZCBzZXRBY3RpdmF0aW9uKEpTTGV4aWNhbEVudmlyb25tZW50Kik7CiAK
LSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
c3RydWN0aW9uKiB2UEMsIEpTU2NvcGUqIHNjb3BlLAorICAgICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgaW5pdChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNTY29wZSos
CiAgICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBpbnQgYXJnYywgSlNPYmplY3Qq
IGNhbGxlZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1lID09IG5v
Q2FsbGVyKCkgfHwgY2FsbGVyRnJhbWUtPnN0YWNrKCktPmNvbnRhaW5zQWRkcmVzcyh0aGlzKSk7
CiAKICAgICAgICAgICAgIHNldENvZGVCbG9jayhjb2RlQmxvY2spOwotICAgICAgICAgICAgc2V0
U2NvcGUoc2NvcGUpOwogICAgICAgICAgICAgc2V0Q2FsbGVyRnJhbWUoY2FsbGVyRnJhbWUpOwog
ICAgICAgICAgICAgc2V0UmV0dXJuUEModlBDKTsgLy8gVGhpcyBpcyBlaXRoZXIgYW4gSW5zdHJ1
Y3Rpb24qIG9yIGEgcG9pbnRlciBpbnRvIEpJVCBnZW5lcmF0ZWQgY29kZSBzdG9yZWQgYXMgYW4g
SW5zdHJ1Y3Rpb24qLgogICAgICAgICAgICAgc2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
YXJnYyk7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50IChmb3IgdGhlIHNha2Ugb2YgdGhlICJh
cmd1bWVudHMiIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTc3MDI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmR1bXBSZWdpc3RlcnMoQ2FsbEZy
YW0KICAgICAtLWl0OwogICAgIGRhdGFMb2dGKCJbQ2FsbGVlXSAgICAgICAgICAgICAgICAgICB8
ICUxMHAgfCAlcCBcbiIsIGl0LCBjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAgICAtLWl0OwotICAg
IGRhdGFMb2dGKCJbU2NvcGVDaGFpbl0gICAgICAgICAgICAgICB8ICUxMHAgfCAlcCBcbiIsIGl0
LCBjYWxsRnJhbWUtPnNjb3BlKCkpOworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5leHQgZGVj
cmVtZW50IHdoZW4gdGhlIFNjb3BlQ2hhaW4gc2xvdCBpcyByZW1vdmVkIGZyb20gdGhlIGNhbGwg
aGVhZGVyCiAgICAgLS1pdDsKICNpZiBFTkFCTEUoSklUKQogICAgIEFic3RyYWN0UEMgcGMgPSBj
YWxsRnJhbWUtPmFic3RyYWN0UmV0dXJuUEMoY2FsbEZyYW1lLT52bSgpKTsKQEAgLTc2Nyw4ICs3
NjcsOCBAQCBwcml2YXRlOgogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhl
Y3V0YWJsZSogcHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2Jq
KQogewogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKLSAgICAKLSAgICBK
U1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKKworICAgIEpTU2NvcGUqIHNjb3Bl
ID0gdGhpc09iai0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwog
CiAgICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CkBAIC05MjksMTggKzkyOSwyMSBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKIAogICAgIGJvb2wgaXNKU0NhbGwgPSAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7Ci0g
ICAgSlNTY29wZSogc2NvcGU7CisgICAgSlNTY29wZSogc2NvcGUgPSBudWxscHRyOwogICAgIENv
ZGVCbG9jayogbmV3Q29kZUJsb2NrOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSAxICsgYXJncy5z
aXplKCk7IC8vIGltcGxpY2l0ICJ0aGlzIiBwYXJhbWV0ZXIKIAotICAgIGlmIChpc0pTQ2FsbCkK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0OworCisgICAgaWYgKGlzSlNDYWxsKSB7
CiAgICAgICAgIHNjb3BlID0gY2FsbERhdGEuanMuc2NvcGU7Ci0gICAgZWxzZSB7CisgICAgICAg
IGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKKyAgICB9IGVsc2UgewogICAg
ICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KTsKLSAgICAgICAgc2NvcGUgPSBj
YWxsRnJhbWUtPnNjb3BlKCk7CisgICAgICAgIGdsb2JhbE9iamVjdCA9IGZ1bmN0aW9uLT5nbG9i
YWxPYmplY3QoKTsKICAgICB9CiAKLSAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgc2Nv
cGUtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xv
YmFsT2JqZWN0KTsKICAgICBpZiAoIXZtLmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIApA
QCAtOTk3LDE4ICsxMDAwLDIxIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0
cnVjdCgKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJy
b3IoY2FsbEZyYW1lKSk7CiAKICAgICBib29sIGlzSlNDb25zdHJ1Y3QgPSAoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwotICAgIEpTU2NvcGUqIHNjb3BlOworICAgIEpTU2NvcGUq
IHNjb3BlID0gbnVsbHB0cjsKICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jazsKICAgICBzaXpl
X3QgYXJnc0NvdW50ID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAidGhpcyIgcGFyYW1l
dGVyCiAKLSAgICBpZiAoaXNKU0NvbnN0cnVjdCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0OworCisgICAgaWYgKGlzSlNDb25zdHJ1Y3QpIHsKICAgICAgICAgc2NvcGUgPSBjb25z
dHJ1Y3REYXRhLmpzLnNjb3BlOwotICAgIGVsc2UgeworICAgICAgICBnbG9iYWxPYmplY3QgPSBz
Y29wZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGNvbnN0
cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpOwotICAgICAgICBzY29wZSA9IGNhbGxGcmFt
ZS0+c2NvcGUoKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpOwogICAgIH0KIAotICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBzY29wZS0+
Z2xvYmFsT2JqZWN0KCkpOworICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxP
YmplY3QpOwogICAgIGlmICghdm0uaXNTYWZlVG9SZWN1cnNlKCkpCiAgICAgICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCkBAIC0x
MTM4LDcgKzExNDQsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRh
CiAKICAgICBKU1Njb3BlKiB2YXJpYWJsZU9iamVjdDsKICAgICBpZiAoKG51bVZhcmlhYmxlcyB8
fCBudW1GdW5jdGlvbnMpICYmIGV2YWwtPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgIHNjb3Bl
ID0gU3RyaWN0RXZhbEFjdGl2YXRpb246OmNyZWF0ZShjYWxsRnJhbWUpOworICAgICAgICBzY29w
ZSA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAg
ICAgIHZhcmlhYmxlT2JqZWN0ID0gc2NvcGU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChK
U1Njb3BlKiBub2RlID0gc2NvcGU7IDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzcwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTksNiArNjk5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRUpJZGMsIGludCwgR1BSUmVnLCBjb25zdCBJZGVudGlmaWVyKik7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpK
LCBpbnQsIEdQUlJlZywgR1BSUmVnKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSnNjQywgaW50LCBHUFJSZWcsIEpTQ2VsbCopOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9u
X0VKc2NaLCBHUFJSZWcsIGludDMyX3QpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKc2NaLCBpbnQsIEdQUlJlZywgaW50MzJfdCk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihXaXRoUHJvZmlsZVRhZywgSl9KSVRPcGVyYXRpb25fRUpKLCBpbnQsIEdQUlJlZywg
R1BSUmVnKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkocmV2aXNpb24gMTc3MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAsMTIgQEAgQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OgogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKc2NaIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIGludDMyX3QgYXJnMikKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpKTsKKyAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FTyBvcGVyYXRp
b24sIEdQUlJlZyBhcmcpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxNzcwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw3ICs5MDEsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9uCiAgICAgaW50IGxleGljYWxFbnZpcm9ubWVu
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IHNjb3BlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ3JlYXRlQWN0aXZhdGlvbiwgMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNyZWF0ZUFjdGl2YXRpb24sIHJlZ1QwLCAwKTsKICAgICBlbWl0U3RvcmVDZWxsKGxleGljYWxF
bnZpcm9ubWVudCwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRTdG9yZUNlbGwoc2NvcGUsIHJl
dHVyblZhbHVlR1BSKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMTc3MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDcgKzY3Miw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb24KICAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3Rp
dmF0aW9uLCAwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZWdUMCwgMCk7CiAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0U3RvcmVDZWxs
KHNjb3BlLCByZXR1cm5WYWx1ZUdQUik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3NzAzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMywx
MSArNjAzLDExIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKIAog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUq
IGV4ZWMsIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICBBU1NFUlQoZXhlYy0+Y29kZUJs
b2NrKCktPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlCisKKyAgICBBU1NFUlRfVU5VU0VEKGV4
ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZQogICAgICAg
ICB8fCAhZXhlYy0+Y29kZUJsb2NrKCktPm5lZWRzQWN0aXZhdGlvbigpCiAgICAgICAgIHx8IGV4
ZWMtPmhhc0FjdGl2YXRpb24oKSk7CiAKLSAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShleGVjLT5z
Y29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CiAKICAgICBpZiAoIWlz
SG9zdEZ1bmN0aW9uKGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xvYmFsRnVuY0V2YWwp
KQpAQCAtNjI2LDcgKzYyNiw2IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3Rh
dGUqIGUKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogCi0gICAgZXhlY0NhbGxlZS0+c2V0U2NvcGUoZXhl
Yy0+c2NvcGUoKSk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogCiAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKQEAgLTY4Nyw3ICs2ODYsNiBAQCBpbmxpbmUgY2hhciog
bGlua0ZvcigKIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29w
ZVVuY2hlY2tlZCgpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKHNjb3BlKTsKICAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CkBAIC02OTcsNyArNjk1LDYgQEAgaW5saW5lIGNo
YXIqIGxpbmtGb3IoCiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUsICZzY29wZSwga2luZCk7Ci0gICAg
ICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKHNjb3BlKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAg
ICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
QEAgLTc1MiwxMiArNzQ5LDEwIEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KAogICAgIAogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2Nv
cGVVbmNoZWNrZWQoKTsKLSAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShzY29wZSk7CiAgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlm
IChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0
aW9uLCAmc2NvcGUsIGtpbmQpOwotICAgICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZShzY29wZSk7
CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBlcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMzk2LDEyICsxMzkxLDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2gKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBvZmZzZXQpCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgaW50MzJfdCBvZmZzZXQpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IEpT
TGV4aWNhbEVudmlyb25tZW50OjpjcmVhdGUodm0sIGV4ZWMsIGV4ZWMtPnJlZ2lzdGVycygpICsg
b2Zmc2V0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgZXhlYy0+c2V0U2NvcGUobGV4aWNhbEVu
dmlyb25tZW50KTsKKyAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50
ID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmNyZWF0ZSh2bSwgZXhlYywgZXhlYy0+cmVnaXN0ZXJz
KCkgKyBvZmZzZXQsIGN1cnJlbnRTY29wZSwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIHJldHVy
biBsZXhpY2FsRW52aXJvbm1lbnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzcwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw3
IEBAIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGUKIHR5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNf
SklUT3BlcmF0aW9uX0VKWkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBK
U0NlbGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25f
RUpKQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwq
KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzY1op
KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0
cnVjdHVyZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlv
bl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CiB0eXBlZGVmIEpT
Q2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwpAQCAtMjkyLDcgKzI5Myw3IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShFeGUKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Qcm9maWxlRGlkQ2FsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2ZpbGVXaWxsQ2Fs
bChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0hhc0luc3RhbmNlKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsKSBXVEZfSU5URVJOQUw7Ci1KU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbihFeGVjU3RhdGUqLCBp
bnQzMl90IG9mZnNldCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFjdGl2YXRpb24oRXhlY1N0YXRlKiwgSlNTY29wZSogY3VycmVudFNjb3BlLCBp
bnQzMl90IG9mZnNldCkgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzRHVyaW5nT1NSRXhpdChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEFyZ3VtZW50c0xlbmd0aChFeGVjU3RhdGUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDE3NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw3ICsyNTksNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTCh0cmFjZSkKICAgICAgICAgICAgIGV4ZWMsCiAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ocGMgLSBleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSksCiAgICAgICAgICAgICBvcGNvZGVOYW1lc1tleGVjLT52bSgpLmludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSldLAotICAgICAgICAgICAgZXhlYy0+c2NvcGUoKSwg
cGMpOworICAgICAgICAgICAgZXhlYy0+dW5jaGVja2VkUihleGVjLT5jb2RlQmxvY2soKS0+c2Nv
cGVSZWdpc3RlcigpLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKSwgcGMpOwogICAgIGlmIChl
eGVjLT52bSgpLmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSkgPT0gb3Bf
ZW50ZXIpIHsKICAgICAgICAgZGF0YUxvZ0YoIkZyYW1lIHdpbGwgZXZlbnR1YWxseSByZXR1cm4g
dG8gJXBcbiIsIGV4ZWMtPnJldHVyblBDKCkudmFsdWUoKSk7CiAgICAgICAgICpiaXR3aXNlX2Nh
c3Q8dm9sYXRpbGUgY2hhcio+KGV4ZWMtPnJldHVyblBDKCkudmFsdWUoKSk7CkBAIC01MDMsNyAr
NTAzLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZQogI2lmIExM
SU5UX1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGFuIGxleGljYWxF
bnZpcm9ubWVudCwgZXhlYyA9ICVwIVxuIiwgZXhlYyk7CiAjZW5kaWYKLSAgICBKU0xleGljYWxF
bnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50ID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmNy
ZWF0ZSh2bSwgZXhlYywgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIGludCBzY29wZVJlZyA9IHBj
WzJdLnUub3BlcmFuZDsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoc2Nv
cGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBKU0xleGljYWxFbnZpcm9ubWVudDo6Y3JlYXRlKHZtLCBleGVjLCBz
Y29wZSwgZXhlYy0+Y29kZUJsb2NrKCkpOwogICAgIGV4ZWMtPnVuY2hlY2tlZFIocGNbMl0udS5v
cGVyYW5kKSA9IGxleGljYWxFbnZpcm9ubWVudDsKICAgICBMTElOVF9SRVRVUk4oSlNWYWx1ZShs
ZXhpY2FsRW52aXJvbm1lbnQpKTsKIH0KQEAgLTEwMzAsNyArMTAzMiw2IEBAIHN0YXRpYyBTbG93
UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVj
Q2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKLSAgICBl
eGVjQ2FsbGVlLT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKICAgICBleGVjQ2FsbGVlLT5zZXRD
b2RlQmxvY2soMCk7CiAgICAgZXhlY0NhbGxlZS0+Y2xlYXJSZXR1cm5QQygpOwogCkBAIC0xMDk0
LDcgKzEwOTUsNiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAg
ICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7
CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKHNj
b3BlKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJs
ZSgpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwpAQCAtMTEwNCw3
ICsxMTA0LDYgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAg
IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
ZXhlY0NhbGxlZSwgY2FsbGVlLCAmc2NvcGUsIGtpbmQpOwotICAgICAgICBleGVjQ2FsbGVlLT5z
ZXRTY29wZShzY29wZSk7CiAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAgICAgIExMSU5UX0NB
TExfVEhST1coZXhlYywgZXJyb3IpOwogICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKQEAgLTEyMzUsOCArMTIzNCw2IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwKICAgICBleGVjQ2FsbGVlLT5zZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyhwY1szXS51Lm9wZXJhbmQpOwogICAgIGV4ZWNDYWxsZWUt
PnNldENhbGxlckZyYW1lKGV4ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIoSlNTdGFj
azo6Q2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7Ci0gICAgSlNTY29wZSogY2FsbGVyU2NvcGUgPSBl
eGVjLT51bmNoZWNrZWRSKGV4ZWMtPmNvZGVCbG9jaygpLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0
KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGNhbGxlclNj
b3BlKTsKICAgICBleGVjQ2FsbGVlLT5zZXRSZXR1cm5QQyhMTEludDo6Z2V0Q29kZVB0cihsbGlu
dF9nZW5lcmljX3JldHVybl9wb2ludCkpOwogICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygw
KTsKICAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKQEAgLTE0MzMsNyArMTQzMCw3IEBAIGV4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm8KIHsKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAgIGlmICghZXhlYykKLSAgICAgICAgZXhlYyA9
IHByb3RvRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgIGV4ZWMgPSBwcm90b0ZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KDAsIDApOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAxNzcwMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTIgQEAgY2xhc3MgUmVnaXN0ZXI7CiAgICAgCiBjbGFz
cyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU0Vudmlyb25tZW50UmVjb3JkIHsKIHBy
aXZhdGU6Ci0gICAgSlNMZXhpY2FsRW52aXJvbm1lbnQoVk0mLCBDYWxsRnJhbWUqLCBSZWdpc3Rl
ciosIENvZGVCbG9jayopOworICAgIEpTTGV4aWNhbEVudmlyb25tZW50KFZNJiwgQ2FsbEZyYW1l
KiwgUmVnaXN0ZXIqLCBKU1Njb3BlKiwgQ29kZUJsb2NrKik7CiAgICAgCiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Vudmlyb25tZW50UmVjb3JkIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNMZXhpY2Fs
RW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3Rl
ciogcmVnaXN0ZXJzLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBzdGF0aWMgSlNMZXhpY2Fs
RW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3Rl
ciogcmVnaXN0ZXJzLCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIENvZGVCbG9jayogY29kZUJsb2Nr
KQogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5z
eW1ib2xUYWJsZSgpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSk7CkBAIC01NiwxNCArNTYsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IHZtLmhlYXAsCiAgICAgICAgICAgICAgICAgYWxsb2NhdGlvblNpemUoc3ltYm9sVGFibGUpCiAg
ICAgICAgICAgICApCi0gICAgICAgICkgSlNMZXhpY2FsRW52aXJvbm1lbnQodm0sIGNhbGxGcmFt
ZSwgcmVnaXN0ZXJzLCBjb2RlQmxvY2spOworICAgICAgICApIEpTTGV4aWNhbEVudmlyb25tZW50
KHZtLCBjYWxsRnJhbWUsIHJlZ2lzdGVycywgY3VycmVudFNjb3BlLCBjb2RlQmxvY2spOwogICAg
ICAgICBsZXhpY2FsRW52aXJvbm1lbnQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0
dXJuIGxleGljYWxFbnZpcm9ubWVudDsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBKU0xl
eGljYWxFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIHN0YXRpYyBKU0xleGljYWxFbnZpcm9ubWVudCogY3Jl
YXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIGN1cnJlbnRTY29wZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlKHZtLCBj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2RlQmxvY2stPmZyYW1lUG9pbnRl
ck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjb2RlQmxvY2spOworICAgICAgICBy
ZXR1cm4gY3JlYXRlKHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2Rl
QmxvY2stPmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycygpLCBjdXJy
ZW50U2NvcGUsIGNvZGVCbG9jayk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtMTA4LDEyICsxMDgsMTIgQEAgcHJpdmF0
ZToKIGV4dGVybiBpbnQgYWN0aXZhdGlvbkNvdW50OwogZXh0ZXJuIGludCBhbGxUaGVUaGluZ3ND
b3VudDsKIAotaW5saW5lIEpTTGV4aWNhbEVudmlyb25tZW50OjpKU0xleGljYWxFbnZpcm9ubWVu
dChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJzLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBKU0xleGljYWxFbnZpcm9ubWVudDo6SlNMZXhpY2Fs
RW52aXJvbm1lbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lz
dGVycywgSlNTY29wZSogY3VycmVudFNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICA6
IEJhc2UoCiAgICAgICAgIHZtLAogICAgICAgICBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpLAogICAgICAgICByZWdpc3RlcnMsCi0gICAgICAg
IGNhbGxGcmFtZS0+c2NvcGUoKSwKKyAgICAgICAgY3VycmVudFNjb3BlLAogICAgICAgICBjb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCkpCiB7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNXaXRoU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1dpdGhTY29wZS5oCShyZXZpc2lvbiAxNzcwMjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNiAr
NTMsNiBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKLSAg
ICBKU1dpdGhTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCi0gICAgICAg
IDogQmFzZSgKLSAgICAgICAgICAgIGV4ZWMtPnZtKCksCi0gICAgICAgICAgICBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPndpdGhTY29wZVN0cnVjdHVyZSgpLAotICAgICAgICAgICAgZXhl
Yy0+c2NvcGUoKQotICAgICAgICApCi0gICAgICAgICwgbV9vYmplY3QoZXhlYy0+dm0oKSwgdGhp
cywgb2JqZWN0KQotICAgIHsKLSAgICB9Ci0KICAgICBKU1dpdGhTY29wZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTU2NvcGUqIG5leHQpCiAgICAgICAgIDogQmFzZSgKICAg
ICAgICAgICAgIGV4ZWMtPnZtKCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNzcwMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMSBAQCBTVEFUSUNfQVNTRVJUX0lTX1RS
SVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBTdHJpY3RFdmFsQWN0aXZh
dGlvbjo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShTdHJpY3RFdmFsQWN0aXZhdGlvbikgfTsKIAotU3RyaWN0RXZhbEFjdGl2YXRpb246
OlN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK1N0cmljdEV2YWxBY3RpdmF0
aW9uOjpTdHJpY3RFdmFsQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIGN1cnJl
bnRTY29wZSkKICAgICA6IEJhc2UoCiAgICAgICAgIGV4ZWMtPnZtKCksCiAgICAgICAgIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUoKSwK
LSAgICAgICAgZXhlYy0+c2NvcGUoKQorICAgICAgICBjdXJyZW50U2NvcGUKICAgICApCiB7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2
YWxBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE3NzAyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkg
KzM0LDkgQEAgY2xhc3MgU3RyaWN0RXZhbEFjdGl2YXRpb24gOiBwdWJsaWMgSlNTYwogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNTY29wZSBCYXNlOwogCi0gICAgc3RhdGljIFN0cmljdEV2YWxBY3Rp
dmF0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgIHN0YXRpYyBTdHJpY3RFdmFsQWN0
aXZhdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogY3VycmVudFNjb3BlKQog
ICAgIHsKLSAgICAgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24qIGxleGljYWxFbnZpcm9ubWVudCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxBY3RpdmF0aW9uPigqZXhlYy0+
aGVhcCgpKSkgU3RyaWN0RXZhbEFjdGl2YXRpb24oZXhlYyk7CisgICAgICAgIFN0cmljdEV2YWxB
Y3RpdmF0aW9uKiBsZXhpY2FsRW52aXJvbm1lbnQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxTdHJpY3RFdmFsQWN0aXZhdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIFN0cmljdEV2YWxBY3RpdmF0
aW9uKGV4ZWMsIGN1cnJlbnRTY29wZSk7CiAgICAgICAgIGxleGljYWxFbnZpcm9ubWVudC0+Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAgICAgICAgIHJldHVybiBsZXhpY2FsRW52aXJvbm1l
bnQ7CiAgICAgfQpAQCAtNTUsNyArNTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgotICAgIFN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNT
dGF0ZSopOworICAgIFN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNTdGF0ZSosIEpTU2NvcGUqKTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>
<flag name="review"
          id="267960"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>