<?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>150745</bug_id>
          
          <creation_ts>2015-10-30 18:26:30 -0700</creation_ts>
          <short_desc>WebInspector crashed while viewing Timeline when refreshing cnn.com while it was already loading</short_desc>
          <delta_ts>2015-11-02 21:34:51 -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>WebKit 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>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1138082</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-30 18:26:30 -0700</bug_when>
    <thetext>* STEPS TO REPRODUCE
1. Inspect cnn.com
2. Show Timeline tab
3. Reload
4. Repeat

We get a crash like this:
    frame #0: 0x000000010c25767e JavaScriptCore`::WTFCrash() + 62 at Assertions.cpp:321
    frame #1: 0x000000010bd50e8a JavaScriptCore`JSC::DFG::reifyInlinedCallFrames(jit=&lt;unavailable&gt;, exit=&lt;unavailable&gt;) + 1546 at DFGOSRExitCompilerCommon.cpp:193
    frame #2: 0x000000010bd4ee0b JavaScriptCore`JSC::DFG::OSRExitCompiler::compileExit(this=0x00007fff5b42b410, exit=0x0000000143288380, operands=&lt;unavailable&gt;, recovery=&lt;unavailable&gt;) + 4667 at DFGOSRExitCompiler64.cpp:387
    frame #3: 0x000000010bd4cc95 JavaScriptCore`::compileOSRExit(exec=&lt;unavailable&gt;) + 1493 at DFGOSRExitCompiler.cpp:162
    frame #4: 0x000036bd736098a1 prepareToShow#DyZ1GU [DFG](Cell[Object ID: 18687]: 0x14000ea80, True)
    frame #5: 0x000036bd7406e4df _showEntry#Dp5saP [Baseline](Cell[Object ID: 15664]: 0x1435c9900, Cell[Object ID: 18687]: 0x14000ea80, True)
    frame #6: 0x000036bd741638d2 showBackForwardEntryForIndex#ETQFoG [Baseline](Cell[Object ID: 15664]: 0x1435c9900, 0)
    frame #7: 0x000036bd73f00045 showContentView#BhrqjJ [Baseline](Cell[Object ID: 15664]: 0x1435c9900, Cell[Object ID: 18505]: 0x1435c97c0)
...

Looks like we don&apos;t have correct location information for an OSR exit.

We are OSR exiting from prepareToShow#DyZ1GU-&gt;_restoreFromCookie#AsCLr2-&gt;cookie#C5Hkj7-&gt;value#ApQL0d.
From a call tree perspective,
    prepareToShow#DyZ1GU called _restoreFromCookie#AsCLr2 via op_call
        _restoreFromCookie#AsCLr2 called cookie#C5Hkj7 as a getter via op_get_by_id (bc#52)
            cookie#C5Hkj7 called value#ApQL0d via a op_tail_call

When we are reifying the inlined frames looking for the jump target, we incorrectly have the call type from _restoreFromCookie#AsCLr2 to cookie#C5Hkj7 as InlineCallFrame::TailCall and try to find the CallLinkInfo for bc#52, but there isn&apos;t one.  Instead this call should be processed as a InlineCallFrame::GetterCall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138083</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-30 18:27:09 -0700</bug_when>
    <thetext>rdar://problem/23209327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138674</commentid>
    <comment_count>2</comment_count>
      <attachid>264620</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-11-02 13:36:07 -0800</bug_when>
    <thetext>Created attachment 264620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138687</commentid>
    <comment_count>3</comment_count>
      <attachid>264620</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-02 13:56:05 -0800</bug_when>
    <thetext>Comment on attachment 264620
Patch

r=me

In future, I think we want the InlineCallFrame to reflect its non-tail caller, since that&apos;s what the language wants -- instead of requiring all users of InlineCallFrame to see the tail caller and then skip it, effectively correcting the data structure on the fly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138689</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-11-02 14:00:44 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264620 [details]
&gt; Patch
&gt; 
&gt; r=me
&gt; 
&gt; In future, I think we want the InlineCallFrame to reflect its non-tail
&gt; caller, since that&apos;s what the language wants -- instead of requiring all
&gt; users of InlineCallFrame to see the tail caller and then skip it,
&gt; effectively correcting the data structure on the fly.

Agreed.  I filed &lt;rdar://problem/23361344&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138691</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-02 14:05:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264620 [details]
&gt; Patch
&gt; 
&gt; r=me
&gt; 
&gt; In future, I think we want the InlineCallFrame to reflect its non-tail
&gt; caller, since that&apos;s what the language wants -- instead of requiring all
&gt; users of InlineCallFrame to see the tail caller and then skip it,
&gt; effectively correcting the data structure on the fly.

The problem is that if we have foo(), bar() like:

function bar() { things }

function foo() { things; bar(); } // tail call to bar

