<?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>125470</bug_id>
          
          <creation_ts>2013-12-09 15:29:47 -0800</creation_ts>
          <short_desc>CStack Branch: Fix baseline JIT for basic operation</short_desc>
          <delta_ts>2014-02-13 10:19:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>958110</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-09 15:29:47 -0800</bug_when>
    <thetext>This task is to enable basic JavaScript processing in the baseline JIT engine when running on the C-stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958119</commentid>
    <comment_count>1</comment_count>
      <attachid>218808</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-09 15:43:39 -0800</bug_when>
    <thetext>Created attachment 218808
Patch

With this patch, we can run v8-crypto.js with the baseline JIT enabled (but with the DFG off).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958122</commentid>
    <comment_count>2</comment_count>
      <attachid>218808</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-09 15:55:51 -0800</bug_when>
    <thetext>Comment on attachment 218808
Patch

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

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:243
&gt; -static MacroAssemblerCodeRef nativeForGenerator(VM* vm, CodeSpecializationKind kind)
&gt; +static MacroAssemblerCodeRef nativeForGenerator(VM* vm, CodeSpecializationKind kind, bool fallBack = false)

What&apos;s this fallback thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958198</commentid>
    <comment_count>3</comment_count>
      <attachid>218808</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-09 21:46:08 -0800</bug_when>
    <thetext>Comment on attachment 218808
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Fixed compileOpCall and it&apos;s slow case to properly adjust the stack pointer before

Should be &quot;its&quot;.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        differes from ctiNativeCall() in that it doesn&apos;t emit a funciton prologue, thus 

Should be &quot;function&quot;.

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        allowing the original thunk to jump to the &quot;fallback&quot; thunk.  I&apos;m open to another

I don&apos;t get this. The original thunk did not emit a function prologue. So, who does emit the function prologue when a thunk fails, and needs to call out to C++? Alternatively, if a thunk does not need a function prologue, why does a host function call ever need a function prologue?

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:265
&gt; +    checkStackPointerAlignment(); // &amp;&amp;&amp;&amp;

Why the &amp;&apos;s?

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:781
&gt; +    checkStackPointerAlignment(); // &amp;&amp;&amp;&amp;

Why the &amp;&apos;s?

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:65
&gt; +MacroAssemblerCodePtr JITThunks::ctiNativeCallFallback(VM* vm)

Let&apos;s call this ctiNativeTailCall.

&gt;&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:243
&gt;&gt; +static MacroAssemblerCodeRef nativeForGenerator(VM* vm, CodeSpecializationKind kind, bool fallBack = false)
&gt; 
&gt; What&apos;s this fallback thing?

Instead of &quot;fallback&quot;, let&apos;s call this &quot;shouldEmitFunctionPrologue&quot;, or use a named enum.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:417
&gt; +MacroAssemblerCodeRef nativeCallFallbackGenerator(VM* vm)

Let&apos;s call this nativeTailCallGenerator.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:419
&gt; +    return nativeForGenerator(vm, CodeForCall, true);

You should put this boolean into a named local variable, or change the function&apos;s argument to a named enum. &quot;true&quot; is unreadable in this context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958222</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-09 23:03:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 218808 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218808&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        Fixed compileOpCall and it&apos;s slow case to properly adjust the stack pointer before
&gt; 
&gt; Should be &quot;its&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/ChangeLog:16
&gt; &gt; +        differes from ctiNativeCall() in that it doesn&apos;t emit a funciton prologue, thus 
&gt; 
&gt; Should be &quot;function&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/ChangeLog:17
&gt; &gt; +        allowing the original thunk to jump to the &quot;fallback&quot; thunk.  I&apos;m open to another
&gt; 
&gt; I don&apos;t get this. The original thunk did not emit a function prologue. So, who does emit the function prologue when a thunk fails, and needs to call out to C++? Alternatively, if a thunk does not need a function prologue, why does a host function call ever need a function prologue?

ctiNativeCall() has to emit a function prologue because we create a standard frame for the native call and want it to look like any other call.  In the case of a primary thunk like charCodeAt, they too emit a function prologue in the SpecializedThunkJIT constructor. When the primary thunk needs to call out to C, we could try undoing the prologue.  It seems much more straightforward to just have the first thunk jump to the second host callout thunk that doesn&apos;t have a prologue.
 
