<?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>50929</bug_id>
          
          <creation_ts>2010-12-13 09:55:06 -0800</creation_ts>
          <short_desc>Must generate INVALID_VALUE errors for strings containing out-of-range characters</short_desc>
          <delta_ts>2011-01-13 12:09:50 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52022</blocked>
    
    <blocked>52390</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>oliver</cc>
    
    <cc>senorblanco</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>321171</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-13 09:55:06 -0800</bug_when>
    <thetext>James Robinson points out in https://www.khronos.org/webgl/public-mailing-list/archives/1012/msg00133.html that there are several WebGL APIs accepting DOMString. Those mirroring OpenGL ES 2.0 APIs are bindAttribLocation(), getAttribLocation(), getUniformLocation(), and shaderSource(). The GLSL ES specification restricts the valid character range of the incoming shader strings, and therefore implicitly the names of attributes and uniforms.

The WebGL implementation needs to do a pre-pass over the incoming strings to these APIs to ensure that they do not contain out-of-range characters before passing them down to lower levels, and generate an INVALID_VALUE error if they do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327458</commentid>
    <comment_count>1</comment_count>
      <attachid>77595</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 17:41:22 -0800</bug_when>
    <thetext>Created attachment 77595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327460</commentid>
    <comment_count>2</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 17:45:08 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=77595) [details]
&gt; Patch

Will sync the test with khronos once reviewed.

Also, I already fixed the khronos shaders with invalid characters (un-intended), mostly due to invalid characters in Apple/Chromium copyright headers.

Note that it&apos;s impossible to test the behavior for getAttribLocation/getUniformLocation because with invalid characters won&apos;t be part of a legal variable name, so with/without this patch, the behaviors are the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327462</commentid>
    <comment_count>3</comment_count>
      <attachid>77596</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 17:48:51 -0800</bug_when>
    <thetext>Created attachment 77596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327464</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 17:49:21 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=77596) [details]
&gt; Patch

This fixed an error in the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329115</commentid>
    <comment_count>5</comment_count>
      <attachid>77596</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-04 12:10:19 -0800</bug_when>
    <thetext>Comment on attachment 77596
Patch

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