And we compile foo() and inline bar(), then what should the inline stack in foo-&gt;bar look like?  When we do this, we cannot have inlining pretend as if bar replaced foo, even though it actually did.  For example, bar()&apos;s arguments aren&apos;t going to be placed in foo&apos;s caller&apos;s argument passing area.  So, bar() must have an InlineCallFrame, because it must have a stack offset, and its arguments must be in foo&apos;s locals.

Some of these things can be changed, some can&apos;t, and some aren&apos;t worth it.  The DFG expects that there are some &quot;bytecode locals&quot; that it uses to store meta-data about an inlined call.  It&apos;s not worth trying to place those locals anywhere but the locals area of foo; for example placing them in foo&apos;s call frame header would be too much trouble even though that&apos;s what &quot;tail calling&quot; usually means.  But where we place the meta-data is currently coupled to the InlineCallFrame::stackOffset, and having a non-zero stackOffset is currently coupled to having a non-null InlineCallFrame.

Since we&apos;re saying that bar() has an InlineCallFrame with a call stack that reflects what would have happened without tail calls, it therefore makes some sense to be consistent, and always say that the InlineCallFrame stack is the &quot;non-tail-optimized&quot; call stack.

FWIW, this also makes the most sense when looking at IR dumps and thinking about how compiler optimizations impact inlining - since inlining makes the DFG IR look as if tail calls aren&apos;t a thing, it means that optimizations don&apos;t have to know about tail call inlining.  It&apos;s true that code that does OSR must skip up the InlineCallFrame stack, and that is annoying.  But I think we should fix that by making the API nicer.  Right now we walk InlineCallFrame stacks using ad-hoc for loops, and I think that&apos;s partly why we make mistakes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138698</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-02 14:27:34 -0800</bug_when>
    <thetext>Let&apos;s assume that we do produce an InlineCallFrame in the locals area for all inlined functions, including inlined functions that do tails calls or are tailed called by the root CodeBlock, which includes arguments and so on, and let&apos;s assume that the compiler&apos;s InlineStackEntry reflects an m_caller value that includes tail callers.

Now let&apos;s say that we change InlineCallFrame, which we use for recovering stacks at runtime, for OSR exits and backtraces and stuff, to have a directCaller value that does not include tail callers.

Does this mostly work?

In other words, what are the clients of InlineCallFrame (and not InlineStackEntry) that *want* to see tail callers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138760</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-11-02 16:33:38 -0800</bug_when>
    <thetext>I have tested this fix with the original web page (cnn.com) and reloading the page with the web inspector open.  Now it is crashing after the OSR exit code jumps to the baseline and we return from the callee as if it was a getter call.

We end up returning to the baseline getter return thunk, which looks like:
Generated JIT code for baseline getter return thunk:
    Code at [0x4ef12eff3de0, 0x4ef12eff3e00):
      0x4ef12eff3de0: mov 0x20(%rsp), %rdx
      0x4ef12eff3de5: add $0x30, %rsp
      0x4ef12eff3de9: jmp %rdx

The problem is that 0x20(%rsp) doesn&apos;t contain the return location to the originating op_get_by_id, but the second argument to the tail called function.  This getter return stub expects one argument and puts the return address in the unused slot for the second argument.

In the OSR exit generator, we find (DFGOSRExitCompilerCommon.cpp, line214):
        if (trueReturnPC)
            jit.storePtr(AssemblyHelpers::TrustedImmPtr(trueReturnPC), 
                AssemblyHelpers::addressFor(inlineCallFrame-&gt;stackOffset + 
                    virtualRegisterForArgument(inlineCallFrame-&gt;arguments.size()).offset()));

For a getter, inlineCallFrame-&gt;arguments.size() will be 1.  In our case with a tail callee with two arguments, this won&apos;t work.

I&apos;ve updated the new test to reproduce this issue.

More work to be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138807</commentid>
    <comment_count>8</comment_count>
      <attachid>264657</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-11-02 19:43:56 -0800</bug_when>
    <thetext>Created attachment 264657
Updated Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138811</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-02 20:26:18 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Let&apos;s assume that we do produce an InlineCallFrame in the locals area for
&gt; all inlined functions, including inlined functions that do tails calls or
&gt; are tailed called by the root CodeBlock, which includes arguments and so on,
&gt; and let&apos;s assume that the compiler&apos;s InlineStackEntry reflects an m_caller
&gt; value that includes tail callers.
&gt; 
&gt; Now let&apos;s say that we change InlineCallFrame, which we use for recovering
&gt; stacks at runtime, for OSR exits and backtraces and stuff, to have a
&gt; directCaller value that does not include tail callers.

We use it for more than that. It&apos;s the compiler&apos;s way of knowing what locals mean.