&gt; &gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:265
&gt; &gt; +    checkStackPointerAlignment(); // &amp;&amp;&amp;&amp;
&gt; 
&gt; Why the &amp;&apos;s?

As I said in an earlier ChangeLog entry &apos;There are several places where the code is tagged with &quot;&amp;&amp;&amp;&amp; FIXME: ...&quot; comments as placeholders where more work needs to be done.&apos;  This is the main way that I leave markers in the code for things need to be dealt with before I consider them done.  In this place I didn&apos;t include the FIXME as it isn&apos;t my normal practice. When working in my own sandbox, the &amp;&amp;&amp;&amp; and the issues they tag are eliminated (dealt with) before posting a patch for review.  Since this branch has my work in progress, it works best for me if they appear temporarily in the checked in code.  They will all be removed when this work is done.

&gt; &gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:781
&gt; &gt; +    checkStackPointerAlignment(); // &amp;&amp;&amp;&amp;
&gt; 
&gt; Why the &amp;&apos;s?
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITThunks.cpp:65
&gt; &gt; +MacroAssemblerCodePtr JITThunks::ctiNativeCallFallback(VM* vm)
&gt; 
&gt; Let&apos;s call this ctiNativeTailCall.

Fine by me.  I&apos;ll change that as well in another patch.  Tracked in https://bugs.webkit.org/show_bug.cgi?id=125485 - &quot;CStack Branch: ctiNativeCallFallback and friends should renamed ...NativeTailCall&quot;
 
&gt; &gt;&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:243
&gt; &gt;&gt; +static MacroAssemblerCodeRef nativeForGenerator(VM* vm, CodeSpecializationKind kind, bool fallBack = false)
&gt; &gt; 
&gt; &gt; What&apos;s this fallback thing?
&gt; 
&gt; Instead of &quot;fallback&quot;, let&apos;s call this &quot;shouldEmitFunctionPrologue&quot;, or use a named enum.

In &lt;https://bugs.webkit.org/show_bug.cgi?id=125473&gt; I changed it to &quot;enum ThunkEntryType { EnterViaCall, EnterViaJump };&quot;
 
&gt; &gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:417
&gt; &gt; +MacroAssemblerCodeRef nativeCallFallbackGenerator(VM* vm)
&gt; 
&gt; Let&apos;s call this nativeTailCallGenerator.

I&apos;ll change this in another patch.  Also tracked in https://bugs.webkit.org/show_bug.cgi?id=125485.

&gt; &gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:419
&gt; &gt; +    return nativeForGenerator(vm, CodeForCall, true);
&gt; 
&gt; You should put this boolean into a named local variable, or change the function&apos;s argument to a named enum. &quot;true&quot; is unreadable in this context.

See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962014</commentid>
    <comment_count>5</comment_count>
      <attachid>218808</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-20 13:04:38 -0800</bug_when>
    <thetext>Comment on attachment 218808
Patch

I think this ended up landing. Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962033</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-20 13:46:30 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 218808 [details])
&gt; I think this ended up landing. Clearing review flag.

Are you going to update the ChangeLog entry or should I?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980351</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-02-13 10:19:07 -0800</bug_when>
    <thetext>Fix merged back to trunk in r163027.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218808</attachid>
            <date>2013-12-09 15:43:39 -0800</date>
            <delta_ts>2013-12-20 13:04:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>125470.patch</filename>
            <type>text/plain</type>
            <size>22979</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDEzLTEyLTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIENTdGFjayBCcmFuY2g6IEZpeCBiYXNlbGluZSBKSVQgZm9yIGJhc2ljIG9wZXJhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NDcwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZWQgY29t