&gt; LayoutTests/fast/canvas/webgl/invalid-passed-params.html:76
&gt; +shouldGenerateGLError(context, context.NO_ERROR, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# &apos;)&quot;);
&gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# $&apos;)&quot;);
&gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# `&apos;)&quot;);
&gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# @&apos;)&quot;);

Could you expand the failing test cases to include all of the forbidden printing characters? Also, it might be a good idea to make this syntactially valid GLSL. You could do so by enclosing the entire string in a comment.

&gt; LayoutTests/fast/canvas/webgl/invalid-passed-params.html:83
&gt; +debug(&quot;Test bindAttribLocation() with invalid characters&quot;);
&gt; +var program = context.createProgram();
&gt; +shouldGenerateGLError(context, context.NO_ERROR, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09&apos;)&quot;);
&gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09$&apos;)&quot;);
&gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09`&apos;)&quot;);
&gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09@&apos;)&quot;);

Same comment about testing all of the forbidden characters. Also, would it be difficult to test the other affected entry points (getAttribLocation, getUniform)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329116</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-04 12:12:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Note that it&apos;s impossible to test the behavior for getAttribLocation/getUniformLocation because with invalid characters won&apos;t be part of a legal variable name, so with/without this patch, the behaviors are the same.

I don&apos;t follow this; presumably non-compliant implementations might silently allow the illegal characters in and return -1 from getAttribLocation/getUniformLocation without generating an INVALID_VALUE error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329125</commentid>
    <comment_count>7</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-04 12:24:51 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #2)
&gt; &gt; Note that it&apos;s impossible to test the behavior for getAttribLocation/getUniformLocation because with invalid characters won&apos;t be part of a legal variable name, so with/without this patch, the behaviors are the same.
&gt; 
&gt; I don&apos;t follow this; presumably non-compliant implementations might silently allow the illegal characters in and return -1 from getAttribLocation/getUniformLocation without generating an INVALID_VALUE error.

My question is whether we should generate INVALID_VALUE or not.  Return -1 already indicates invalid input value.  If we pass invalid characters into GLES2, they will simply return -1 without an error.  Shouldn&apos;t the behavior be the same here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329126</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-04 12:25:15 -0800</bug_when>
    <thetext>Will do.

(In reply to comment #5)
&gt; (From update of attachment 77596 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77596&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/invalid-passed-params.html:76
&gt; &gt; +shouldGenerateGLError(context, context.NO_ERROR, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# &apos;)&quot;);
&gt; &gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# $&apos;)&quot;);
&gt; &gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# `&apos;)&quot;);
&gt; &gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.shaderSource(shader, &apos;azAZ_09.+-/*%&lt;&gt;[](){}^|&amp;~=!:;,?# @&apos;)&quot;);
&gt; 
&gt; Could you expand the failing test cases to include all of the forbidden printing characters? Also, it might be a good idea to make this syntactially valid GLSL. You could do so by enclosing the entire string in a comment.
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/invalid-passed-params.html:83
&gt; &gt; +debug(&quot;Test bindAttribLocation() with invalid characters&quot;);
&gt; &gt; +var program = context.createProgram();
&gt; &gt; +shouldGenerateGLError(context, context.NO_ERROR, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09&apos;)&quot;);
&gt; &gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09$&apos;)&quot;);
&gt; &gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09`&apos;)&quot;);
&gt; &gt; +shouldGenerateGLError(context, context.INVALID_VALUE, &quot;context.bindAttribLocation(program, 1, &apos;azAZ_09@&apos;)&quot;);
&gt; 
&gt; Same comment about testing all of the forbidden characters. Also, would it be difficult to test the other affected entry points (getAttribLocation, getUniform)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329153</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-04 12:59:51 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; Note that it&apos;s impossible to test the behavior for getAttribLocation/getUniformLocation because with invalid characters won&apos;t be part of a legal variable name, so with/without this patch, the behaviors are the same.
&gt; &gt; 
&gt; &gt; I don&apos;t follow this; presumably non-compliant implementations might silently allow the illegal characters in and return -1 from getAttribLocation/getUniformLocation without generating an INVALID_VALUE error.
&gt; 
&gt; My question is whether we should generate INVALID_VALUE or not.  Return -1 already indicates invalid input value.  If we pass invalid characters into GLES2, they will simply return -1 without an error.  Shouldn&apos;t the behavior be the same here?

By the same argument the test for bindAttribLocation shouldn&apos;t be ensuring that INVALID_VALUE is generated for strings containing illegal characters. All of these entry points are implicitly dealing with GLSL ES compliant strings, and as has been pointed out there might be bugs in OpenGL ES drivers receiving utf-8 encoded strings with out-of-range characters. I think the best thing to do would be to make the test stringent, forbidding illegal identifiers from being passed to bindAttribLocation, getAttribLocation, and getUniformLocation, and loosen up the tests if other vendors complain for some reason that these requirements are too stringent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329806</commentid>
    <comment_count>10</comment_count>
      <attachid>78049</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-05 14:47:57 -0800</bug_when>
    <thetext>Created attachment 78049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330205</commentid>
    <comment_count>11</comment_count>
      <attachid>78049</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-06 10:25:49 -0800</bug_when>
    <thetext>Comment on attachment 78049
Patch

Looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330259</commentid>
    <comment_count>12</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 11:34:31 -0800</bug_when>
    <thetext>Committed r75175: &lt;http://trac.webkit.org/changeset/75175&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330348</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-06 13:04:32 -0800</bug_when>
    <thetext>This commit seems to have caused glsl-conformance layout test to start crashing:

base::debug::StackTrace::StackTrace() [0x83c65bb]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x83b8fbd]
	0x4001c420
	byte_scan [0x8f8c49a]
	yylex_CPP [0x8f8bf5c]
	yylex() [0x8f902d5]
	yyparse() [0x8f9183f]
	PaParseStrings() [0x8f80fcc]
	TCompiler::compile() [0x8f6b1c1]
	ShCompile [0x8f69e80]
	WebKit::WebGraphicsContext3DDefaultImpl::angleValidateShaderSource() [0x8dee013]
	WebKit::WebGraphicsContext3DDefaultImpl::compileShader() [0x8def6b1]
	WebCore::WebGLRenderingContextInternal::compileShaderCallback() [0x826d19b]
	0x440549f2
	0x44231888
	0x43f43630
	0x439d0a79
	0x439c5e22
	v8::internal::Invoke() [0x844b703]
	WebCore::V8Proxy::handleOutOfMemory() [0x873de27]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330386</commentid>
    <comment_count>14</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 13:43:33 -0800</bug_when>
    <thetext>Add the failing test to test_expectations.txt in r75194.

Reopen this bug to investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330457</commentid>
    <comment_count>15</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-06 14:59:29 -0800</bug_when>
    <thetext>After more investigation, it turns out that the test does not crash with command-buffer port, only with in-process-webgl.

There should be an existing bug in the in-process-webgl implementation that&apos;s exposed by this patch.

Closing this bug.  Create another bug to track down this issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77595</attachid>
            <date>2010-12-28 17:41:22 -0800</date>
            <delta_ts>2010-12-28 17:48:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50929-20101228174121.patch</filename>
            <type>text/plain</type>
            <size>7492</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDczMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMTItMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdXN0IGdl
bmVyYXRlIElOVkFMSURfVkFMVUUgZXJyb3JzIGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgb3V0LW9m
LXJhbmdlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwOTI5CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOiBWYWxpZGF0ZSBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBHTFNMIEVTIDEuMCBz
cGVjIHNlY3Rpb24gMy4xLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisKIDIwMTAtMTItMjggIERhbmllbCBC
YXRlcyAgPGRiYXRlc0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiA3NDcyMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMzEgQEAgbmFtZXNwYWNlIHsK
ICAgICAgICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwogICAgIH0KIAorICAgIC8vIFJldHVybiB0
cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVk
IGluCisgICAgLy8gT3BlbkdMIEVTIDEuMDAgc3BlYyBzZWN0aW9uIDMuMS4KKyAgICBib29sIHZh
bGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAgICB7CisgICAgICAgIC8vIFByaW50
aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBAIFwgJyBERUwuCisgICAgICAg
IGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAgICAmJiBjICE9ICciJyAmJiBjICE9
ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdcXCcgJiYgYyAhPSAnXCcnKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIEhvcml6b250YWwgdGFiLCBsaW5l
IGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFnZSByZXR1cm4KKyAgICAgICAg
Ly8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49IDkgJiYgYyA8PSAxMykKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gQ2FsbCB2YWxpZGF0ZUNoYXJhY3RlciBvbiBlYWNoIGNoYXJhY3RlciBvZiBzdHJpbmcuCisg
ICAgYm9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiB9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogY2xhc3MgV2ViR0xTdGF0ZVJlc3RvcmVyIHsK
QEAgLTMwNyw2ICszMzIsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRy
aWJMbwogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICgh
dmFsaWRhdGVTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KQEAgLTE0NTEsNiArMTQ4MCw4IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEF0dHJpYkxvY2EKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm4g
LTE7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOwog
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgbmFtZSk7CiB9CiAKQEAgLTIwNzYsNiArMjEwNyw4IEBAIFBhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IFdlYkdMUmUKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAg
IHJldHVybiAwOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcobmFtZSkpCisgICAgICAgIHJldHVy
biAwOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgbG9uZyB1bmlm
b3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8o
cHJvZ3JhbSksIG5hbWUpOwogICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCkBAIC0yNDYw
LDYgKzI0OTMsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZQog
ICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0cmluZyhzdHJpbmcpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIpLCBzdHJp
bmcpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3NDczMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTI4ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTXVzdCBn
ZW5lcmF0ZSBJTlZBTElEX1ZBTFVFIGVycm9ycyBmb3Igc3RyaW5ncyBjb250YWluaW5nIG91dC1v
Zi1yYW5nZSBjaGFyYWN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MDkyOQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxpZC1w
YXNzZWQtcGFyYW1zLWV4cGVjdGVkLnR4dDogQWRkIHRlc3QgY2FzZXMgZm9yIGludmFsaWQgY2hh
cmFjdGVycy4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJh
bXMuaHRtbDogRGl0dG8uCisKIDIwMTAtMTItMjggIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0u
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ludmFsaWQtcGFz
c2VkLXBhcmFtcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDc0NzIxKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1zLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTYgQEAgUEFTUyBjb250ZXh0LnNjaXNzb3IoMCwgMCwg
MTYsIDE2KSBnZW5lcgogVGVzdCB2aWV3cG9ydCgpIHdpdGggbmVnYXRpdmUgd2lkdGgvaGVpZ2h0
CiBQQVNTIGNvbnRleHQudmlld3BvcnQoMCwgMCwgLTIsIC0yKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQudmlld3BvcnQoMCwgMCwgMTYs
IDE2KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgorVGVzdCBzaGFkZXJT
b3VyY2UoKSB3aXRoIGludmFsaWQgY2hhcmFjdGVycworUEFTUyBjb250ZXh0LnNoYWRlclNvdXJj
ZShzaGFkZXIsICdhekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAnKSBnZW5lcmF0ZWQg
ZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgorUEFTUyBjb250ZXh0LnNoYWRlclNvdXJjZShz
aGFkZXIsICdhekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAkJykgZ2VuZXJhdGVkIGV4
cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LnNoYWRlclNvdXJj
ZShzaGFkZXIsICdhekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyBgJykgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LnNoYWRlclNv
dXJjZShzaGFkZXIsICdhekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyBAJykgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorVGVzdCBiaW5kQXR0cmliTG9j
YXRpb24oKSB3aXRoIGludmFsaWQgY2hhcmFjdGVycworUEFTUyBjb250ZXh0LmJpbmRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCAxLCAnYXpBWl8wOScpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJv
cjogTk9fRVJST1IuCitQQVNTIGNvbnRleHQuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEs
ICdhekFaXzA5JCcpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4K
K1BBU1MgY29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgJ2F6QVpfMDlgJykg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0
LmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAxLCAnYXpBWl8wOUAnKSBnZW5lcmF0ZWQgZXhw
ZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxpZC1w
YXNzZWQtcGFyYW1zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1zLmh0bWwJKHJldmlzaW9uIDc0NzIxKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1zLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDIwIEBAIGRlYnVnKCJUZXN0IHZpZXdwb3J0KCkgd2l0
aCBuZWdhdGl2ZSB3aWQKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklO
VkFMSURfVkFMVUUsICJjb250ZXh0LnZpZXdwb3J0KDAsIDAsIC0yLCAtMikiKTsKIHNob3VsZEdl
bmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC52aWV3cG9y
dCgwLCAwLCAxNiwgMTYpIik7CiAKK2RlYnVnKCJUZXN0IHNoYWRlclNvdXJjZSgpIHdpdGggaW52
YWxpZCBjaGFyYWN0ZXJzIik7Cit2YXIgc2hhZGVyID0gY29udGV4dC5jcmVhdGVTaGFkZXIoY29u
dGV4dC5WRVJURVhfU0hBREVSKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250
ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCAnYXpBWl8wOS4rLS8q
JTw+W10oKXt9Xnwmfj0hOjssPyMgJykiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0
LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LnNoYWRlclNvdXJjZShzaGFkZXIsICdh
ekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAkJykiKTsKK3Nob3VsZEdlbmVyYXRlR0xF
cnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LnNoYWRlclNvdXJj
ZShzaGFkZXIsICdhekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyBgJykiKTsKK3Nob3Vs
ZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0
LnNoYWRlclNvdXJjZShzaGFkZXIsICdhekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyBA
JykiKTsKKworZGVidWcoIlRlc3QgYmluZEF0dHJpYkxvY2F0aW9uKCkgd2l0aCBpbnZhbGlkIGNo
YXJhY3RlcnMiKTsKK3ZhciBwcm9ncmFtID0gY29udGV4dC5jcmVhdGVQcm9ncmFtKCk7CitzaG91
bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuYmlu
ZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICdhekFaXzA5JykiKTsKK3Nob3VsZEdlbmVyYXRl
R0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmJpbmRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCAxLCAnYXpBWl8wOSQnKSIpOworc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuYmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIDEsICdhekFaXzA5YCcpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3Io
Y29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5iaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgMSwgJ2F6QVpfMDlAJykiKTsKKwogZGVidWcoIiIpCiBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77596</attachid>
            <date>2010-12-28 17:48:51 -0800</date>
            <delta_ts>2011-01-05 14:47:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50929-20101228174850.patch</filename>
            <type>text/plain</type>
            <size>7560</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDczMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMTItMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdXN0IGdl
bmVyYXRlIElOVkFMSURfVkFMVUUgZXJyb3JzIGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgb3V0LW9m
LXJhbmdlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwOTI5CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOiBWYWxpZGF0ZSBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBHTFNMIEVTIDEuMCBz
cGVjIHNlY3Rpb24gMy4xLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisKIDIwMTAtMTItMjggIERhbmllbCBC
YXRlcyAgPGRiYXRlc0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CShyZXZpc2lvbiA3NDcyMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMzIgQEAgbmFtZXNwYWNlIHsK
ICAgICAgICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwogICAgIH0KIAorICAgIC8vIFJldHVybiB0
cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVk
IGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9uIDMuMS4KKyAgICBib29sIHZhbGlk
YXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAgICB7CisgICAgICAgIC8vIFByaW50aW5n
IGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBAIFwgJyBERUwuCisgICAgICAgIGlm
IChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAgICAmJiBjICE9ICciJyAmJiBjICE9ICck
JyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdcXCcgJiYgYyAhPSAnXCcnKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIEhvcml6b250YWwgdGFiLCBsaW5lIGZl
ZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFnZSByZXR1cm4KKyAgICAgICAgLy8g
YXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49IDkgJiYgYyA8PSAxMykKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8gdGhl
IEFTQ0lJIHN1YnNldAorICAgIC8vIGFzIGRlZmluZWQgaW4gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUNoYXJhY3RlcihzdHJpbmdbaV0pKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIGFub255bW91cwogCiBjbGFzcyBXZWJHTFN0YXRl
UmVzdG9yZXIgewpAQCAtMzA3LDYgKzMzMywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmluZEF0dHJpYkxvCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0
TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm47
CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQpAQCAtMTQ1MSw2ICsxNDgxLDggQEAgaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0cmliTG9jYQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAg
ICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKG5hbWUpKQorICAgICAgICBy
ZXR1cm4gLTE7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKIH0KIApAQCAtMjA3Niw2ICsyMTA4LDggQEAgUGFzc1Jl
ZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZQogICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFt
KSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKICAg
ICBsb25nIHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9i
amVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CiAgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAt
MSkKQEAgLTI0NjAsNiArMjQ5NCwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hh
ZGVyU291cmNlCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RyaW5nKHN0cmluZykpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNo
YWRlciksIHN0cmluZyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc0NzMzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMjggIFpoZW55YW8gTW8gIDx6bW9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNdXN0IGdlbmVyYXRlIElOVkFMSURfVkFMVUUgZXJyb3JzIGZvciBzdHJpbmdzIGNvbnRh
aW5pbmcgb3V0LW9mLXJhbmdlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTI5CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNlcyBmb3Ig
aW52YWxpZCBjaGFyYWN0ZXJzLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2ludmFsaWQt
cGFzc2VkLXBhcmFtcy5odG1sOiBEaXR0by4KKwogMjAxMC0xMi0yOCAgRGFuaWVsIEJhdGVzICA8
ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ludmFsaWQtcGFzc2VkLXBhcmFtcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
aW52YWxpZC1wYXNzZWQtcGFyYW1zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzQ3MjEpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxNiBAQCBQQVNTIGNvbnRleHQuc2Np
c3NvcigwLCAwLCAxNiwgMTYpIGdlbmVyCiBUZXN0IHZpZXdwb3J0KCkgd2l0aCBuZWdhdGl2ZSB3
aWR0aC9oZWlnaHQKIFBBU1MgY29udGV4dC52aWV3cG9ydCgwLCAwLCAtMiwgLTIpIGdlbmVyYXRl
ZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBBU1MgY29udGV4dC52aWV3cG9y
dCgwLCAwLCAxNiwgMTYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCitU
ZXN0IHNoYWRlclNvdXJjZSgpIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzCitQQVNTIGNvbnRleHQu
c2hhZGVyU291cmNlKHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58Jn49ITo7LD8jICcp
IGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCitQQVNTIGNvbnRleHQuc2hh
ZGVyU291cmNlKHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58Jn49ITo7LD8jICQnKSBn
ZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQQVNTIGNvbnRleHQu
c2hhZGVyU291cmNlKHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58Jn49ITo7LD8jIGAn
KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQQVNTIGNvbnRl
eHQuc2hhZGVyU291cmNlKHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58Jn49ITo7LD8j
IEAnKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitUZXN0IGJp
bmRBdHRyaWJMb2NhdGlvbigpIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzCitQQVNTIGNvbnRleHQu
YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICdhekFaXzA5JykgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBOT19FUlJPUi4KK1BBU1MgY29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgMSwgJ2F6QVpfMDkkJykgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZB
TElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAxLCAn
YXpBWl8wOWAnKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQ
QVNTIGNvbnRleHQuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICdhekFaXzA5QCcpIGdl
bmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIAogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMuaHRtbAkocmV2aXNpb24gNzQ3
MjEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJh
bXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMjAgQEAgZGVidWcoIlRlc3Qgdmll
d3BvcnQoKSB3aXRoIG5lZ2F0aXZlIHdpZAogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQs
IGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQudmlld3BvcnQoMCwgMCwgLTIsIC0yKSIp
Owogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuTk9fRVJST1IsICJjb250
ZXh0LnZpZXdwb3J0KDAsIDAsIDE2LCAxNikiKTsKIAorZGVidWcoIlRlc3Qgc2hhZGVyU291cmNl
KCkgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMiKTsKK3ZhciBzaGFkZXIgPSBjb250ZXh0LmNyZWF0
ZVNoYWRlcihjb250ZXh0LlZFUlRFWF9TSEFERVIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNv
bnRleHQsIGNvbnRleHQuTk9fRVJST1IsICJjb250ZXh0LnNoYWRlclNvdXJjZShzaGFkZXIsICdh
ekFaXzA5ListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAnKSIpOworc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuc2hhZGVyU291cmNl
KHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58Jn49ITo7LD8jICQnKSIpOworc2hvdWxk
R2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQu
c2hhZGVyU291cmNlKHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58Jn49ITo7LD8jIGAn
KSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxV
RSwgImNvbnRleHQuc2hhZGVyU291cmNlKHNoYWRlciwgJ2F6QVpfMDkuKy0vKiU8PltdKCl7fV58
Jn49ITo7LD8jIEAnKSIpOworCitkZWJ1ZygiVGVzdCBiaW5kQXR0cmliTG9jYXRpb24oKSB3aXRo
IGludmFsaWQgY2hhcmFjdGVycyIpOwordmFyIHByb2dyYW0gPSBjb250ZXh0LmNyZWF0ZVByb2dy
YW0oKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAi
Y29udGV4dC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgJ2F6QVpfMDknKSIpOworc2hv
dWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRl
eHQuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICdhekFaXzA5JCcpIik7CitzaG91bGRH
ZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5i
aW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgJ2F6QVpfMDlgJykiKTsKK3Nob3VsZEdlbmVy
YXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCAxLCAnYXpBWl8wOUAnKSIpOworCiBkZWJ1ZygiIikKIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78049</attachid>
            <date>2011-01-05 14:47:57 -0800</date>
            <delta_ts>2011-01-06 10:25:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50929-20110105144756.patch</filename>
            <type>text/plain</type>
            <size>17214</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDczMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMTItMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdXN0IGdl
bmVyYXRlIElOVkFMSURfVkFMVUUgZXJyb3JzIGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgb3V0LW9m
LXJhbmdlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwOTI5CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOiBWYWxpZGF0ZSBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBHTFNMIEVTIDEuMCBz
cGVjIHNlY3Rpb24gMy4xLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKTogSGVscGVyIGZ1bmN0aW9uIHRvIHBl
cmZvcm0gdGhlIGNoYXJhY3RlciB2YWxpZGF0aW9uLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNsYXJlIHZhbGlkYXRlU3RyaW5nKCkuCisKIDIwMTAt
MTItMjggIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3NDcyMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsMjEg
QEAgbmFtZXNwYWNlIHsKICAgICAgICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwogICAgIH0KIAor
ICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFTQ0lJIHN1
YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9uIDMuMS4K
KyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAgICB7CisgICAg
ICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBAIFwgJyBE
RUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAgICAmJiBjICE9
ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdcXCcgJiYg
YyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIEhvcml6b250
YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFnZSByZXR1
cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49IDkgJiYgYyA8
PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCiB9IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogY2xhc3MgV2ViR0xTdGF0ZVJlc3Rv
cmVyIHsKQEAgLTMwNyw2ICszMjIsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZEF0dHJpYkxvCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCF2YWxpZGF0ZVN0cmluZyhuYW1lKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4
dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xNDUxLDYgKzE0
NjgsOCBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWJMb2NhCiB7CiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRh
dGVTdHJpbmcobmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9jb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogfQogCkBA
IC0yMDc2LDYgKzIwOTUsOCBAQCBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJH
TFJlCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAo
IXZhbGlkYXRlU3RyaW5nKG5hbWUpKQorICAgICAgICByZXR1cm4gMDsKICAgICBXZWJHTFN0YXRl
UmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIGxvbmcgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKICAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQpAQCAtMjQ2MCw2ICsyNDgxLDggQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZQogICAgIFVOVVNFRF9QQVJBTShlYyk7
CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIp
KQogICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhzdHJpbmcpKQorICAg
ICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNo
YWRlciksIHN0cmluZyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
QEAgLTM2NzUsNiArMzY5OCwxNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTaXplCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghdmFsaWRh
dGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBl
KHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7CiAgICAgc3dpdGNo
IChmb3JtYXQpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gNzQ3MjEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsNiArNTE1LDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBhbmQgcmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2
ZSBpbnB1dHM7IG90aGVyd2lzZSwgcmV0dXJuIHRydWUuCiAgICAgYm9vbCB2YWxpZGF0ZVNpemUo
bG9uZyB4LCBsb25nIHkpOwogCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFs
bCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQorICAgIC8vIEFTQ0lJIHN1
YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9v
bCB2YWxpZGF0ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKwogICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBjaGVjayB0YXJnZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KICAgICAv
LyBHZW5lcmF0ZSBHTCBlcnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9y
IHRleHR1cmUgYm91bmQgaXMKICAgICAvLyBudWxsLiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRl
eHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0NzMzKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTAtMTItMjggIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNdXN0IGdlbmVyYXRlIElOVkFMSURfVkFM
VUUgZXJyb3JzIGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgb3V0LW9mLXJhbmdlIGNoYXJhY3RlcnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTI5CisK
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0
ZWQudHh0OiBBZGQgdGVzdCBjYXNlcyBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzLgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2ludmFsaWQtcGFzc2VkLXBhcmFtcy5odG1sOiBEaXR0by4KKwog
MjAxMC0xMi0yOCAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2ludmFsaWQtcGFzc2VkLXBhcmFtcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1zLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNzQ3MjEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9p
bnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDE2
ICsyLDE5IEBAIFRlc3QgZm9yIGludmFsaWQgcGFzc2VkIHBhcmFtZXRlcnMKIAogT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgogCisKIFRlc3QgY3JlYXRlU2hhZGVyKCkKIFBBU1MgY29udGV4dC5j
cmVhdGVTaGFkZXIoY29udGV4dC5GUkFHTUVOVF9TSEFERVIpIGdlbmVyYXRlZCBleHBlY3RlZCBH
TCBlcnJvcjogTk9fRVJST1IuCiBQQVNTIGNvbnRleHQuY3JlYXRlU2hhZGVyKGNvbnRleHQuVkVS
VEVYX1NIQURFUikgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KIFBBU1Mg
Y29udGV4dC5jcmVhdGVTaGFkZXIoMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZB
TElEX0VOVU0uCiBQQVNTIGNvbnRleHQuY3JlYXRlU2hhZGVyKGNvbnRleHQuVFJJQU5HTEVTKSBn
ZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfRU5VTS4KKwogVGVzdCBjbGVhcigp
CiBQQVNTIGNvbnRleHQuY2xlYXIoZGVza3RvcEdMWydBQ0NVTV9CVUZGRVJfQklUJ10pIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBBU1MgY29udGV4dC5jbGVh
cihkZXNrdG9wR0xbJ0FDQ1VNX0JVRkZFUl9CSVQnXSB8IGNvbnRleHQuQ09MT1JfQlVGRkVSX0JJ
VCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250
ZXh0LmNsZWFyKGRlc2t0b3BHTFsnQUNDVU1fQlVGRkVSX0JJVCddIHwgY29udGV4dC5DT0xPUl9C
VUZGRVJfQklUIHwgY29udGV4dC5ERVBUSF9CVUZGRVJfQklUIHwgY29udGV4dC5TVEVOQ0lMX0JV
RkZFUl9CSVQpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBB
U1MgY29udGV4dC5jbGVhcihjb250ZXh0LkNPTE9SX0JVRkZFUl9CSVQgfCBjb250ZXh0LkRFUFRI
X0JVRkZFUl9CSVQgfCBjb250ZXh0LlNURU5DSUxfQlVGRkVSX0JJVCkgZ2VuZXJhdGVkIGV4cGVj
dGVkIEdMIGVycm9yOiBOT19FUlJPUi4KKwogVGVzdCBidWZmZXJEYXRhKCkKIFBBU1MgY29udGV4
dC5iaW5kQnVmZmVyKGNvbnRleHQuQVJSQVlfQlVGRkVSLCBidWZmZXIpIGdlbmVyYXRlZCBleHBl
Y3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCiBQQVNTIGNvbnRleHQuYnVmZmVyRGF0YShjb250ZXh0
LkFSUkFZX0JVRkZFUiwgMTYsIGNvbnRleHQuU1RSRUFNX0RSQVcpIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogTk9fRVJST1IuCkBAIC0yMyw2ICsyNiw3IEBAIFBBU1MgY29udGV4dC5idWZm
ZXJEYXRhKGNvbnRleHQuQVJSQVlfQlUKIFBBU1MgY29udGV4dC5idWZmZXJEYXRhKGNvbnRleHQu
QVJSQVlfQlVGRkVSLCAxNiwgZGVza3RvcEdMWydTVEFUSUNfQ09QWSddKSBnZW5lcmF0ZWQgZXhw
ZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfRU5VTS4KIFBBU1MgY29udGV4dC5idWZmZXJEYXRhKGNv
bnRleHQuQVJSQVlfQlVGRkVSLCAxNiwgZGVza3RvcEdMWydEWU5BTUlDX1JFQUQnXSkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX0VOVU0uCiBQQVNTIGNvbnRleHQuYnVmZmVy
RGF0YShjb250ZXh0LkFSUkFZX0JVRkZFUiwgMTYsIGRlc2t0b3BHTFsnRFlOQU1JQ19DT1BZJ10p
IGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9FTlVNLgorCiBUZXN0IHtjb3B5
fVRleHtTdWJ9SW1hZ2UyRCB3aXRoIG5lZ2F0aXZlIG9mZnNldC93aWR0aC9oZWlnaHQKIFBBU1Mg
Y29udGV4dC5iaW5kVGV4dHVyZShjb250ZXh0LlRFWFRVUkVfMkQsIHRleCkgZ2VuZXJhdGVkIGV4
cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KIFBBU1MgY29udGV4dC50ZXhJbWFnZTJEKGNvbnRl
eHQuVEVYVFVSRV8yRCwgMCwgY29udGV4dC5SR0JBLCAtMTYsIC0xNiwgMCwgY29udGV4dC5SR0JB
LCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIG51bGwpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJv
cjogSU5WQUxJRF9WQUxVRS4KQEAgLTM1LDE3ICszOSw2MSBAQCBQQVNTIGNvbnRleHQuY29weVRl
eEltYWdlMkQoY29udGV4dC5URVhUCiBQQVNTIGNvbnRleHQuY29weVRleFN1YkltYWdlMkQoY29u
dGV4dC5URVhUVVJFXzJELCAwLCAtMSwgLTEsIDAsIDAsIDIsIDIpIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBBU1MgY29udGV4dC5jb3B5VGV4U3ViSW1hZ2Uy
RChjb250ZXh0LlRFWFRVUkVfMkQsIDAsIDAsIDAsIDAsIDAsIC0xLCAtMSkgZ2VuZXJhdGVkIGV4
cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmNvcHlUZXhTdWJJ
bWFnZTJEKGNvbnRleHQuVEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgMiwgMikgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KKwogVGVzdCByZW5kZXJidWZmZXJTdG9yYWdl
KCkgd2l0aCBuZWdhdGl2ZSB3aWR0aC9oZWlnaHQKIFBBU1MgY29udGV4dC5iaW5kUmVuZGVyYnVm
ZmVyKGNvbnRleHQuUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogTk9fRVJST1IuCiBQQVNTIGNvbnRleHQucmVuZGVyYnVmZmVyU3RvcmFnZShj
b250ZXh0LlJFTkRFUkJVRkZFUiwgY29udGV4dC5SR0JBNCwgLTIsIC0yKSBnZW5lcmF0ZWQgZXhw
ZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQucmVuZGVyYnVmZmVy
U3RvcmFnZShjb250ZXh0LlJFTkRFUkJVRkZFUiwgY29udGV4dC5SR0JBNCwgMTYsIDE2KSBnZW5l
cmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgorCiBUZXN0IHNjaXNzb3IoKSB3aXRo
IG5lZ2F0aXZlIHdpZHRoL2hlaWdodAogUEFTUyBjb250ZXh0LnNjaXNzb3IoMCwgMCwgLTIsIC0y
KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRl
eHQuc2Npc3NvcigwLCAwLCAxNiwgMTYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9f
RVJST1IuCisKIFRlc3Qgdmlld3BvcnQoKSB3aXRoIG5lZ2F0aXZlIHdpZHRoL2hlaWdodAogUEFT
UyBjb250ZXh0LnZpZXdwb3J0KDAsIDAsIC0yLCAtMikgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LnZpZXdwb3J0KDAsIDAsIDE2LCAxNikg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KIAorU2V0IHVwIGEgcHJvZ3Jh
bSB0byB0ZXN0IGludmFsaWQgY2hhcmFjdGVycworUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMg
Y29udGV4dC5OT19FUlJPUgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19F
UlJPUgorUEFTUyBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgY29udGV4dC5M
SU5LX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5O
T19FUlJPUgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgorUEFT
UyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgorUEFTUyBjb250ZXh0Lmdl
dEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgorCitUZXN0IHNoYWRlclNvdXJjZSgpIHdpdGgg
aW52YWxpZCBjaGFyYWN0ZXJzCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklO
VkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9W
QUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCitQ
QVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKK1BBU1MgY29u
dGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0Lmdl
dEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCisKK1Rlc3QgYmluZEF0dHJpYkxvY2F0
aW9uKCkgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlz
IGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4
dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFM
SURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxV
RQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCitQQVNT
IGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKKworVGVzdCBnZXRB
dHRyaWJMb2NhdGlvbigpIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzCitQQVNTIGNvbnRleHQuZ2V0
RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigp
IGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29u
dGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklO
VkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9W
QUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCisK
K1Rlc3QgZ2V0VW5pZm9ybUxvY2F0aW9uKCkgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMKK1BBU1Mg
Y29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0
LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJy
b3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlz
IGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4
dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFM
SURfVkFMVUUKKwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBM
RVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1w
YXJhbXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9p
bnZhbGlkLXBhc3NlZC1wYXJhbXMuaHRtbAkocmV2aXNpb24gNzQ3MjEpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMTQsMTggKzE0LDIxIEBAIGRlc2NyaXB0aW9uKCJUZXN0IGZvciBpbnZhbGlkIHBh
c3NlZCBwYXIKIAogdmFyIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoKTsKIAorZGVidWcoIiIp
OwogZGVidWcoIlRlc3QgY3JlYXRlU2hhZGVyKCkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihj
b250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5jcmVhdGVTaGFkZXIoY29udGV4dC5G
UkFHTUVOVF9TSEFERVIpIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4
dC5OT19FUlJPUiwgImNvbnRleHQuY3JlYXRlU2hhZGVyKGNvbnRleHQuVkVSVEVYX1NIQURFUiki
KTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfRU5VTSwg
ImNvbnRleHQuY3JlYXRlU2hhZGVyKDApIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4
dCwgY29udGV4dC5JTlZBTElEX0VOVU0sICJjb250ZXh0LmNyZWF0ZVNoYWRlcihjb250ZXh0LlRS
SUFOR0xFUykiKTsKIAorZGVidWcoIiIpOwogZGVidWcoIlRlc3QgY2xlYXIoKSIpOwogc2hvdWxk
R2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQu
Y2xlYXIoZGVza3RvcEdMWydBQ0NVTV9CVUZGRVJfQklUJ10pIik7CiBzaG91bGRHZW5lcmF0ZUdM
RXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5jbGVhcihkZXNr
dG9wR0xbJ0FDQ1VNX0JVRkZFUl9CSVQnXSB8IGNvbnRleHQuQ09MT1JfQlVGRkVSX0JJVCkiKTsK
IHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJj
b250ZXh0LmNsZWFyKGRlc2t0b3BHTFsnQUNDVU1fQlVGRkVSX0JJVCddIHwgY29udGV4dC5DT0xP
Ul9CVUZGRVJfQklUIHwgY29udGV4dC5ERVBUSF9CVUZGRVJfQklUIHwgY29udGV4dC5TVEVOQ0lM
X0JVRkZFUl9CSVQpIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5O
T19FUlJPUiwgImNvbnRleHQuY2xlYXIoY29udGV4dC5DT0xPUl9CVUZGRVJfQklUIHwgY29udGV4
dC5ERVBUSF9CVUZGRVJfQklUIHwgY29udGV4dC5TVEVOQ0lMX0JVRkZFUl9CSVQpIik7CiAKK2Rl
YnVnKCIiKTsKIGRlYnVnKCJUZXN0IGJ1ZmZlckRhdGEoKSIpOwogdmFyIGJ1ZmZlciA9IGNvbnRl
eHQuY3JlYXRlQnVmZmVyKCk7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4
dC5OT19FUlJPUiwgImNvbnRleHQuYmluZEJ1ZmZlcihjb250ZXh0LkFSUkFZX0JVRkZFUiwgYnVm
ZmVyKSIpOwpAQCAtMzksNiArNDIsNyBAQCBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwg
Y29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElE
X0VOVU0sICJjb250ZXh0LmJ1ZmZlckRhdGEoY29udGV4dC5BUlJBWV9CVUZGRVIsIDE2LCBkZXNr
dG9wR0xbJ0RZTkFNSUNfUkVBRCddKSIpOwogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQs
IGNvbnRleHQuSU5WQUxJRF9FTlVNLCAiY29udGV4dC5idWZmZXJEYXRhKGNvbnRleHQuQVJSQVlf
QlVGRkVSLCAxNiwgZGVza3RvcEdMWydEWU5BTUlDX0NPUFknXSkiKTsKIAorZGVidWcoIiIpOwog
ZGVidWcoIlRlc3Qge2NvcHl9VGV4e1N1Yn1JbWFnZTJEIHdpdGggbmVnYXRpdmUgb2Zmc2V0L3dp
ZHRoL2hlaWdodCIpOwogdmFyIHRleCA9IGNvbnRleHQuY3JlYXRlVGV4dHVyZSgpOwogdmFyIHBp
eGVscyA9IG5ldyBVaW50OEFycmF5KDIgKiAyICogNCk7CkBAIC01NCwyMCArNTgsOTAgQEAgc2hv
dWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSQogc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuY29weVRleFN1Yklt
YWdlMkQoY29udGV4dC5URVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCAtMSwgLTEpIik7CiBzaG91
bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuY29w
eVRleFN1YkltYWdlMkQoY29udGV4dC5URVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCAyLCAyKSIp
OwogCitkZWJ1ZygiIik7CiBkZWJ1ZygiVGVzdCByZW5kZXJidWZmZXJTdG9yYWdlKCkgd2l0aCBu
ZWdhdGl2ZSB3aWR0aC9oZWlnaHQiKTsKIHZhciByZW5kZXJidWZmZXIgPSBjb250ZXh0LmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpOwogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQu
Tk9fRVJST1IsICJjb250ZXh0LmJpbmRSZW5kZXJidWZmZXIoY29udGV4dC5SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlcikiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0
LklOVkFMSURfVkFMVUUsICJjb250ZXh0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoY29udGV4dC5SRU5E
RVJCVUZGRVIsIGNvbnRleHQuUkdCQTQsIC0yLCAtMikiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJv
cihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5yZW5kZXJidWZmZXJTdG9yYWdl
KGNvbnRleHQuUkVOREVSQlVGRkVSLCBjb250ZXh0LlJHQkE0LCAxNiwgMTYpIik7CiAKK2RlYnVn
KCIiKTsKIGRlYnVnKCJUZXN0IHNjaXNzb3IoKSB3aXRoIG5lZ2F0aXZlIHdpZHRoL2hlaWdodCIp
Owogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwg
ImNvbnRleHQuc2Npc3NvcigwLCAwLCAtMiwgLTIpIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3Io
Y29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuc2Npc3NvcigwLCAwLCAxNiwgMTYp
Iik7CiAKK2RlYnVnKCIiKTsKIGRlYnVnKCJUZXN0IHZpZXdwb3J0KCkgd2l0aCBuZWdhdGl2ZSB3
aWR0aC9oZWlnaHQiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklO
VkFMSURfVkFMVUUsICJjb250ZXh0LnZpZXdwb3J0KDAsIDAsIC0yLCAtMikiKTsKIHNob3VsZEdl
bmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC52aWV3cG9y
dCgwLCAwLCAxNiwgMTYpIik7CiAKK2RlYnVnKCIiKTsKK2RlYnVnKCJTZXQgdXAgYSBwcm9ncmFt
IHRvIHRlc3QgaW52YWxpZCBjaGFyYWN0ZXJzIik7Cit2YXIgaW52YWxpZFNldCA9IFsnIicsICck
JywgJ2AnLCAnQCcsICdcXCcsICInIl07Cit2YXIgdmFsaWRVbmlmb3JtTmFtZSA9ICJhYmNkZWZn
aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXzEyMzQ1Njc4OTAi
OwordmFyIHZhbGlkQXR0cmliTmFtZSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el9BQkNE
RUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAiOwordmFyIHZhbGlkU2hhZGVyU291cmNl
ID0gInVuaWZvcm0gZmxvYXQgIiArIHZhbGlkVW5pZm9ybU5hbWUgKyAiO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgKyAidmFyeWluZyBmbG9hdCAiICsgdmFsaWRBdHRyaWJOYW1lICsgIjtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICsgdmFsaWRBdHRyaWJOYW1lICArICIgPSAiICsgdmFsaWRVbmlmb3Jt
TmFtZSArICI7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICArICJnbF9Qb3NpdGlvbiA9IHZl
YzQoMC4wLCAwLjAsIDAuMCwgMS4wKTsgfVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICsg
Ii8vListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAiOwordmFyIHZTaGFkZXIgPSBjb250ZXh0LmNy
ZWF0ZVNoYWRlcihjb250ZXh0LlZFUlRFWF9TSEFERVIpOworY29udGV4dC5zaGFkZXJTb3VyY2Uo
dlNoYWRlciwgdmFsaWRTaGFkZXJTb3VyY2UpOworY29udGV4dC5jb21waWxlU2hhZGVyKHZTaGFk
ZXIpOworc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0Lk5PX0VSUk9SIik7
Cit2YXIgZlNoYWRlciA9IGNvbnRleHQuY3JlYXRlU2hhZGVyKGNvbnRleHQuRlJBR01FTlRfU0hB
REVSKTsKK2NvbnRleHQuc2hhZGVyU291cmNlKGZTaGFkZXIsICJwcmVjaXNpb24gaGlnaHAgZmxv
YXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJ2YXJ5aW5nIGZsb2F0ICIg
KyB2YWxpZEF0dHJpYk5hbWUgKyAiO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KyAidm9pZCBtYWluKCkge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiZ2xf
RnJhZ0NvbG9yID0gdmVjNCgiICsgdmFsaWRBdHRyaWJOYW1lICsgIiwgMC4wLCAwLjAsIDEuMCk7
IH0iKTsKK2NvbnRleHQuY29tcGlsZVNoYWRlcihmU2hhZGVyKTsKK3Nob3VsZEJlKCJjb250ZXh0
LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOwordmFyIHByb2dyYW0gPSBjb250ZXh0
LmNyZWF0ZVByb2dyYW0oKTsKK2NvbnRleHQuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZTaGFkZXIp
OworY29udGV4dC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZlNoYWRlcik7Citjb250ZXh0LmxpbmtQ
cm9ncmFtKHByb2dyYW0pOworc2hvdWxkQmVUcnVlKCJjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgY29udGV4dC5MSU5LX1NUQVRVUykiKTsKK3Nob3VsZEJlKCJjb250ZXh0Lmdl
dEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOworY29udGV4dC5iaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgMSwgdmFsaWRBdHRyaWJOYW1lKTsKK3Nob3VsZEJlKCJjb250ZXh0LmdldEVy
cm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOworY29udGV4dC5nZXRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtLCB2YWxpZEF0dHJpYk5hbWUpOworc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIs
ICJjb250ZXh0Lk5PX0VSUk9SIik7Citjb250ZXh0LmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCB2YWxpZFVuaWZvcm1OYW1lKTsKK3Nob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29u
dGV4dC5OT19FUlJPUiIpOworCitkZWJ1ZygiIik7CitkZWJ1ZygiVGVzdCBzaGFkZXJTb3VyY2Uo
KSB3aXRoIGludmFsaWQgY2hhcmFjdGVycyIpOworZm9yICh2YXIgaSA9IDA7IGkgPCBpbnZhbGlk
U2V0Lmxlbmd0aDsgKytpKSB7CisgIHZhciBpbnZhbGlkU2hhZGVyU291cmNlID0gdmFsaWRTaGFk
ZXJTb3VyY2UgKyAiXG4vLyIgKyBpbnZhbGlkU2V0W2ldOworICBjb250ZXh0LnNoYWRlclNvdXJj
ZSh2U2hhZGVyLCBpbnZhbGlkU2hhZGVyU291cmNlKTsKKyAgc2hvdWxkQmUoImNvbnRleHQuZ2V0
RXJyb3IoKSIsICJjb250ZXh0LklOVkFMSURfVkFMVUUiKTsKK30KKworZGVidWcoIiIpOworZGVi
dWcoIlRlc3QgYmluZEF0dHJpYkxvY2F0aW9uKCkgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMiKTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgaW52YWxpZFNldC5sZW5ndGg7ICsraSkgeworICB2YXIgaW52
YWxpZE5hbWUgPSB2YWxpZEF0dHJpYk5hbWUgKyBpbnZhbGlkU2V0W2ldOworICBjb250ZXh0LmJp
bmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAxLCBpbnZhbGlkTmFtZSk7CisgIHNob3VsZEJlKCJj
b250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5JTlZBTElEX1ZBTFVFIik7Cit9CisKK2RlYnVn
KCIiKTsKK2RlYnVnKCJUZXN0IGdldEF0dHJpYkxvY2F0aW9uKCkgd2l0aCBpbnZhbGlkIGNoYXJh
Y3RlcnMiKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgaW52YWxpZFNldC5sZW5ndGg7ICsraSkgewor
ICB2YXIgaW52YWxpZE5hbWUgPSB2YWxpZEF0dHJpYk5hbWUgKyBpbnZhbGlkU2V0W2ldOworICBj
b250ZXh0LmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGludmFsaWROYW1lKTsKKyAgc2hvdWxk
QmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJjb250ZXh0LklOVkFMSURfVkFMVUUiKTsKK30KKwor
ZGVidWcoIiIpOworZGVidWcoIlRlc3QgZ2V0VW5pZm9ybUxvY2F0aW9uKCkgd2l0aCBpbnZhbGlk
IGNoYXJhY3RlcnMiKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgaW52YWxpZFNldC5sZW5ndGg7ICsr
aSkgeworICB2YXIgaW52YWxpZE5hbWUgPSB2YWxpZFVuaWZvcm1OYW1lICsgaW52YWxpZFNldFtp
XTsKKyAgY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgaW52YWxpZE5hbWUpOwor
ICBzaG91bGRCZSgiY29udGV4dC5nZXRFcnJvcigpIiwgImNvbnRleHQuSU5WQUxJRF9WQUxVRSIp
OworfQorCiBkZWJ1ZygiIikKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4K
</data>
<flag name="review"
          id="69299"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>