&gt; 
&gt; Does this mostly work?
&gt; 
&gt; In other words, what are the clients of InlineCallFrame (and not
&gt; InlineStackEntry) that *want* to see tail callers?

What is the value of directCaller for inlined functions that were tail called from the outermost function? If it&apos;s null, then how do we know that we&apos;re in inlined code?  Another field, perhaps?  If we did this, then a lot of code in the DFG would have to change.  There is a huge difference between how we have to treat outermost code and inlined code.  For example, the outermost code puts its arguments in the physical argument area on the stack, while inlined code puts its arguments in locals.

It&apos;s possible that we could engineer a change like this, but it feels like a very large change with lots of unknowns.

A much better approach would be to add a method to InlineCallFrame called directCaller(), which skips tail callers, and then make sure that we are careful about the use of m_caller. We can switch uses of m_caller to directCaller() and examine if this really let us simplify code. This will give us a benefit even without having to worry about there being some code that relies on the current semantics of m_caller. And if there really are no code paths that want m_caller, then we can find that out through incrementally adopting the directCaller() method, rather than in one expensive leap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138832</commentid>
    <comment_count>10</comment_count>
      <attachid>264657</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-02 21:25:05 -0800</bug_when>
    <thetext>Comment on attachment 264657
Updated Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        We can also retrun directly back to a getter or setter callsite with using a thunk.

return

without

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:150
&gt; +        CodeOrigin* trueCaller = inlineCallFrame-&gt;getCallerSkippingDeadFrames(&amp;trueCallerCallKind);

You should follow up and rename this to getCallerSkippingTailCallers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138833</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-02 21:29:41 -0800</bug_when>
    <thetext>&gt; A much better approach would be to add a method to InlineCallFrame called
&gt; directCaller(), which skips tail callers

👍

To clarify, InlineCallFrame has a directCaller member; InlineStackEntry has an m_caller member. 

But I think the point stands that, if we change InlineCallFrame&apos;s clients to use a helper function that excludes tail callers, and we find that nobody continues to use its directCaller member to include tail callers, then we have our answer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138835</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-11-02 21:34:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 264657 [details]
&gt; Updated Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264657&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:15
&gt; &gt; +        We can also retrun directly back to a getter or setter callsite with using a thunk.
&gt; 
&gt; return

Fixed.

&gt; without

Fixed.

&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:150
&gt; &gt; +        CodeOrigin* trueCaller = inlineCallFrame-&gt;getCallerSkippingDeadFrames(&amp;trueCallerCallKind);
&gt; 
&gt; You should follow up and rename this to getCallerSkippingTailCallers.

Agreed.  Filed https://bugs.webkit.org/show_bug.cgi?id=150832.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138836</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-11-02 21:34:51 -0800</bug_when>
    <thetext>Committed r191937: &lt;http://trac.webkit.org/changeset/191937&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264620</attachid>
            <date>2015-11-02 13:36:07 -0800</date>
            <delta_ts>2015-11-02 19:43:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>150745.patch</filename>
            <type>text/plain</type>
            <size>8404</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxOTA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE1LTExLTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYkluc3BlY3RvciBjcmFzaGVkIHdoaWxlIHZpZXdpbmcgVGltZWxpbmUgd2hlbiByZWZy