cGlsZU9wQ2FsbCBhbmQgaXQncyBzbG93IGNhc2UgdG8gcHJvcGVybHkgYWRqdXN0IHRoZSBzdGFj
ayBwb2ludGVyIGJlZm9yZQorICAgICAgICBhbmQgYWZ0ZXIgYSBjYWxsLgorCisgICAgICAgIENs
ZWFuZWQgdXAgdGhlIGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGUgdmFyaW91cyB0aHVua3MuICBB
ZGp1c3RlZCB0aGUgc3RhY2sKKyAgICAgICAgcG9pbnRlciBhdCB0aGUgZW5kIG9mIHRoZSBhcml0
eSBmaXh1cCB0aHVuayB0byBhY2NvdW50IGZvciB0aGUgZnJhbWUgbW92aW5nLgorCisgICAgICAg
IEFkZGVkIGN0aU5hdGl2ZUNhbGxGYWxsYmFjaygpIHRodW5rIGdlbmVyYXRvciBmb3Igd2hlbiBh
bm90aGVyIHRodW5rIHRoYXQgY2FuJ3QKKyAgICAgICAgcGVyZm9ybSBpdHMgb3BlcmF0aW9uIGlu
bGluZSBuZWVkcyB0byBtYWtlIGEgbmF0aXZlIGNhbGwuICBUaGlzIHRodW5rIGdlbmVyYXRvcgor
ICAgICAgICBkaWZmZXJlcyBmcm9tIGN0aU5hdGl2ZUNhbGwoKSBpbiB0aGF0IGl0IGRvZXNuJ3Qg
ZW1pdCBhIGZ1bmNpdG9uIHByb2xvZ3VlLCB0aHVzIAorICAgICAgICBhbGxvd2luZyB0aGUgb3Jp
Z2luYWwgdGh1bmsgdG8ganVtcCB0byB0aGUgImZhbGxiYWNrIiB0aHVuay4gIEknbSBvcGVuIHRv
IGFub3RoZXIKKyAgICAgICAgbmFtZSBiZXNpZGUgImZhbGxiYWNrIi4gIE1heWJlICJjdGlOYXRp
dmVUYWlsQ2FsbCgpIi4KKworICAgICAgICBGaXhlZCB0aGUgT1NSIGVudHJ5IGhhbmRsaW5nIGlu
IHRoZSBMTEludCBwcm9sb2d1ZSBtYWNybyB0byBwcm9wZXJseSBhY2NvdW50CisgICAgICAgIGZv
ciB0aGUgY2FsbGVlIHNhdmluZyB0aGUgY2FsbGVyIGZyYW1lIHBvaW50ZXIuCisKKyAgICAgICAg
QWRkZWQgc3RhY2sgYWxpZ25lbWVudCBjaGVjayBmdW5jdGlvbiBmb3IgdXNlIGluIGRlYnVnIGJ1
aWxkcyB0byBmaW5kIGFuZCBicmVhaworICAgICAgICBpZiB0aGUgc3RhY2sgcG9pbnRlciBpcyBu
b3QgYXBwcm9wcmlhdGVseSBhbGlnbmVkLgorCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVy
cy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVy
KToKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtz
OjpjdGlOYXRpdmVDYWxsRmFsbGJhY2spOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAg
ICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6c2xvd1BhdGhG
b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpu
YXRpdmVDYWxsRmFsbGJhY2tHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphcml0eUZpeHVwKToK
KyAgICAgICAgKEpTQzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Y2hhckF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmcm9tQ2hhckNvZGVUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OmZsb29yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjZWlsVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpyb3VuZFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
ZXhwVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsb2dUaHVua0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OmFic1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cG93VGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjppbXVsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1
bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKwogMjAxMy0xMi0w
NiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBDU3RhY2sg
QnJhbmNoOiBGaXggU3BlY2lhbGl6ZWQgVGh1bmtzIHRvIHVzZSBmdW5jdGlvbiBwcm9sb2d1ZXMg
YW5kIGVwaWxvZ3VlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAxNjAzMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCwxNSBAQCBwdWJs
aWM6CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxl
cjsgfQogICAgIAogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCisgICAgdm9pZCBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgSnVt
cCBzdGFja1BvaW50ZXJBbGlnbmVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBzdGFja1BvaW50ZXJS
ZWdpc3RlciwgVHJ1c3RlZEltbTMyKDB4ZikpOworICAgICAgICBicmVha3BvaW50KCk7CisgICAg
ICAgIHN0YWNrUG9pbnRlckFsaWduZWQubGluayh0aGlzKTsKKyNlbmRpZgorICAgIH0KKwogICAg
IHZvaWQgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHsKICAgICAgICAgcHVzaChmcmFtZVBv
aW50ZXJSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAxNjAzMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0Myw3ICs1NDMsMTEgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRl
Q29tcGlsZShKSQogICAgIH0KIAogICAgIExhYmVsIGZ1bmN0aW9uQm9keSA9IGxhYmVsKCk7Ci0g
ICAgCisKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLWZyYW1lUmVnaXN0ZXJDb3VudEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworCiAgICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpOwogICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICBwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpOwpAQCAtNTU1LDYgKzU1OSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJp
dmF0ZUNvbXBpbGUoSkkKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKSB7CiAgICAgICAgIHN0YWNrQ2hlY2subGluayh0aGlzKTsKICAgICAgICAgbV9ieXRl
Y29kZU9mZnNldCA9IDA7CisgICAgICAgIC8vICYmJiYgVGhpcyBtYXkgbmVlZCB0byBoYXZlIHNv
bWUgc3RhY2sgc3BhY2UgYWxsb2NhdGVkIHRvIG1ha2UgdGhlIGNhbGwKICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblN0YWNrQ2hl
Y2ssIG1fY29kZUJsb2NrKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIG1fYnl0ZWNvZGVPZmZz
ZXQgPSAodW5zaWduZWQpLTE7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1
c2Ugd2l0aCBBU1NFUlRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAx
NjAzMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDYsNiArMjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2Nr
KQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIShjb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzICYgMSkpOwogICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnM7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAxNjAzMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksOSArMTc5LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgog
Ci0gICAgc3RvcmU2NChjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OwotICAgIG1vdmUocmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9u
KTsKQEAgLTE5OCwxMCArMTk2LDE1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlE
IG9wY29kZUkKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
OwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlT2Zmc2V0OwogCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7
Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWlu
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9u
LCBtX3Njb3BlKSksIHJlZ1QyKTsKKyAgICBzdG9yZTY0KHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBK
U1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoMTYpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwogCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKQEAgLTIxNiw4ICsyMTksMTMgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigxNiksIHJlZ1QxLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSk7CiAKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1mcmFtZVJlZ2lzdGVy
Q291bnRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKKwogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgCiAgICAgZW1p
dFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNjAzMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZQogICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1ZUdQUik7CiAKKyAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOyAvLyAmJiYmCiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKICAgICByZXQoKTsKIH0KQEAgLTc3Nyw2ICs3NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXFfbnVsbChJbnN0cnVjdGlvbiogCiAKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0
aW9uKikKIHsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOyAvLyAmJiYmCiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICAgICAKICAgICAvLyBFdmVuIHRob3VnaCBD
VEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHJldmlzaW9uIDE2MDMxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNiArNTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRp
CiAjZW5kaWYKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRvcikuY29k
ZSgpOwogfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlOYXRpdmVDb25z
dHJ1Y3QoVk0qIHZtKQogewogI2lmIEVOQUJMRShMTElOVCkKQEAgLTYxLDYgKzYyLDEyIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGkKICAgICByZXR1cm4gY3RpU3R1
Yih2bSwgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCk7CiB9CiAKK01hY3JvQXNzZW1i
bGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGxGYWxsYmFjayhWTSogdm0pCit7Cisg
ICAgQVNTRVJUKHZtLT5jYW5Vc2VKSVQoKSk7CisgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2
ZUNhbGxGYWxsYmFja0dlbmVyYXRvcikuY29kZSgpOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgSklUVGh1bmtzOjpjdGlTdHViKFZNKiB2bSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQog
ewogICAgIExvY2tlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUaHVua3MuaAkocmV2aXNpb24gMTYwMzEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6
CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ2FsbChWTSopOwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoVk0qKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ2FsbEZhbGxiYWNrKFZNKik7ICAgIAogCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIoVk0qLCBUaHVua0dlbmVyYXRvcik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlz
aW9uIDE2MDMxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBDQ2Fs
bEhlbHBlcnMmIGppdCwgVk0qIHZtLCBQX0pJVE9wZXJhdGlvbl9FIHNsb3dQYXRoRnVuY3Rpb24p
CiB7Ci0gICAgLy8gJiYmJiAgRklYTUU6IE5lZWQgdG8gY2xlYW51cCBmcmFtZSBiZWxvdyBsaWtl
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCkKLSAgICBqaXQuYnJlYWtwb2ludCgpOwogICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOwpAQCAtOTUsMTEgKzkzLDggQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAg
ICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRodW5rLgogICAgIC8vIDIpIEhvc3QgY2FsbCBy
ZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5LgogICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBj
YWxsLgotICAgIGppdC5lbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0LmVtaXRQdXRSZXR1cm5QQ1Rv
Q2FsbEZyYW1lSGVhZGVyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKLSAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
CiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0yNDUsMTMg
KzI0MCwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoCiAgICAg
cmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CiB9
CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2VuZXJhdG9yKFZNKiB2
bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVGb3JHZW5lcmF0b3IoVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQsIGJvb2wgZmFsbEJhY2sgPSBmYWxzZSkKIHsKICAgICBpbnQgZXhlY3V0YWJsZU9mZnNldFRv
RnVuY3Rpb24gPSBOYXRpdmVFeGVjdXRhYmxlOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtp
bmQpOwogICAgIAogICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CiAKLSAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBpZiAoIWZhbGxCYWNrKQorICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKKwogICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVI
ZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKICAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZh
Y2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7CiAKQEAgLTI4Miwy
MyArMjc5LDE1IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAg
ICBqaXQuZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU0ludGVyZmFj
ZUpJVDo6cmVnVDApOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMCk7CiAgICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIGppdC5wZWVrKEpTSW50ZXJm
YWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVy
KEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0KICNpZiAhT1MoV0lORE9XUykKICAgICAvLyBDYWxs
aW5nIGNvbnZlbnRpb246ICAgICAgZihlZGksIGVzaSwgZWR4LCBlY3gsIC4uLik7CiAgICAgLy8g
SG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CiAgICAgaml0Lm1vdmUoSlNJ
bnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkaSk7CiAKLSAg
ICBqaXQuc3ViUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMTYgLSBzaXplb2YoaW50
NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBBbGlnbiBz
dGFjayBhZnRlciBjYWxsLgotCiAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KEpTU3RhY2s6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplc2kpOwogICAgIGppdC5sb2FkUHRyKEpT
SW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSksIFg4NlJlZ2lzdGVyczo6cjkpOwotICAgIGppdC5tb3ZlKEpTSW50
ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8g
RWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZy
b20gc3RhY2suCiAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0
ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAotICAgIGppdC5hZGRQdHIo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigxNiAtIHNpemVvZihpbnQ2NF90KSksIEpTSW50
ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZWxzZQogICAgIC8vIENhbGxpbmcg
Y29udmVudGlvbjogICAgICBmKGVjeCwgZWR4LCByOCwgcjksIC4uLik7CiAgICAgLy8gSG9zdCBm
dW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CkBAIC00MTcsNyArNDA2LDcgQEAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
KCJuYXRpdmUgJXMgdHJhbXBvbGluZSIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJuYXRpdmUgJXMgJXN0cmFtcG9saW5l
IiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSwgZmFsbEJhY2sgPyAiZmFsbGJhY2sgIiA6ICIiKSk7
CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2bSkK
QEAgLTQyNSw2ICs0MTQsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5l
cmF0bwogICAgIHJldHVybiBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKIH0K
IAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxGYWxsYmFja0dlbmVyYXRvcihWTSog
dm0pCit7CisgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIHRy
dWUpOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9y
KFZNKiB2bSkKIHsKICAgICByZXR1cm4gbmF0aXZlRm9yR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29u
c3RydWN0KTsKQEAgLTQ1OSw5ICs0NTMsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5
Rml4dXAoVk0qIHZtKQogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0z
Mig4KSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKICAgICBqaXQuYnJhbmNoQWRkMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMSksIEpTSW50
ZXJmYWNlSklUOjpyZWdUMikubGlua1RvKGZpbGxVbmRlZmluZWRMb29wLCAmaml0KTsKIAotICAg
IC8vIEFkanVzdCBjYWxsIGZyYW1lIHJlZ2lzdGVyIHRvIGFjY291bnQgZm9yIG1pc3NpbmcgYXJn
cworICAgIC8vIEFkanVzdCBjYWxsIGZyYW1lIHJlZ2lzdGVyIGFuZCBzdGFjayBwb2ludGVyIHRv
IGFjY291bnQgZm9yIG1pc3NpbmcgYXJncwogICAgIGppdC5sc2hpZnQ2NChKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbTMyKDMpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5hZGRQ
dHIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFjZUpJ
VDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjICBpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CkBAIC01NTMsNyArNTQ4LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbgogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KHZtLCAxKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQsIHZtKTsKICAgICBqaXQucmV0dXJu
SW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxp
emUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNoYXJDb2RlQXQiKTsKKyAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbEZhbGxiYWNrKHZt
KSwgImNoYXJDb2RlQXQiKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKQEAgLTU2Miw3ICs1NTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY2hhckF0VGh1bmtHZW5lcmF0CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0LCB2bSk7CiAgICAg
Y2hhclRvU3RyaW5nKGppdCwgdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGpp
dC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBq
aXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNoYXJBdCIpOwor
ICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsRmFsbGJh
Y2sodm0pLCAiY2hhckF0Iik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNv
ZGVUaHVua0dlbmVyYXRvcihWTSogdm0pCkBAIC01NzIsNyArNTY3LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rRwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwgdm0s
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImZyb21DaGFyQ29kZSIpOworICAgIHJldHVybiBqaXQu
ZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsRmFsbGJhY2sodm0pLCAiZnJvbUNo
YXJDb2RlIik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQpAQCAtNTg0LDcgKzU3OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1
bmtHZW5lcmF0b3IKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3Fy
dERvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpmcFJlZ1QwKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKHZtKSwgInNxcnQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbEZhbGxiYWNrKHZtKSwgInNxcnQiKTsKIH0KIAogCkBAIC03MzIsNyArNzI3
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0bwogICAgIGRvdWJs
ZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZnBSZWdUMCk7CiAjZW5kaWYgLy8gQ1BVKEFSTTY0KQotICAgIHJldHVybiBqaXQuZmlu
YWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImZsb29yIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGxGYWxsYmFjayh2bSks
ICJmbG9vciIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKQEAgLTc1NSw3ICs3NTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRo
dW5rR2VuZXJhdG9yCiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKICAgICBkb3VibGVSZXN1bHQubGluaygmaml0KTsKICAgICBqaXQucmV0dXJuRG91Ymxl
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgImNlaWwiKTsKKyAgICByZXR1cm4gaml0
LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbEZhbGxiYWNrKHZtKSwgImNlaWwi
KTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQpAQCAtNzg5LDcgKzc4NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2Vu
ZXJhdG8KICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwog
ICAgIGRvdWJsZVJlc3VsdC5saW5rKCZqaXQpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAicm91bmQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFs
aXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbEZhbGxiYWNrKHZtKSwgInJvdW5kIik7CiB9
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihWTSogdm0pCkBAIC04
MDIsNyArNzk3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKAog
ICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3Vi
bGVQcmVzZXJ2aW5nUmV0dXJuKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGppdC5y
ZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiZXhwIik7CisgICAg
cmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGxGYWxsYmFjayh2
bSksICJleHAiKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9y
KFZNKiB2bSkKQEAgLTgxNSw3ICs4MTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1
bmtHZW5lcmF0b3IoCiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNh
bGxEb3VibGVUb0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oVW5hcnlEb3VibGVPcFdyYXBwZXIobG9n
KSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsK
LSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSks
ICJsb2ciKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbEZhbGxiYWNrKHZtKSwgImxvZyIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJz
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQpAQCAtODM1LDcgKzgzMCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcigKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
KTsKICAgICBqaXQuYWJzRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6ZnBSZWdUMSk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiYWJzIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2
bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGxGYWxsYmFjayh2bSksICJhYnMiKTsKIH0KIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTg4Nyw3ICs4
ODIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoCiAgICAgfSBl
bHNlCiAgICAgICAgIGppdC5hcHBlbmRGYWlsdXJlKG5vbkludEV4cG9uZW50KTsKIAotICAgIHJl
dHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKHZtKSwgInBvdyIp
OworICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsRmFs
bGJhY2sodm0pLCAicG93Iik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQpAQCAtOTIwLDcgKzkxNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBpbXVsVGh1bmtHZW5lcmF0b3IKICAgICB9IGVsc2UKICAgICAgICAgaml0LmFwcGVuZEZhaWx1
cmUobm9uSW50QXJnMUp1bXApOwogCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwodm0pLCAiaW11bCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUo
dm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsRmFsbGJhY2sodm0pLCAiaW11bCIpOwogfQogCiBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0
b3IoVk0qIHZtLCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCkKQEAgLTk2MCw3ICs5NTUsNyBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0CiAgICAgaWYgKGtpbmQgPT0g
QXJyYXlJdGVyYXRlS2V5KSB7CiAgICAgICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFk
ZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0
T2ZOZXh0SW5kZXgoKSkpOwogICAgICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDEpOwotICAgICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LWtleSIpOworICAgICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbEZhbGxiYWNrKHZt
KSwgImFycmF5LWl0ZXJhdG9yLW5leHQta2V5Iik7CiAgICAgICAgIAogICAgIH0KICAgICBBU1NF
UlQoa2luZCA9PSBBcnJheUl0ZXJhdGVWYWx1ZSk7CkBAIC0xMDExLDcgKzEwMDYsNyBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0CiAgICAgaml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0
ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICAKLSAgICByZXR1cm4gaml0LmZpbmFsaXpl
KHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LXZh
bHVlIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGxGYWxsYmFjayh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LXZhbHVlIik7CiB9CiAKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAko
cmV2aXNpb24gMTYwMzEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoCiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVD
YWxsR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0
R2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEZhbGxiYWNr
R2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSopOwog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKFZNKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTYwMzEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ3MCw2
ICs0NzAsNyBAQCBlbmQKIAogX2xsaW50X29wX2VudGVyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0MiwgMHhkZWFkMDBlMSkKICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgdDIgICAgICAgICAgICAgICAgLy8gdDI8Q29kZUJsb2NrPiA9IGNm
ci5Db2RlQmxvY2sKICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtVmFyc1t0Ml0sIHQyICAgICAg
Ly8gdDI8c2l6ZV90PiA9IHQyPENvZGVCbG9jaz4ubV9udW1WYXJzCiAgICAgYnRpeiB0MiwgLm9w
RW50ZXJEb25lCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNjAzMTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTIxOSw2ICsyMTksNyBAQCBtYWNybyBwcmVzZXJ2ZUNhbGxlclBDQW5kQ0ZSKCkKICAgICBlbmQK
IGVuZAogCisKIG1hY3JvIHJlc3RvcmVDYWxsZXJQQ0FuZENGUigpCiAgICAgaWYgQ19MT09QIG9y
IEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTCBvciBBUk02NCBvciBNSVBTIG9yIFNI
NAogICAgICAgICAjIEluIENfTE9PUCBjYXNlLCB3ZSdyZSBvbmx5IHByZXNlcnZpbmcgdGhlIGJ5
dGVjb2RlIHZQQy4KQEAgLTIyOSw2ICsyMzAsOCBAQCBtYWNybyByZXN0b3JlQ2FsbGVyUENBbmRD
RlIoKQogICAgICAgICBwb3AgY2ZyCiAgICAgZW5kCiBlbmQKKworCiBtYWNybyBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwoZGVzdGluYXRpb25SZWdpc3RlcikKICAgICBpZiBDX0xPT1Ag
b3IgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIEFSTTY0IG9yIE1JUFMgb3Ig
U0g0CiAgICAgICAgICMgSW4gQ19MT09QIGNhc2UsIHdlJ3JlIG9ubHkgcHJlc2VydmluZyB0aGUg
Ynl0ZWNvZGUgdlBDLgpAQCAtMzUwLDEyICszNTMsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxv
Y2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgaWYgSklUX0VOQUJMRUQKICAgICAgICAgYmFkZGlzIDUs
IENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgRXhlY3V0aW9uQ291bnRlcjo6bV9j
b3VudGVyW3QxXSwgLmNvbnRpbnVlCiAgICAgICAgIGNDYWxsMihvc3JTbG93UGF0aCwgY2ZyLCBQ
QykKLSAgICAgICAgbW92ZSB0MSwgY2ZyCiAgICAgICAgIGJ0cHogdDAsIC5yZWNvdmVyCi0gICAg
ICAgICMgJiYmJiBGSVhNRTogTm90IHN1cmUgdGhpcyBpcyByaWdodAotICAgICAgICBicmVhawot
ICAgICAgICAjIGxvYWRwIFJldHVyblBDW2Nmcl0sIHQyCi0gICAgICAgICMgcmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4odDIpCisgICAgICAgIHBvcCBjZnIgIyBwb3AgdGhlIGNhbGxl
ckZyYW1lIHNpbmNlIHdlIHdpbGwganVtcCB0byBhIGZ1bmN0aW9uIHRoYXQgd2FudHMgdG8gc2F2
ZSBpdAogICAgICAgICBqbXAgdDAKICAgICAucmVjb3ZlcjoKICAgICAgICAgY29kZUJsb2NrR2V0
dGVyKHQxKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>