ZXNoaW5nIGNubi5jb20gd2hpbGUgaXQgd2FzIGFscmVhZHkgbG9hZGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzQ1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHVyaW5nIE9TUiBleGl0LCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKCkgd2FzIHVzaW5nIHRoZSBjYWxsIGtpbmQgZnJvbSBhIHRhaWwg
Y2FsbCB0bworICAgICAgICBmaW5kIHRoZSBDYWxsTGlua0luZm8gLyBTdHViSW5mbyB0byBmaW5k
IHRoZSByZXR1cm4gUEMuICBJbnN0ZWFkIHdlIG5lZWQgdG8gZ2V0IHRoZSBjYWxsCisgICAgICAg
IHR5cGUgb2YgdGhlIHRydWUgY2FsbGVyLCB0aGF0IGlzIHRoZSBmdW5jdGlvbiB3ZSdsbCBiZSBy
ZXR1cm5pbmcgdG8uCisKKyAgICAgICAgVGhpcyBjYW4gYmUgZm91bmQgYnkgcmVtZW1iZXJpbmcg
dGhlIGxhc3QgY2FsbCB0eXBlIHdlIGZpbmQgd2hpbGUgd2Fsa2luZyB1cCB0aGUgaW5saW5lZAor
ICAgICAgICBmcmFtZXMgaW4gSW5saW5lQ2FsbEZyYW1lOjpnZXRDYWxsZXJTa2lwcGluZ0RlYWRG
cmFtZXMoKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmNvbXB1dGVDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMp
OgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmdldENhbGxlclNraXBwaW5nRGVhZEZy
YW1lcyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6CisgICAgICAgICogaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9p
ZCk6IE5lZWQgdG8gZWxpbWluYXRlIHRoZSBzdGFjayBwb2ludGVyIGNoZWNrLCBhcyBpdCBpcyB3
cm9uZworICAgICAgICBmb3IgcmVpZmllZCBpbmxpbmVkIGZyYW1lcyBjcmVhdGVkIGR1cmluZyBP
U1IgZXhpdC4gCisKIDIwMTUtMTEtMDIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFNuaXBwZWZ5IG9wX2FkZCBmb3IgdGhlIGJhc2VsaW5lIEpJVC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHJl
dmlzaW9uIDE5MTkwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDIzICsxNDYsMzAgQEAgc3RydWN0IElu
bGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHJldHVybiBpc1RhaWwoc3RhdGljX2Nhc3Q8S2luZD4o
a2luZCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb2RlT3JpZ2luKiBjb21wdXRlQ2FsbGVyU2tp
cHBpbmdEZWFkRnJhbWVzKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHN0
YXRpYyBDb2RlT3JpZ2luKiBjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBLaW5kKiBjYWxsZXJDYWxsS2luZCA9IG51bGxwdHIp
CiAgICAgewogICAgICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwogICAgICAgICBib29sIHRh
aWxDYWxsZWU7CisgICAgICAgIGludCBjYWxsS2luZDsKICAgICAgICAgZG8gewogICAgICAgICAg
ICAgdGFpbENhbGxlZSA9IGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCk7CisgICAgICAgICAgICBj
YWxsS2luZCA9IGlubGluZUNhbGxGcmFtZS0+a2luZDsKICAgICAgICAgICAgIGNvZGVPcmlnaW4g
PSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIH0gd2hpbGUgKGlu
bGluZUNhbGxGcmFtZSAmJiB0YWlsQ2FsbGVlKTsKKwogICAgICAgICBpZiAodGFpbENhbGxlZSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChjYWxsZXJDYWxsS2lu
ZCkKKyAgICAgICAgICAgICpjYWxsZXJDYWxsS2luZCA9IHN0YXRpY19jYXN0PEtpbmQ+KGNhbGxL
aW5kKTsKKwogICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKICAgICB9CiAKLSAgICBDb2RlT3Jp
Z2luKiBnZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKQorICAgIENvZGVPcmlnaW4qIGdldENh
bGxlclNraXBwaW5nRGVhZEZyYW1lcyhLaW5kKiBjYWxsZXJDYWxsS2luZCA9IG51bGxwdHIpCiAg
ICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUNhbGxlclNraXBwaW5nRGVhZEZyYW1lcyh0aGlz
KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXModGhpcywg
Y2FsbGVyQ2FsbEtpbmQpOwogICAgIH0KIAogICAgIElubGluZUNhbGxGcmFtZSogZ2V0Q2FsbGVy
SW5saW5lRnJhbWVTa2lwcGluZ0RlYWRGcmFtZXMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNp
b24gMTkxOTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDggQEAgdm9pZCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZl
eGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJh
bWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNr
aXBwaW5nRGVhZEZyYW1lcygpKSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCpjb2RlT3JpZ2lu
KTsKLSAgICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0
Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisgICAgICAgIElubGluZUNhbGxGcmFtZTo6S2lu
ZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7CisgICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBp
bmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygmdHJ1ZUNhbGxlckNh
bGxLaW5kKTsKICAgICAgICAgdm9pZCogdHJ1ZVJldHVyblBDID0gbnVsbHB0cjsKICAgICAgICAg
R1BSUmVnIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAKQEAg
LTE2MSw3ICsxNjIsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5
dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gbnVsbHB0cjsKIAot
ICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgICAgICBjYXNlIElubGluZUNh
bGxGcmFtZTo6Q2FsbDoKICAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1
Y3Q6CiAgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CkBAIC0x
ODIsNyArMTgzLDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwog
ICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+ZmluZFN0dWJJ
bmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdHViSW5mbyk7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGlubGluZUNh
bGxGcmFtZS0+a2luZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxL
aW5kKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6
CiAgICAgICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1Yihi
YXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTkxOTA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2MSw3ICs1NjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLSAgICBhc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTkxOTA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMTEtMDIgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViSW5zcGVjdG9yIGNyYXNoZWQgd2hp
bGUgdmlld2luZyBUaW1lbGluZSB3aGVuIHJlZnJlc2hpbmcgY25uLmNvbSB3aGlsZSBpdCB3YXMg
YWxyZWFkeSBsb2FkaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTA3NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgcmVncmVzc2lvbiB0ZXN0cy4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MtMTUw
NzQ1LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy0xNTA3NDUuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwNzQ1LmpzOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3QpOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUuZ2V0IHN1bSk6
CisgICAgICAgIChUZXN0LnByb3RvdHlwZS5kb1N1bSk6CisgICAgICAgIChnZXRTdW0pOgorCiAy
MDE1LTExLTAyICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAg
IE1hcmtpbmcgZmFzdC90ZXh0L211bHRpcGxlLWZlYXR1cmUtcHJvcGVydGllcy5odG1sIGFzIGZs
YWt5IG9uIHdpbgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xNTA3NDUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwNzQ1LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwNzQ1LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitSZWdyZXNzaW9uIHRlc3Qg
Zm9yIDE1MDc0NQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBBYmxlIHRv
IE9TUiBleGl0IGZyb20gYW4gaW5saW5lZCB0YWlsIGNhbGxlZSBvZiBhIGdldHRlci4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzLTE1MDc0NS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MtMTUwNzQ1Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzLTE1MDc0NS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWdyZXNzLTE1MDc0NS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQt
dGVzdHMvcmVncmVzcy0xNTA3NDUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL3JlZ3Jlc3MtMTUwNzQ1LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwNzQ1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDcgQEAKK2Rlc2NyaXB0aW9uKCJSZWdyZXNzaW9uIHRlc3QgZm9yIDE1MDc0NSIpOworCisv
LyBXZSBzaG91bGQgYmUgYWJsZSB0byBPUlMgZXhpdCBmcm9tIGFuIGlubGluZWQgdGFpbCBjYWxs
ZWUgb2YgYSBnZXR0ZXIuICBUaGlzIHRlc3Qgc2hvdWxkbid0IGNyYXNoLgorCisidXNlIHN0cmlj
dCI7CisKK2NsYXNzIFRlc3QgeworICAgIGNvbnN0cnVjdG9yKGEsIGIpCisgICAgeworICAgICAg
ICB0aGlzLmEgPSBhOworICAgICAgICB0aGlzLmIgPSBiOworICAgICAgICB0aGlzLmNhbGxDb3Vu
dCA9IDA7CisgICAgfQorCisgICAgZ2V0IHN1bSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5kb1N1bSgpOworICAgIH0KKworICAgIGRvU3VtKCkKKyAgICB7CisgICAgICAgIHRoaXMuY2Fs
bENvdW50Kys7CisKKyAgICAgICAgaWYgKHRoaXMuY2FsbENvdW50ID09IDkwMDApCisgICAgICAg
ICAgICB0aGlzLmRmZ0NvbXBpbGVkID0gdHJ1ZTsKKworICAgICAgICBpZiAodGhpcy5jYWxsQ291
bnQgPT0gMTk5MDAwKQorICAgICAgICAgICAgdGhpcy5mdGxDb21waWxlZCA9IHRydWU7CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMuYSArIHRoaXMuYjsKKyAgICB9Cit9CisKK3ZhciB0ZXN0T2JqID0g
bmV3IFRlc3QoNDAsIDIpOworCitmdW5jdGlvbiBnZXRTdW0obykKK3sKKyAgICByZXR1cm4gby5z
dW07Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDAwOyBpKyspIHsKKyAgICB2YXIgcmVz
dWx0ID0gZ2V0U3VtKHRlc3RPYmopOworICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRl
c3RGYWlsZWQoIkV4cGVjdGVkIDQyIGZyb20gXCJzdW1cIiBnZXR0ZXIsIGdvdCAiICsgcmVzdWx0
KTsKK30KKwordGVzdFBhc3NlZCgiQWJsZSB0byBPU1IgZXhpdCBmcm9tIGFuIGlubGluZWQgdGFp
bCBjYWxsZWUgb2YgYSBnZXR0ZXIuIik7Cg==
</data>
<flag name="review"
          id="289715"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264657</attachid>
            <date>2015-11-02 19:43:56 -0800</date>
            <delta_ts>2015-11-02 21:25:05 -0800</delta_ts>
            <desc>Updated Patch</desc>
            <filename>150745-2.patch</filename>
            <type>text/plain</type>
            <size>14222</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxOTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDE1LTExLTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYkluc3BlY3RvciBjcmFzaGVkIHdoaWxlIHZpZXdpbmcgVGltZWxpbmUgd2hlbiByZWZy
ZXNoaW5nIGNubi5jb20gd2hpbGUgaXQgd2FzIGFscmVhZHkgbG9hZGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzQ1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHVyaW5nIE9TUiBleGl0LCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKCkgd2FzIHVzaW5nIHRoZSBjYWxsIGtpbmQgZnJvbSBhIHRhaWwg
Y2FsbCB0bworICAgICAgICBmaW5kIHRoZSBDYWxsTGlua0luZm8gLyBTdHViSW5mbyB0byBmaW5k
IHRoZSByZXR1cm4gUEMuICBJbnN0ZWFkIHdlIG5lZWQgdG8gZ2V0IHRoZSBjYWxsCisgICAgICAg
IHR5cGUgb2YgdGhlIHRydWUgY2FsbGVyLCB0aGF0IGlzIHRoZSBmdW5jdGlvbiB3ZSdsbCBiZSBy
ZXR1cm5pbmcgdG8uCisKKyAgICAgICAgVGhpcyBjYW4gYmUgZm91bmQgYnkgcmVtZW1iZXJpbmcg
dGhlIGxhc3QgY2FsbCB0eXBlIHdlIGZpbmQgd2hpbGUgd2Fsa2luZyB1cCB0aGUgaW5saW5lZAor
ICAgICAgICBmcmFtZXMgaW4gSW5saW5lQ2FsbEZyYW1lOjpnZXRDYWxsZXJTa2lwcGluZ0RlYWRG
cmFtZXMoKS4KKworICAgICAgICBXZSBjYW4gYWxzbyByZXRydW4gZGlyZWN0bHkgYmFjayB0byBh
IGdldHRlciBvciBzZXR0ZXIgY2FsbHNpdGUgd2l0aCB1c2luZyBhIHRodW5rLgorCisgICAgICAg
ICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OklubGluZUNhbGxG
cmFtZTo6Y29tcHV0ZUNhbGxlclNraXBwaW5nRGVhZEZyYW1lcyk6CisgICAgICAgIChKU0M6Oklu
bGluZUNhbGxGcmFtZTo6Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKTogTmVlZCB0byBlbGltaW5h
dGUgdGhlIHN0YWNrIHBvaW50ZXIgY2hlY2ssIGFzIGl0IGlzIHdyb25nCisgICAgICAgIGZvciBy
ZWlmaWVkIGlubGluZWQgZnJhbWVzIGNyZWF0ZWQgZHVyaW5nIE9TUiBleGl0LiAKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6YmFzZWxpbmVHZXR0ZXJS
ZXR1cm5UaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJhc2VsaW5lU2V0
dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dl
bmVyYXRvcnMuaDoKKwogMjAxNS0xMS0wMiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBXcm9uZyB2YWx1ZSByZWNvdmVyeSBmb3IgREZHIHRyeS9jYXRjaCB3aXRo
IGEgZ2V0dGVyIHRoYXQgdGhyb3dzIGR1cmluZyBhbiBJQyBtaXNzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCShyZXZpc2lvbiAx
OTE5MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NiwyMyArMTQ2LDMwIEBAIHN0cnVjdCBJbmxpbmVDYWxs
RnJhbWUgewogICAgICAgICByZXR1cm4gaXNUYWlsKHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgQ29kZU9yaWdpbiogY29tcHV0ZUNhbGxlclNraXBwaW5nRGVh
ZEZyYW1lcyhJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICBzdGF0aWMgQ29k
ZU9yaWdpbiogY29tcHV0ZUNhbGxlclNraXBwaW5nRGVhZEZyYW1lcyhJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgS2luZCogY2FsbGVyQ2FsbEtpbmQgPSBudWxscHRyKQogICAgIHsK
ICAgICAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKICAgICAgICAgYm9vbCB0YWlsQ2FsbGVl
OworICAgICAgICBpbnQgY2FsbEtpbmQ7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHRhaWxD
YWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpOworICAgICAgICAgICAgY2FsbEtpbmQg
PSBpbmxpbmVDYWxsRnJhbWUtPmtpbmQ7CiAgICAgICAgICAgICBjb2RlT3JpZ2luID0gJmlubGlu
ZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICB9IHdoaWxlIChpbmxpbmVDYWxs
RnJhbWUgJiYgdGFpbENhbGxlZSk7CisKICAgICAgICAgaWYgKHRhaWxDYWxsZWUpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoY2FsbGVyQ2FsbEtpbmQpCisgICAg
ICAgICAgICAqY2FsbGVyQ2FsbEtpbmQgPSBzdGF0aWNfY2FzdDxLaW5kPihjYWxsS2luZCk7CisK
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CiAgICAgfQogCi0gICAgQ29kZU9yaWdpbiogZ2V0
Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkKKyAgICBDb2RlT3JpZ2luKiBnZXRDYWxsZXJTa2lw
cGluZ0RlYWRGcmFtZXMoS2luZCogY2FsbGVyQ2FsbEtpbmQgPSBudWxscHRyKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbXB1dGVDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXModGhpcyk7CisgICAg
ICAgIHJldHVybiBjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKHRoaXMsIGNhbGxlckNh
bGxLaW5kKTsKICAgICB9CiAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGdldENhbGxlcklubGluZUZy
YW1lU2tpcHBpbmdEZWFkRnJhbWVzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE5MTkw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDggKzE0Niw4IEBAIHZvaWQgcmVpZnlJbmxpbmVk
Q2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2Nv
ZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lOyBjb2Rl
T3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0Rl
YWRGcmFtZXMoKSkgewogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqY29kZU9yaWdpbik7Ci0gICAg
ICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNr
aXBwaW5nRGVhZEZyYW1lcygpOwotICAgICAgICB2b2lkKiB0cnVlUmV0dXJuUEMgPSBudWxscHRy
OworICAgICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQgdHJ1ZUNhbGxlckNhbGxLaW5kOworICAg
ICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJT
a2lwcGluZ0RlYWRGcmFtZXMoJnRydWVDYWxsZXJDYWxsS2luZCk7CiAgICAgICAgIEdQUlJlZyBj
YWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOwogCiAgICAgICAgIGlm
ICghdHJ1ZUNhbGxlcikgewpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUlu
ZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIHZvaWQqIGp1bXBU
YXJnZXQgPSBudWxscHRyOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+
a2luZCkgeworICAgICAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgogICAgICAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1l
OjpDYWxsVmFyYXJnczoKQEAgLTE4MiwyMiArMTgyLDE0IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7
CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwogCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgICAgICAgICAgICAganVt
cFRhcmdldCA9IGppdC52bSgpLT5nZXRDVElTdHViKGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2Fs
bDoKLSAgICAgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGppdC52bSgpLT5nZXRDVElTdHVi
KGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0cnVlUmV0dXJuUEMgPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCisgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0gfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxs
RnJhbWUpIHsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKApAQCAtMjEwLDkgKzIwMiw2IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQot
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0
cnVlUmV0dXJuUEMpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihi
YXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29kZUJsb2Nr
KSkpOwogCiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVl
IHNhdmUgcmVnaXN0ZXJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE5MTkwNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjEs
NyArNTYxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKgogCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7Ci0gICAgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE5MTkw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMwLDgzICs1MzAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5y
ZWFjaGFibGVHZW5lcmF0CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
dW5yZWFjaGFibGUgdGh1bmsiKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGlu
ZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBKU0ludGVyZmFjZUpJ
VCBqaXQodm0pOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNlbHNlCi0gICAgaml0LnNldHVw
UmVzdWx0cyhHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgCi0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsKLSAgICBudW1iZXJPZlBhcmFtZXRl
cnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4KLSAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsg
Ly8gVGhlIHRydWUgcmV0dXJuIFBDLgotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0Zv
ckNhbGwgPQotICAgICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQ
YXJhbWV0ZXJzOwotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAg
ICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7Ci0gICAgCi0gICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsID0KLSAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwotICAgICAgICAgICAgCi0gICAgLy8gVGhl
IHJlYWwgcmV0dXJuIGFkZHJlc3MgaXMgc3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBh
c3NlZCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzCi0gICAgLy8gJ3RoaXMnLiBTbyBhcmd1bWVudCBh
dCBpbmRleCAxIGlzIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAgICBqaXQubG9hZFB0cigKLSAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxKS5vZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNp
emVvZihSZWdpc3RlcikpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMik7Ci0gICAgCi0gICAgaml0
LmFkZFB0cigKLSAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgCi0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIpOwotCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJiYXNlbGluZSBnZXR0ZXIgcmV0dXJu
IHRodW5rIikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYmFzZWxpbmVTZXR0ZXJSZXR1
cm5UaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsK
LSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAwOwotICAgIG51bWJlck9m
UGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFyZ3VtZW50LgotICAgIG51bWJlck9mUGFyYW1l
dGVycysrOyAvLyBUaGUgdmFsdWUgdG8gc2V0LgotICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAv
LyBUaGUgdHJ1ZSByZXR1cm4gUEMuCi0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9y
Q2FsbCA9Ci0gICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1iZXJPZlBh
cmFtZXRlcnM7Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAg
ICAgICBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKTsKLSAgICAKLSAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0Zv
ckNhbGwgPQotICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0gICAgICAgICAgICAKLSAgICAvLyBUaGUg
cmVhbCByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgYWJvdmUgdGhlIGFyZ3VtZW50cy4gV2UgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHNvCi0gICAgLy8gdGhlIGFyZ3VtZW50IGF0IGluZGV4IDIgaXMg
dGhlIHJldHVybiBhZGRyZXNzLgotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLAotICAgICAgICAgICAgKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDIpLm9m
ZnNldCgpIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVy
KSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QyKTsKLSAgICAKLSAgICBqaXQuYWRkUHRyKAotICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpLAotICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7Ci0KLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAoImJhc2VsaW5lIHNldHRlciByZXR1cm4gdGh1bmsiKSk7Ci19
Ci0KIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwg
Vk0qIHZtKQogewogICAgIC8vIGxvYWQgc3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDE5MTkwNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDkgKzQ5LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZVRhaWxDYWxsR2VuZQogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcihWTSogdm0pOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KTsKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihWTSop
OwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2x6MzJUaHVua0dlbmVyYXRvcihWTSopOwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTkxOTA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTUtMTEtMDIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViSW5zcGVjdG9yIGNyYXNoZWQgd2hpbGUgdmlld2luZyBUaW1l
bGluZSB3aGVuIHJlZnJlc2hpbmcgY25uLmNvbSB3aGlsZSBpdCB3YXMgYWxyZWFkeSBsb2FkaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgcmVn
cmVzc2lvbiB0ZXN0cy4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MtMTUwNzQ1LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy0xNTA3NDUuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwNzQ1LmpzOiBBZGRlZC4KKyAgICAgICAg
KFRlc3QpOgorICAgICAgICAoVGVzdC5wcm90b3R5cGUuZ2V0IHN1bSk6CisgICAgICAgIChUZXN0
LnByb3RvdHlwZS5kb1N1bSk6CisgICAgICAgIChnZXRTdW0pOgorCiAyMDE1LTExLTAyICBSeWFu
IEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIE1hcmtpbmcgZmFzdC90
ZXh0L211bHRpcGxlLWZlYXR1cmUtcHJvcGVydGllcy5odG1sIGFzIGZsYWt5IG9uIHdpbgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xNTA3NDUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwNzQ1LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwNzQ1LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitSZWdyZXNzaW9uIHRlc3QgZm9yIDE1MDc0NQorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBBYmxlIHRvIE9TUiBleGl0IGZyb20g
YW4gaW5saW5lZCB0YWlsIGNhbGxlZSBvZiBhIGdldHRlci4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzLTE1MDc0NS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUw
NzQ1Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTE1MDc0NS5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWdyZXNzLTE1MDc0NS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcmVncmVzcy0x
NTA3NDUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jl
c3MtMTUwNzQ1LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L3JlZ3Jlc3MtMTUwNzQ1LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKK2Rlc2Ny
aXB0aW9uKCJSZWdyZXNzaW9uIHRlc3QgZm9yIDE1MDc0NSIpOworCisvLyBXZSBzaG91bGQgYmUg
YWJsZSB0byBPUlMgZXhpdCBmcm9tIGFuIGlubGluZWQgdGFpbCBjYWxsZWUgb2YgYSBnZXR0ZXIu
ICBUaGlzIHRlc3Qgc2hvdWxkbid0IGNyYXNoLgorCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFRl
c3QgeworICAgIGNvbnN0cnVjdG9yKGEsIGIpCisgICAgeworICAgICAgICB0aGlzLmEgPSBhOwor
ICAgICAgICB0aGlzLmIgPSBiOworICAgICAgICB0aGlzLmNhbGxDb3VudCA9IDA7CisgICAgfQor
CisgICAgZ2V0IHN1bSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5kb1N1bSgxLCAyKTsK
KyAgICB9CisKKyAgICBkb1N1bShkdW1teTEsIGR1bW15MikKKyAgICB7CisgICAgICAgIHRoaXMu
Y2FsbENvdW50Kys7CisKKyAgICAgICAgaWYgKHRoaXMuY2FsbENvdW50ID09IDQ5MDAwKQorICAg
ICAgICAgICAgdGhpcy5kZmdDb21waWxlZCA9IHRydWU7CisKKyAgICAgICAgaWYgKHRoaXMuY2Fs
bENvdW50ID09IDE5OTAwMCkKKyAgICAgICAgICAgIHRoaXMuZnRsQ29tcGlsZWQgPSB0cnVlOwor
CisgICAgICAgIHJldHVybiB0aGlzLmEgKyB0aGlzLmI7CisgICAgfQorfQorCit2YXIgdGVzdE9i
aiA9IG5ldyBUZXN0KDQwLCAyKTsKKworZnVuY3Rpb24gZ2V0U3VtKG8pCit7CisgICAgcmV0dXJu
IG8uc3VtOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDUwMDAwMDsgaSsrKSB7CisgICAgdmFy
IHJlc3VsdCA9IGdldFN1bSh0ZXN0T2JqKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAg
ICB0ZXN0RmFpbGVkKCJFeHBlY3RlZCA0MiBmcm9tIFwic3VtXCIgZ2V0dGVyLCBnb3QgIiArIHJl
c3VsdCk7Cit9CisKK3Rlc3RQYXNzZWQoIkFibGUgdG8gT1NSIGV4aXQgZnJvbSBhbiBpbmxpbmVk
IHRhaWwgY2FsbGVlIG9mIGEgZ2V0dGVyLiIpOwo=
</data>
<flag name="review"
          id="289751"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>