<?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>38920</bug_id>
          
          <creation_ts>2010-05-11 11:26:23 -0700</creation_ts>
          <short_desc>V8 overload support ported to JSC</short_desc>
          <delta_ts>2010-06-10 14:04:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>40443</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yaar Schnitman">yaar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>224033</commentid>
    <comment_count>0</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-11 11:26:23 -0700</bug_when>
    <thetext>V8 overload support ported to JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224070</commentid>
    <comment_count>1</comment_count>
      <attachid>55732</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-11 12:14:38 -0700</bug_when>
    <thetext>Created attachment 55732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224073</commentid>
    <comment_count>2</comment_count>
      <attachid>55732</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-11 12:16:15 -0700</bug_when>
    <thetext>Comment on attachment 55732
Patch

Please cq+ if ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224779</commentid>
    <comment_count>3</comment_count>
      <attachid>55882</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-12 12:00:00 -0700</bug_when>
    <thetext>Created attachment 55882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224898</commentid>
    <comment_count>4</comment_count>
      <attachid>55882</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-12 14:31:38 -0700</bug_when>
    <thetext>Comment on attachment 55882
Patch

WebCore/bindings/scripts/CodeGenerator.pm:378
 +          $function-&gt;{overloadIndex} = @{$nameToFunctionsMap{$name}};
This perl is slightly mysterious to me.

This looks reasonable.  It&apos;s a bit of a hack to skip the functions when the overload index is greater than one, but I think that&apos;s ok for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225039</commentid>
    <comment_count>5</comment_count>
      <attachid>55882</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-12 18:37:19 -0700</bug_when>
    <thetext>Comment on attachment 55882
Patch

&gt; Index: WebCore/bindings/scripts/test/JS/JSTestObj.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/scripts/test/JS/JSTestObj.cpp	(revision 59097)
&gt; +++ WebCore/bindings/scripts/test/JS/JSTestObj.cpp	(working copy)
&gt; @@ -133,7 +133,7 @@ bool JSTestObjConstructor::getOwnPropert
&gt;  #define THUNK_GENERATOR(generator)
&gt;  #endif
&gt;  
&gt; -static const HashTableValue JSTestObjPrototypeTableValues[26] =
&gt; +static const HashTableValue JSTestObjPrototypeTableValues[27] =
&gt;  {
&gt;      { &quot;voidMethod&quot;, DontDelete | Function, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionVoidMethod), (intptr_t)0 THUNK_GENERATOR(0) },
&gt;      { &quot;voidMethodWithArgs&quot;, DontDelete | Function, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionVoidMethodWithArgs), (intptr_t)3 THUNK_GENERATOR(0) },
&gt; @@ -160,6 +160,7 @@ static const HashTableValue JSTestObjPro
&gt;      { &quot;methodWithOptionalArg&quot;, DontDelete | Function, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionMethodWithOptionalArg), (intptr_t)1 THUNK_GENERATOR(0) },
&gt;      { &quot;methodWithNonOptionalArgAndOptionalArg&quot;, DontDelete | Function, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg), (intptr_t)2 THUNK_GENERATOR(0) },
&gt;      { &quot;methodWithNonOptionalArgAndTwoOptionalArgs&quot;, DontDelete | Function, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs), (intptr_t)3 THUNK_GENERATOR(0) },
&gt; +    { &quot;overloadedMethod&quot;, DontDelete | Function, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionOverloadedMethod), (intptr_t)2 THUNK_GENERATOR(0) },
&gt;      { 0, 0, 0, 0 THUNK_GENERATOR(0) }
&gt;  };
&gt;  
&gt; @@ -801,6 +802,80 @@ JSValue JSC_HOST_CALL jsTestObjPrototype
&gt;      return jsUndefined();
&gt;  }
&gt;  
&gt; +JSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod1(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; +{
&gt; +    UNUSED_PARAM(args);
&gt; +    if (!thisValue.inherits(&amp;JSTestObj::s_info))
&gt; +        return throwError(exec, TypeError);
&gt; +    JSTestObj* castedThis = static_cast&lt;JSTestObj*&gt;(asObject(thisValue));
&gt; +    TestObj* imp = static_cast&lt;TestObj*&gt;(castedThis-&gt;impl());
&gt; +    TestObj* objArg = toTestObj(args.at(0));
&gt; +    const String&amp; strArg = ustringToString(args.at(1).toString(exec));
&gt; +
&gt; +    imp-&gt;overloadedMethod(objArg, strArg);
&gt; +    return jsUndefined();
&gt; +}
&gt; +
&gt; +JSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod2(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; +{
&gt; +    UNUSED_PARAM(args);
&gt; +    if (!thisValue.inherits(&amp;JSTestObj::s_info))
&gt; +        return throwError(exec, TypeError);
&gt; +    JSTestObj* castedThis = static_cast&lt;JSTestObj*&gt;(asObject(thisValue));
&gt; +    TestObj* imp = static_cast&lt;TestObj*&gt;(castedThis-&gt;impl());
&gt; +    TestObj* objArg = toTestObj(args.at(0));
&gt; +
&gt; +    int argsCount = args.size();
&gt; +    if (argsCount &lt; 2) {
&gt; +        imp-&gt;overloadedMethod(objArg);
&gt; +        return jsUndefined();
&gt; +    }
&gt; +
&gt; +    int intArg = args.at(1).toInt32(exec);
&gt; +
&gt; +    imp-&gt;overloadedMethod(objArg, intArg);
&gt; +    return jsUndefined();
&gt; +}
&gt; +
&gt; +JSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod3(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; +{
&gt; +    UNUSED_PARAM(args);
&gt; +    if (!thisValue.inherits(&amp;JSTestObj::s_info))
&gt; +        return throwError(exec, TypeError);
&gt; +    JSTestObj* castedThis = static_cast&lt;JSTestObj*&gt;(asObject(thisValue));
&gt; +    TestObj* imp = static_cast&lt;TestObj*&gt;(castedThis-&gt;impl());
&gt; +    const String&amp; strArg = ustringToString(args.at(0).toString(exec));
&gt; +
&gt; +    imp-&gt;overloadedMethod(strArg);
&gt; +    return jsUndefined();
&gt; +}
&gt; +
&gt; +JSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod4(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; +{
&gt; +    UNUSED_PARAM(args);
&gt; +    if (!thisValue.inherits(&amp;JSTestObj::s_info))
&gt; +        return throwError(exec, TypeError);
&gt; +    JSTestObj* castedThis = static_cast&lt;JSTestObj*&gt;(asObject(thisValue));
&gt; +    TestObj* imp = static_cast&lt;TestObj*&gt;(castedThis-&gt;impl());
&gt; +    int intArg = args.at(0).toInt32(exec);
&gt; +
&gt; +    imp-&gt;overloadedMethod(intArg);
&gt; +    return jsUndefined();
&gt; +}
&gt; +
&gt; +JSValue JSC_HOST_CALL testObjPrototypeFunctionOverloadedMethod(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&amp; args)
&gt; +{
&gt; +    if ((args.size() == 2 &amp;&amp; (args.at(0).isNull() || asObject(args.at(0))-&gt;inherits(JSTestObj::s_info) &amp;&amp; (args.at(1).isNull() || args.at(1).isUndefined() || args.at(1).isString() || args.at(1).isObject())))
&gt; +        return testObjPrototypeFunctionOverloadedMethod1Callback(args);
&gt; +    if ((args.size() == 1 &amp;&amp; (args.at(0).isNull() || asObject(args.at(0))-&gt;inherits(JSTestObj::s_info)) || (args.size() == 2 &amp;&amp; (args.at(0).isNull() || asObject(args.at(0))-&gt;inherits(JSTestObj::s_info)))
&gt; +        return testObjPrototypeFunctionOverloadedMethod2Callback(args);
&gt; +    if ((args.size() == 1 &amp;&amp; (args.at(0).isNull() || args.at(0).isUndefined() || args.at(0).isString() || args.at(0).isObject())))
&gt; +        return testObjPrototypeFunctionOverloadedMethod3Callback(args);
&gt; +    if (args.size() == 1)
&gt; +        return testObjPrototypeFunctionOverloadedMethod4Callback(args);
&gt; +    return throwError(exec, TypeError);
&gt; +}
&gt; +
&gt;  JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, TestObj* object)
&gt;  {


It is possible I am reading this wrong, but where are the implementations of testObjPrototypeFunctionOverloadedMethod1Callback and friends.  Are they supposed to be called jsTestObjPrototypeFunctionOverloadedMethod1 and friends. Are they supposed to take more parameters?  Can we optimize the if statement in this function so it does not do the same work multiple times (calling things like inherits)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225045</commentid>
    <comment_count>6</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-12 18:55:43 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; It is possible I am reading this wrong, but where are the implementations of testObjPrototypeFunctionOverloadedMethod1Callback and friends.  
Nice catch. This slipped in from V8. I&apos;ll fix that. I would have probably caught that once I turned on some of the overloads in the IDLs.

&gt; Can we optimize the if statement in this function so it does not do the same work multiple times (calling things like inherits)?
This can probably be done, but its very hard and with significant added complexity to the generator. In real use cases (WebGL, Canvas and XHR overloads), the primary determinant is the length of the args vector, and therefore only a small portion of the if statements are actually passed through. Also, in these overrides, the overhead of override selection is dwarfed by what these overrides usually do (e.g. copy large arrays). Therefore such an optimization won&apos;t have a big impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225047</commentid>
    <comment_count>7</comment_count>
      <attachid>55882</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-05-12 19:05:11 -0700</bug_when>
    <thetext>Comment on attachment 55882
Patch

r-ing now that I know it is wrong.  I will look at making it a bit smarter in the future I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225340</commentid>
    <comment_count>8</comment_count>
      <attachid>55988</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-13 09:30:14 -0700</bug_when>
    <thetext>Created attachment 55988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225345</commentid>
    <comment_count>9</comment_count>
      <attachid>55989</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-13 09:37:18 -0700</bug_when>
    <thetext>Created attachment 55989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225349</commentid>
    <comment_count>10</comment_count>
      <attachid>55989</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-13 09:43:42 -0700</bug_when>
    <thetext>Comment on attachment 55989
Patch

Fixed method names. Please cq+ if ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225926</commentid>
    <comment_count>11</comment_count>
      <attachid>55989</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-14 11:44:26 -0700</bug_when>
    <thetext>Comment on attachment 55989
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225941</commentid>
    <comment_count>12</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-05-14 12:16:19 -0700</bug_when>
    <thetext>Thank you too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226213</commentid>
    <comment_count>13</comment_count>
      <attachid>55989</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 03:15:03 -0700</bug_when>
    <thetext>Comment on attachment 55989
Patch

Clearing flags on attachment: 55989

Committed r59533: &lt;http://trac.webkit.org/changeset/59533&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226214</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 03:15:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226222</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-15 04:09:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/59533 might have broken GTK Linux 32-bit Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/59530
http://trac.webkit.org/changeset/59531
http://trac.webkit.org/changeset/59532
http://trac.webkit.org/changeset/59533</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55732</attachid>
            <date>2010-05-11 12:14:38 -0700</date>
            <delta_ts>2010-05-12 11:59:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38920-20100511121437.patch</filename>
            <type>text/plain</type>
            <size>17863</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMTEgIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Vjggb3ZlcmxvYWQgc3VwcG9ydCBwb3J0ZWQgdG8gSlNDLiBVbmZvcmtpbmcgb2Ygb3ZlcmxvYWRl
ZCBkZWNsYXJhdGlvbnMgaW4gV2ViR0wgJiBDYW52YXMgd2lsbCBiZSBkb25lIGluIHN1YnNlcXVl
bnQgcGF0Y2hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4OTIwCisKKyAgICAgICAgTm90ZSB0aGF0IEpTVGVzdENhbGxiYWNrLmNwcC9oIGluY2x1
ZGUgbWlub3IgaXJyZWxldmFudCBjaGFuZ2VzIHRvbyBzaW5jZSBzb21lYm9keSBmb3Jnb3QgdG8g
dXBkYXRlIHRoZW0gYWZ0ZXIgY2hhbmdpbmcgdGhlIEpTIGdlbmVyYXRvci4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OkpTVGVz
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiAKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisKIDIwMTAtMDUtMTEgIFhh
biBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rh
dm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCShyZXZpc2lvbiA1OTA5NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNCArMzYzLDIxIEBAIHN1YiBOYW1lc3Bh
Y2VGb3JBdHRyaWJ1dGVOYW1lCiAgICAgcmV0dXJuICJIVE1MTmFtZXMiOwogfQogCisjIElkZW50
aWZpZXMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMgYW5kIGZvciBlYWNoIGZ1bmN0aW9uIGFkZHMgYW4g
YXJyYXkgd2l0aAorIyBsaW5rcyB0byBpdHMgcmVzcGVjdGl2ZSBvdmVybG9hZHMgKGluY2x1ZGlu
ZyBpdHNlbGYpLgorc3ViIExpbmtPdmVybG9hZGVkRnVuY3Rpb25zCit7CisgICAgbXkgKCRvYmpl
Y3QsICRkYXRhTm9kZSkgPSBAXzsKKworICAgIG15ICVuYW1lVG9GdW5jdGlvbnNNYXAgPSAoKTsK
KyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAg
ICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgJG5h
bWVUb0Z1bmN0aW9uc01hcHskbmFtZX0gPSBbXSBpZiAhZXhpc3RzICRuYW1lVG9GdW5jdGlvbnNN
YXB7JG5hbWV9OworICAgICAgICBwdXNoKEB7JG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX19LCAk
ZnVuY3Rpb24pOworICAgICAgICAkZnVuY3Rpb24tPntvdmVybG9hZHN9ID0gJG5hbWVUb0Z1bmN0
aW9uc01hcHskbmFtZX07CisgICAgICAgICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID0gQHsk
bmFtZVRvRnVuY3Rpb25zTWFweyRuYW1lfX07CisgICAgfQorfQorCisKIDE7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDU5MDk3
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBAIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogICAgIG15
ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7CiAKKyAgICAkY29k
ZUdlbmVyYXRvci0+TGlua092ZXJsb2FkZWRGdW5jdGlvbnMoJGRhdGFOb2RlKTsKKwogICAgICMg
U3RhcnQgYWN0dWFsIGdlbmVyYXRpb24KICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FsbGJhY2sifSkgewogICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNr
SGVhZGVyKCRkYXRhTm9kZSk7CkBAIC05ODMsNiArOTg1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIi8vIEZ1bmN0aW9uc1xuXG4iKTsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7
JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBuZXh0IGlmICRmdW5jdGlvbi0+
e292ZXJsb2FkSW5kZXh9ID4gMTsKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29k
ZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIg
LiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7
CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKICAgICAgICAgfQpAQCAtMTA5
Miw2ICsxMDk1LDc5IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZXNIYXNoVGFibGUoJCQpCiAgICAg
cmV0dXJuICRudW1BdHRyaWJ1dGVzOwogfQogCitzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2tF
eHByZXNzaW9uCit7CisgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBzaGlmdDsKKyAgICBteSAkZnVu
Y3Rpb24gPSBzaGlmdDsKKworICAgIG15IEBhbmRFeHByZXNzaW9uID0gKCk7CisgICAgcHVzaChA
YW5kRXhwcmVzc2lvbiwgImFyZ3Muc2l6ZSgpID09ICRudW1QYXJhbWV0ZXJzIik7CisgICAgbXkg
JHBhcmFtZXRlckluZGV4ID0gMDsKKyAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSkgeworICAgICAgICBsYXN0IGlmICRwYXJhbWV0ZXJJbmRleCA+PSAkbnVt
UGFyYW1ldGVyczsKKyAgICAgICAgbXkgJHZhbHVlID0gImFyZ3MuYXQoJHBhcmFtZXRlckluZGV4
KSI7CisgICAgICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJh
bWV0ZXItPnR5cGUpOworCisgICAgICAgICMgT25seSBET01TdHJpbmcgb3Igd3JhcHBlciB0eXBl
cyBhcmUgY2hlY2tlZC4KKyAgICAgICAgIyBGb3IgRE9NU3RyaW5nLCBOdWxsLCBVbmRlZmluZWQg
YW5kIGFueSBPYmplY3QgYXJlIGFjY2VwdGVkIHRvbywgYXMKKyAgICAgICAgIyB0aGVzZSBhcmUg
YWNjZXB0YWJsZSB2YWx1ZXMgZm9yIGEgRE9NU3RyaW5nIGFyZ3VtZW50IChhbnkgT2JqZWN0IGNh
bgorICAgICAgICAjIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgLnRvU3RyaW5nKS4KKyAg
ICAgICAgcHVzaChAYW5kRXhwcmVzc2lvbiwgIigke3ZhbHVlfS5pc051bGwoKSB8fCAke3ZhbHVl
fS5pc1VuZGVmaW5lZCgpIHx8ICR7dmFsdWV9LmlzU3RyaW5nKCkgfHwgJHt2YWx1ZX0uaXNPYmpl
Y3QoKSkiKSBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICAgICAg
cHVzaChAYW5kRXhwcmVzc2lvbiwgIigke3ZhbHVlfS5pc051bGwoKSB8fCBhc09iamVjdCgke3Zh
bHVlfSktPmluaGVyaXRzKEpTJHt0eXBlfTo6c19pbmZvKSIpIHVubGVzcyBJc05hdGl2ZVR5cGUo
JHR5cGUpOworCisgICAgICAgICRwYXJhbWV0ZXJJbmRleCsrOworICAgIH0KKyAgICBteSAkcmVz
ID0gam9pbigiICYmICIsIEBhbmRFeHByZXNzaW9uKTsKKyAgICAkcmVzID0gIigkcmVzKSIgaWYg
QGFuZEV4cHJlc3Npb24gPiAxOworICAgIHJldHVybiAkcmVzOworfQorCitzdWIgR2VuZXJhdGVG
dW5jdGlvblBhcmFtZXRlcnNDaGVjaworeworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworCisg
ICAgbXkgQG9yRXhwcmVzc2lvbiA9ICgpOworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gMDsKKyAg
ICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAg
ICAgICAgICAgIHB1c2goQG9yRXhwcmVzc2lvbiwgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2tFeHBy
ZXNzaW9uKCRudW1QYXJhbWV0ZXJzLCAkZnVuY3Rpb24pKTsKKyAgICAgICAgfQorICAgICAgICAk
bnVtUGFyYW1ldGVycysrOworICAgIH0KKyAgICBwdXNoKEBvckV4cHJlc3Npb24sIEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrRXhwcmVzc2lvbigkbnVtUGFyYW1ldGVycywgJGZ1bmN0aW9uKSk7Cisg
ICAgcmV0dXJuIGpvaW4oIiB8fCAiLCBAb3JFeHByZXNzaW9uKTsKK30KKworc3ViIEdlbmVyYXRl
T3ZlcmxvYWRlZFByb3RvdHlwZUZ1bmN0aW9uCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7
CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlm
dDsKKworICAgICMgR2VuZXJhdGUgY29kZSBmb3IgY2hvb3NpbmcgdGhlIGNvcnJlY3Qgb3Zlcmxv
YWQgdG8gY2FsbC4gT3ZlcmxvYWRzIGFyZQorICAgICMgY2hvc2VuIGJhc2VkIG9uIHRoZSB0b3Rh
bCBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCBhbmQgdGhlIHR5cGUgb2YKKyAgICAjIHZhbHVl
cyBwYXNzZWQgaW4gbm9uLXByaW1pdGl2ZSBhcmd1bWVudCBzbG90cy4gV2hlbiBtb3JlIHRoYW4g
YSBzaW5nbGUKKyAgICAjIG92ZXJsb2FkIGlzIGFwcGxpY2FibGUsIHByZWNlZGVuY2UgaXMgZ2l2
ZW4gYWNjb3JkaW5nIHRvIHRoZSBvcmRlciBvZgorICAgICMgZGVjbGFyYXRpb24gaW4gdGhlIElE
TC4KKworICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgk
aW1wbENsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldL
X3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOworCisgICAgcHVzaChAaW1wbENv
bnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncylc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cit7CitFTkQKKyAgICBmb3JlYWNo
IG15ICRvdmVybG9hZCAoQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSkgeworICAgICAgICBteSAk
cGFyYW1ldGVyc0NoZWNrID0gR2VuZXJhdGVGdW5jdGlvblBhcmFtZXRlcnNDaGVjaygkb3Zlcmxv
YWQpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJHBhcmFtZXRlcnNDaGVj
aylcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuICR7ZnVu
Y3Rpb25OYW1lfSRvdmVybG9hZC0+e292ZXJsb2FkSW5kZXh9Q2FsbGJhY2soYXJncyk7XG4iKTsK
KyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOworfQorCitFTkQKK30KKwogc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KIHsKICAgICBteSAoJG9iamVjdCwgJGRhdGFOb2RlKSA9IEBfOwpAQCAtMTE3OCw2
ICsxMjU0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBmb3Jl
YWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgbmV4
dCBpZiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CiAgICAgICAgIG15ICRuYW1lID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CiAgICAgICAgIHB1c2goQGhhc2hLZXlzLCAkbmFt
ZSk7CiAKQEAgLTE3MDMsNiArMTc4MCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBl
KTsKIAogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19s
Y2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9y
LT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKKworICAgICAgICAgICAg
aWYgKEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxKSB7CisgICAgICAgICAgICAgICAgIyBB
cHBlbmQgYSBudW1iZXIgdG8gYW4gb3ZlcmxvYWRlZCBtZXRob2QncyBuYW1lIHRvIG1ha2UgaXQg
dW5pcXVlOgorICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb25OYW1lIC4g
JGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9
IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
KTsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncylcbiIpOwpAQCAtMTg2NCw2ICsxOTQ3LDExIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAg
ICAgICBpZiAoQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSA+IDEgJiYgJGZ1bmN0aW9uLT57b3Zl
cmxvYWRJbmRleH0gPT0gQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSkgeworICAgICAgICAgICAg
ICAgICMgR2VuZXJhdGUgYSBmdW5jdGlvbiBkaXNwYXRjaGluZyBjYWxsIHRvIHRoZSByZXN0IG9m
IHRoZSBvdmVybG9hZHMuCisgICAgICAgICAgICAgICAgR2VuZXJhdGVPdmVybG9hZGVkUHJvdG90
eXBlRnVuY3Rpb24oJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjE5NSw2ICsyMjgzLDEyIEBAIHN1YiBH
ZXROYXRpdmVUeXBlCiAgICAgcmV0dXJuICIke3R5cGV9KiI7CiB9CiAKK3N1YiBJc05hdGl2ZVR5
cGUKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiBleGlzdHMgJG5hdGl2ZVR5
cGV7JHR5cGV9OworfQorCiBzdWIgSlNWYWx1ZVRvTmF0aXZlCiB7CiAgICAgbXkgJHNpZ25hdHVy
ZSA9IHNoaWZ0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCShyZXZpc2lvbiA1OTA5NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTIwNiwyMyArMjA2LDYgQEAgc3ViIEdl
bmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcKICAgICB9CiB9CiAKLXN1YiBMaW5rT3ZlcmxvYWRlZEZ1
bmN0aW9ucwotewotICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwotCi0gICAgIyBJZGVudGlmaWVz
IG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCBmb3IgZWFjaCBmdW5jdGlvbiBhZGRzIGFuIGFycmF5
IHdpdGgKLSAgICAjIGxpbmtzIHRvIGl0cyByZXNwZWN0aXZlIG92ZXJsb2FkcyAoaW5jbHVkaW5n
IGl0c2VsZikuCi0gICAgbXkgJW5hbWVUb0Z1bmN0aW9uc01hcCA9ICgpOwotICAgIGZvcmVhY2gg
bXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICBteSAkbmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotICAgICAgICAkbmFtZVRvRnVuY3Rpb25z
TWFweyRuYW1lfSA9IFtdIGlmICFleGlzdHMgJG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX07Ci0g
ICAgICAgIHB1c2goQHskbmFtZVRvRnVuY3Rpb25zTWFweyRuYW1lfX0sICRmdW5jdGlvbik7Ci0g
ICAgICAgICRmdW5jdGlvbi0+e292ZXJsb2Fkc30gPSAkbmFtZVRvRnVuY3Rpb25zTWFweyRuYW1l
fTsKLSAgICAgICAgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gPSBAeyRuYW1lVG9GdW5jdGlv
bnNNYXB7JG5hbWV9fTsKLSAgICB9Ci0KLX0KLQogc3ViIEdlbmVyYXRlSGVhZGVyCiB7CiAgICAg
bXkgJG9iamVjdCA9IHNoaWZ0OwpAQCAtMTY1OCw3ICsxNjQxLDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckdldHRlcigkaW1wbENsYXNz
TmFtZSk7CiAgICAgfQogCi0gICAgTGlua092ZXJsb2FkZWRGdW5jdGlvbnMoJGRhdGFOb2RlKTsK
KyAgICAkY29kZUdlbmVyYXRvci0+TGlua092ZXJsb2FkZWRGdW5jdGlvbnMoJGRhdGFOb2RlKTsK
IAogICAgIG15ICRpbmRleGVyOwogICAgIG15ICRuYW1lZFByb3BlcnR5R2V0dGVyOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHJldmlzaW9uIDU5MDk3
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDcgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICAvLyAnQ29udmVy
dFNjcmlwdFN0cmluZycgZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBbQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3RyaW5nIHNjcmlwdFN0cmluZ0F0dHI7CiAK
LSNpZmRlZiBURVNUSU5HX1Y4CisjaWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRF
U1RJTkdfSlMpCiAgICAgICAgIC8vIE92ZXJsb2FkcwogICAgICAgICB2b2lkICAgIG92ZXJsb2Fk
ZWRNZXRob2QoaW4gVGVzdE9iaiBvYmpBcmcsIGluIERPTVN0cmluZyBzdHJBcmcpOwogICAgICAg
ICB2b2lkICAgIG92ZXJsb2FkZWRNZXRob2QoaW4gVGVzdE9iaiBvYmpBcmcsIGluIFtPcHRpb25h
bF0gbG9uZyBpbnRBcmcpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gNTkwOTcpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDEyICszNywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1Rlc3RDYWxsYmFj
azo6SlNUZXN0Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywg
Z2xvYmFsT2JqZWN0KSkKICAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxk
KCkpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZ2xvYmFsT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCiB7CiB9CiAKIEpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2FsbGJh
Y2soKQogewotICAgIGNhbGxPbk1haW5UaHJlYWQoSlNDYWxsYmFja0RhdGE6OmRlbGV0ZURhdGEs
IG1fZGF0YSk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEZWxldGVD
YWxsYmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7CiAjaWZuZGVmIE5ERUJVRwogICAgIG1f
ZGF0YSA9IDA7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24gNTkwOTcpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw3IEBAIHByaXZhdGU6CiAKICAgICBKU0NhbGxiYWNrRGF0YSogbV9kYXRhOwog
ICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDU5MDk3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEz
Myw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnQKICNkZWZpbmUg
VEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMjZdID0KK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1syN10gPQogewog
ICAgIHsgInZvaWRNZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0
aG9kKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAidm9pZE1ldGhv
ZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhB
cmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0xNjAsNiArMTYwLDcg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialBybwogICAgIHsgIm1ldGhv
ZFdpdGhPcHRpb25hbEFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFyZyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsg
Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcpLCAo
aW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MpLCAoaW50cHRyX3Qp
MyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCksIChpbnRwdHJfdCkyIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkg
fQogfTsKIApAQCAtODAxLDYgKzgwMiw4MCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUu
aW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBUZXN0T2JqKiBv
YmpBcmcgPSB0b1Rlc3RPYmooYXJncy5hdCgwKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcg
PSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisKKyAgICBpbXAt
Pm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBzdHJBcmcpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3Mp
OworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gdG9UZXN0T2JqKGFyZ3MuYXQoMCkpOworCisg
ICAgaW50IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIGlmIChhcmdzQ291bnQgPCAyKSB7
CisgICAgICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBpbnQgaW50QXJnID0gYXJncy5hdCgxKS50b0lu
dDMyKGV4ZWMpOworCisgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgaW50QXJnKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNU
ZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnID0g
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworCisgICAgaW1wLT5v
dmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAg
ICBpbnQgaW50QXJnID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworCisgICAgaW1wLT5vdmVy
bG9hZGVkTWV0aG9kKGludEFyZyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB0ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoKGFyZ3Muc2l6ZSgpID09IDIgJiYgKGFyZ3MuYXQo
MCkuaXNOdWxsKCkgfHwgYXNPYmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6
c19pbmZvKSAmJiAoYXJncy5hdCgxKS5pc051bGwoKSB8fCBhcmdzLmF0KDEpLmlzVW5kZWZpbmVk
KCkgfHwgYXJncy5hdCgxKS5pc1N0cmluZygpIHx8IGFyZ3MuYXQoMSkuaXNPYmplY3QoKSkpKQor
ICAgICAgICByZXR1cm4gdGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFD
YWxsYmFjayhhcmdzKTsKKyAgICBpZiAoKGFyZ3Muc2l6ZSgpID09IDEgJiYgKGFyZ3MuYXQoMCku
aXNOdWxsKCkgfHwgYXNPYmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6c19p
bmZvKSkgfHwgKGFyZ3Muc2l6ZSgpID09IDIgJiYgKGFyZ3MuYXQoMCkuaXNOdWxsKCkgfHwgYXNP
YmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6c19pbmZvKSkpCisgICAgICAg
IHJldHVybiB0ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkNhbGxiYWNr
KGFyZ3MpOworICAgIGlmICgoYXJncy5zaXplKCkgPT0gMSAmJiAoYXJncy5hdCgwKS5pc051bGwo
KSB8fCBhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkgfHwgYXJncy5hdCgwKS5pc1N0cmluZygpIHx8
IGFyZ3MuYXQoMCkuaXNPYmplY3QoKSkpKQorICAgICAgICByZXR1cm4gdGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsYmFjayhhcmdzKTsKKyAgICBpZiAoYXJncy5z
aXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2Q0Q2FsbGJhY2soYXJncyk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKK30KKwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPYmoqIG9iamVjdCkKIHsKICAg
ICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1Rlc3RPYmo+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgb2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCShyZXZpc2lvbiA1OTA5NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdAogSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmco
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OkFyZ0xpc3QmKTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
KTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVl
LCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialJlYWRPbmx5SW50QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55882</attachid>
            <date>2010-05-12 12:00:00 -0700</date>
            <delta_ts>2010-05-13 09:30:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38920-20100512115959.patch</filename>
            <type>text/plain</type>
            <size>17863</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMTEgIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Vjggb3ZlcmxvYWQgc3VwcG9ydCBwb3J0ZWQgdG8gSlNDLiBVbmZvcmtpbmcgb2Ygb3ZlcmxvYWRl
ZCBkZWNsYXJhdGlvbnMgaW4gV2ViR0wgJiBDYW52YXMgd2lsbCBiZSBkb25lIGluIHN1YnNlcXVl
bnQgcGF0Y2hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4OTIwCisKKyAgICAgICAgTm90ZSB0aGF0IEpTVGVzdENhbGxiYWNrLmNwcC9oIGluY2x1
ZGUgbWlub3IgaXJyZWxldmFudCBjaGFuZ2VzIHRvbyBzaW5jZSBzb21lYm9keSBmb3Jnb3QgdG8g
dXBkYXRlIHRoZW0gYWZ0ZXIgY2hhbmdpbmcgdGhlIEpTIGdlbmVyYXRvci4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OkpTVGVz
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiAKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisKIDIwMTAtMDUtMTEgIFhh
biBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rh
dm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCShyZXZpc2lvbiA1OTA5NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNCArMzYzLDIxIEBAIHN1YiBOYW1lc3Bh
Y2VGb3JBdHRyaWJ1dGVOYW1lCiAgICAgcmV0dXJuICJIVE1MTmFtZXMiOwogfQogCisjIElkZW50
aWZpZXMgb3ZlcmxvYWRlZCBmdW5jdGlvbnMgYW5kIGZvciBlYWNoIGZ1bmN0aW9uIGFkZHMgYW4g
YXJyYXkgd2l0aAorIyBsaW5rcyB0byBpdHMgcmVzcGVjdGl2ZSBvdmVybG9hZHMgKGluY2x1ZGlu
ZyBpdHNlbGYpLgorc3ViIExpbmtPdmVybG9hZGVkRnVuY3Rpb25zCit7CisgICAgbXkgKCRvYmpl
Y3QsICRkYXRhTm9kZSkgPSBAXzsKKworICAgIG15ICVuYW1lVG9GdW5jdGlvbnNNYXAgPSAoKTsK
KyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAg
ICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgJG5h
bWVUb0Z1bmN0aW9uc01hcHskbmFtZX0gPSBbXSBpZiAhZXhpc3RzICRuYW1lVG9GdW5jdGlvbnNN
YXB7JG5hbWV9OworICAgICAgICBwdXNoKEB7JG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX19LCAk
ZnVuY3Rpb24pOworICAgICAgICAkZnVuY3Rpb24tPntvdmVybG9hZHN9ID0gJG5hbWVUb0Z1bmN0
aW9uc01hcHskbmFtZX07CisgICAgICAgICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID0gQHsk
bmFtZVRvRnVuY3Rpb25zTWFweyRuYW1lfX07CisgICAgfQorfQorCisKIDE7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDU5MDk3
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBAIHN1YiBHZW5lcmF0ZUludGVyZmFjZQogICAgIG15
ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7CiAKKyAgICAkY29k
ZUdlbmVyYXRvci0+TGlua092ZXJsb2FkZWRGdW5jdGlvbnMoJGRhdGFOb2RlKTsKKwogICAgICMg
U3RhcnQgYWN0dWFsIGdlbmVyYXRpb24KICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FsbGJhY2sifSkgewogICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNr
SGVhZGVyKCRkYXRhTm9kZSk7CkBAIC05ODMsNiArOTg1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIi8vIEZ1bmN0aW9uc1xuXG4iKTsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7
JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBuZXh0IGlmICRmdW5jdGlvbi0+
e292ZXJsb2FkSW5kZXh9ID4gMTsKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29k
ZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIg
LiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7
CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7XG4iKTsKICAgICAgICAgfQpAQCAtMTA5
Miw2ICsxMDk1LDc5IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZXNIYXNoVGFibGUoJCQpCiAgICAg
cmV0dXJuICRudW1BdHRyaWJ1dGVzOwogfQogCitzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2tF
eHByZXNzaW9uCit7CisgICAgbXkgJG51bVBhcmFtZXRlcnMgPSBzaGlmdDsKKyAgICBteSAkZnVu
Y3Rpb24gPSBzaGlmdDsKKworICAgIG15IEBhbmRFeHByZXNzaW9uID0gKCk7CisgICAgcHVzaChA
YW5kRXhwcmVzc2lvbiwgImFyZ3Muc2l6ZSgpID09ICRudW1QYXJhbWV0ZXJzIik7CisgICAgbXkg
JHBhcmFtZXRlckluZGV4ID0gMDsKKyAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSkgeworICAgICAgICBsYXN0IGlmICRwYXJhbWV0ZXJJbmRleCA+PSAkbnVt
UGFyYW1ldGVyczsKKyAgICAgICAgbXkgJHZhbHVlID0gImFyZ3MuYXQoJHBhcmFtZXRlckluZGV4
KSI7CisgICAgICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJh
bWV0ZXItPnR5cGUpOworCisgICAgICAgICMgT25seSBET01TdHJpbmcgb3Igd3JhcHBlciB0eXBl
cyBhcmUgY2hlY2tlZC4KKyAgICAgICAgIyBGb3IgRE9NU3RyaW5nLCBOdWxsLCBVbmRlZmluZWQg
YW5kIGFueSBPYmplY3QgYXJlIGFjY2VwdGVkIHRvbywgYXMKKyAgICAgICAgIyB0aGVzZSBhcmUg
YWNjZXB0YWJsZSB2YWx1ZXMgZm9yIGEgRE9NU3RyaW5nIGFyZ3VtZW50IChhbnkgT2JqZWN0IGNh
bgorICAgICAgICAjIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyB2aWEgLnRvU3RyaW5nKS4KKyAg
ICAgICAgcHVzaChAYW5kRXhwcmVzc2lvbiwgIigke3ZhbHVlfS5pc051bGwoKSB8fCAke3ZhbHVl
fS5pc1VuZGVmaW5lZCgpIHx8ICR7dmFsdWV9LmlzU3RyaW5nKCkgfHwgJHt2YWx1ZX0uaXNPYmpl
Y3QoKSkiKSBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICAgICAg
cHVzaChAYW5kRXhwcmVzc2lvbiwgIigke3ZhbHVlfS5pc051bGwoKSB8fCBhc09iamVjdCgke3Zh
bHVlfSktPmluaGVyaXRzKEpTJHt0eXBlfTo6c19pbmZvKSIpIHVubGVzcyBJc05hdGl2ZVR5cGUo
JHR5cGUpOworCisgICAgICAgICRwYXJhbWV0ZXJJbmRleCsrOworICAgIH0KKyAgICBteSAkcmVz
ID0gam9pbigiICYmICIsIEBhbmRFeHByZXNzaW9uKTsKKyAgICAkcmVzID0gIigkcmVzKSIgaWYg
QGFuZEV4cHJlc3Npb24gPiAxOworICAgIHJldHVybiAkcmVzOworfQorCitzdWIgR2VuZXJhdGVG
dW5jdGlvblBhcmFtZXRlcnNDaGVjaworeworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworCisg
ICAgbXkgQG9yRXhwcmVzc2lvbiA9ICgpOworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gMDsKKyAg
ICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAg
ICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAg
ICAgICAgICAgIHB1c2goQG9yRXhwcmVzc2lvbiwgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2tFeHBy
ZXNzaW9uKCRudW1QYXJhbWV0ZXJzLCAkZnVuY3Rpb24pKTsKKyAgICAgICAgfQorICAgICAgICAk
bnVtUGFyYW1ldGVycysrOworICAgIH0KKyAgICBwdXNoKEBvckV4cHJlc3Npb24sIEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrRXhwcmVzc2lvbigkbnVtUGFyYW1ldGVycywgJGZ1bmN0aW9uKSk7Cisg
ICAgcmV0dXJuIGpvaW4oIiB8fCAiLCBAb3JFeHByZXNzaW9uKTsKK30KKworc3ViIEdlbmVyYXRl
T3ZlcmxvYWRlZFByb3RvdHlwZUZ1bmN0aW9uCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7
CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlm
dDsKKworICAgICMgR2VuZXJhdGUgY29kZSBmb3IgY2hvb3NpbmcgdGhlIGNvcnJlY3Qgb3Zlcmxv
YWQgdG8gY2FsbC4gT3ZlcmxvYWRzIGFyZQorICAgICMgY2hvc2VuIGJhc2VkIG9uIHRoZSB0b3Rh
bCBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCBhbmQgdGhlIHR5cGUgb2YKKyAgICAjIHZhbHVl
cyBwYXNzZWQgaW4gbm9uLXByaW1pdGl2ZSBhcmd1bWVudCBzbG90cy4gV2hlbiBtb3JlIHRoYW4g
YSBzaW5nbGUKKyAgICAjIG92ZXJsb2FkIGlzIGFwcGxpY2FibGUsIHByZWNlZGVuY2UgaXMgZ2l2
ZW4gYWNjb3JkaW5nIHRvIHRoZSBvcmRlciBvZgorICAgICMgZGVjbGFyYXRpb24gaW4gdGhlIElE
TC4KKworICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgk
aW1wbENsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldL
X3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUpOworCisgICAgcHVzaChAaW1wbENv
bnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncylc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cit7CitFTkQKKyAgICBmb3JlYWNo
IG15ICRvdmVybG9hZCAoQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSkgeworICAgICAgICBteSAk
cGFyYW1ldGVyc0NoZWNrID0gR2VuZXJhdGVGdW5jdGlvblBhcmFtZXRlcnNDaGVjaygkb3Zlcmxv
YWQpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoJHBhcmFtZXRlcnNDaGVj
aylcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuICR7ZnVu
Y3Rpb25OYW1lfSRvdmVybG9hZC0+e292ZXJsb2FkSW5kZXh9Q2FsbGJhY2soYXJncyk7XG4iKTsK
KyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOworfQorCitFTkQKK30KKwogc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KIHsKICAgICBteSAoJG9iamVjdCwgJGRhdGFOb2RlKSA9IEBfOwpAQCAtMTE3OCw2
ICsxMjU0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICB9CiAKICAgICBmb3Jl
YWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgbmV4
dCBpZiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CiAgICAgICAgIG15ICRuYW1lID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CiAgICAgICAgIHB1c2goQGhhc2hLZXlzLCAkbmFt
ZSk7CiAKQEAgLTE3MDMsNiArMTc4MCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBl
KTsKIAogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19s
Y2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9y
LT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKKworICAgICAgICAgICAg
aWYgKEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxKSB7CisgICAgICAgICAgICAgICAgIyBB
cHBlbmQgYSBudW1iZXIgdG8gYW4gb3ZlcmxvYWRlZCBtZXRob2QncyBuYW1lIHRvIG1ha2UgaXQg
dW5pcXVlOgorICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb25OYW1lIC4g
JGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9
IHx8ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
KTsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncylcbiIpOwpAQCAtMTg2NCw2ICsxOTQ3LDExIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAg
ICAgICBpZiAoQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSA+IDEgJiYgJGZ1bmN0aW9uLT57b3Zl
cmxvYWRJbmRleH0gPT0gQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSkgeworICAgICAgICAgICAg
ICAgICMgR2VuZXJhdGUgYSBmdW5jdGlvbiBkaXNwYXRjaGluZyBjYWxsIHRvIHRoZSByZXN0IG9m
IHRoZSBvdmVybG9hZHMuCisgICAgICAgICAgICAgICAgR2VuZXJhdGVPdmVybG9hZGVkUHJvdG90
eXBlRnVuY3Rpb24oJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjE5NSw2ICsyMjgzLDEyIEBAIHN1YiBH
ZXROYXRpdmVUeXBlCiAgICAgcmV0dXJuICIke3R5cGV9KiI7CiB9CiAKK3N1YiBJc05hdGl2ZVR5
cGUKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiBleGlzdHMgJG5hdGl2ZVR5
cGV7JHR5cGV9OworfQorCiBzdWIgSlNWYWx1ZVRvTmF0aXZlCiB7CiAgICAgbXkgJHNpZ25hdHVy
ZSA9IHNoaWZ0OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCShyZXZpc2lvbiA1OTA5NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTIwNiwyMyArMjA2LDYgQEAgc3ViIEdl
bmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcKICAgICB9CiB9CiAKLXN1YiBMaW5rT3ZlcmxvYWRlZEZ1
bmN0aW9ucwotewotICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwotCi0gICAgIyBJZGVudGlmaWVz
IG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCBmb3IgZWFjaCBmdW5jdGlvbiBhZGRzIGFuIGFycmF5
IHdpdGgKLSAgICAjIGxpbmtzIHRvIGl0cyByZXNwZWN0aXZlIG92ZXJsb2FkcyAoaW5jbHVkaW5n
IGl0c2VsZikuCi0gICAgbXkgJW5hbWVUb0Z1bmN0aW9uc01hcCA9ICgpOwotICAgIGZvcmVhY2gg
bXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICBteSAkbmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotICAgICAgICAkbmFtZVRvRnVuY3Rpb25z
TWFweyRuYW1lfSA9IFtdIGlmICFleGlzdHMgJG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX07Ci0g
ICAgICAgIHB1c2goQHskbmFtZVRvRnVuY3Rpb25zTWFweyRuYW1lfX0sICRmdW5jdGlvbik7Ci0g
ICAgICAgICRmdW5jdGlvbi0+e292ZXJsb2Fkc30gPSAkbmFtZVRvRnVuY3Rpb25zTWFweyRuYW1l
fTsKLSAgICAgICAgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gPSBAeyRuYW1lVG9GdW5jdGlv
bnNNYXB7JG5hbWV9fTsKLSAgICB9Ci0KLX0KLQogc3ViIEdlbmVyYXRlSGVhZGVyCiB7CiAgICAg
bXkgJG9iamVjdCA9IHNoaWZ0OwpAQCAtMTY1OCw3ICsxNjQxLDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckdldHRlcigkaW1wbENsYXNz
TmFtZSk7CiAgICAgfQogCi0gICAgTGlua092ZXJsb2FkZWRGdW5jdGlvbnMoJGRhdGFOb2RlKTsK
KyAgICAkY29kZUdlbmVyYXRvci0+TGlua092ZXJsb2FkZWRGdW5jdGlvbnMoJGRhdGFOb2RlKTsK
IAogICAgIG15ICRpbmRleGVyOwogICAgIG15ICRuYW1lZFByb3BlcnR5R2V0dGVyOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHJldmlzaW9uIDU5MDk3
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDcgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICAvLyAnQ29udmVy
dFNjcmlwdFN0cmluZycgZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBbQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3RyaW5nIHNjcmlwdFN0cmluZ0F0dHI7CiAK
LSNpZmRlZiBURVNUSU5HX1Y4CisjaWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRF
U1RJTkdfSlMpCiAgICAgICAgIC8vIE92ZXJsb2FkcwogICAgICAgICB2b2lkICAgIG92ZXJsb2Fk
ZWRNZXRob2QoaW4gVGVzdE9iaiBvYmpBcmcsIGluIERPTVN0cmluZyBzdHJBcmcpOwogICAgICAg
ICB2b2lkICAgIG92ZXJsb2FkZWRNZXRob2QoaW4gVGVzdE9iaiBvYmpBcmcsIGluIFtPcHRpb25h
bF0gbG9uZyBpbnRBcmcpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gNTkwOTcpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDEyICszNywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1Rlc3RDYWxsYmFj
azo6SlNUZXN0Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgIDogbV9kYXRhKG5ldyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywg
Z2xvYmFsT2JqZWN0KSkKICAgICAsIG1faXNvbGF0ZWRXb3JsZChnbG9iYWxPYmplY3QtPndvcmxk
KCkpCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZ2xvYmFsT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCiB7CiB9CiAKIEpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2FsbGJh
Y2soKQogewotICAgIGNhbGxPbk1haW5UaHJlYWQoSlNDYWxsYmFja0RhdGE6OmRlbGV0ZURhdGEs
IG1fZGF0YSk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEZWxldGVD
YWxsYmFja0RhdGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7CiAjaWZuZGVmIE5ERUJVRwogICAgIG1f
ZGF0YSA9IDA7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAkocmV2aXNpb24gNTkwOTcpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw3IEBAIHByaXZhdGU6CiAKICAgICBKU0NhbGxiYWNrRGF0YSogbV9kYXRhOwog
ICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDU5MDk3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEz
Myw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnQKICNkZWZpbmUg
VEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMjZdID0KK3N0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1syN10gPQogewog
ICAgIHsgInZvaWRNZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0
aG9kKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAidm9pZE1ldGhv
ZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhB
cmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0xNjAsNiArMTYwLDcg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialBybwogICAgIHsgIm1ldGhv
ZFdpdGhPcHRpb25hbEFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFyZyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsg
Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcpLCAo
aW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MpLCAoaW50cHRyX3Qp
MyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCksIChpbnRwdHJfdCkyIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkg
fQogfTsKIApAQCAtODAxLDYgKzgwMiw4MCBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK0pTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUu
aW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBUZXN0T2JqKiBv
YmpBcmcgPSB0b1Rlc3RPYmooYXJncy5hdCgwKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcg
PSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisKKyAgICBpbXAt
Pm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBzdHJBcmcpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3Mp
OworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CisgICAgVGVzdE9iaiogb2JqQXJnID0gdG9UZXN0T2JqKGFyZ3MuYXQoMCkpOworCisg
ICAgaW50IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpOworICAgIGlmIChhcmdzQ291bnQgPCAyKSB7
CisgICAgICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBpbnQgaW50QXJnID0gYXJncy5hdCgxKS50b0lu
dDMyKGV4ZWMpOworCisgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgaW50QXJnKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNU
ZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGNvbnN0IFN0cmluZyYgc3RyQXJnID0g
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworCisgICAgaW1wLT5v
dmVybG9hZGVkTWV0aG9kKHN0ckFyZyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAg
ICBpbnQgaW50QXJnID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworCisgICAgaW1wLT5vdmVy
bG9hZGVkTWV0aG9kKGludEFyZyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB0ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoKGFyZ3Muc2l6ZSgpID09IDIgJiYgKGFyZ3MuYXQo
MCkuaXNOdWxsKCkgfHwgYXNPYmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6
c19pbmZvKSAmJiAoYXJncy5hdCgxKS5pc051bGwoKSB8fCBhcmdzLmF0KDEpLmlzVW5kZWZpbmVk
KCkgfHwgYXJncy5hdCgxKS5pc1N0cmluZygpIHx8IGFyZ3MuYXQoMSkuaXNPYmplY3QoKSkpKQor
ICAgICAgICByZXR1cm4gdGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFD
YWxsYmFjayhhcmdzKTsKKyAgICBpZiAoKGFyZ3Muc2l6ZSgpID09IDEgJiYgKGFyZ3MuYXQoMCku
aXNOdWxsKCkgfHwgYXNPYmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6c19p
bmZvKSkgfHwgKGFyZ3Muc2l6ZSgpID09IDIgJiYgKGFyZ3MuYXQoMCkuaXNOdWxsKCkgfHwgYXNP
YmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6c19pbmZvKSkpCisgICAgICAg
IHJldHVybiB0ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkNhbGxiYWNr
KGFyZ3MpOworICAgIGlmICgoYXJncy5zaXplKCkgPT0gMSAmJiAoYXJncy5hdCgwKS5pc051bGwo
KSB8fCBhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkgfHwgYXJncy5hdCgwKS5pc1N0cmluZygpIHx8
IGFyZ3MuYXQoMCkuaXNPYmplY3QoKSkpKQorICAgICAgICByZXR1cm4gdGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNDYWxsYmFjayhhcmdzKTsKKyAgICBpZiAoYXJncy5z
aXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2Q0Q2FsbGJhY2soYXJncyk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKK30KKwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPYmoqIG9iamVjdCkKIHsKICAg
ICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1Rlc3RPYmo+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgb2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCShyZXZpc2lvbiA1OTA5NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdAogSlNDOjpKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmco
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OkFyZ0xpc3QmKTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
KTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitK
U0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVl
LCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialJlYWRPbmx5SW50QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55988</attachid>
            <date>2010-05-13 09:30:14 -0700</date>
            <delta_ts>2010-05-13 09:37:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38920-20100513093013.patch</filename>
            <type>text/plain</type>
            <size>16659</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTMzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMTEgIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Vjggb3ZlcmxvYWQgc3VwcG9ydCBwb3J0ZWQgdG8gSlNDLiBVbmZvcmtpbmcgb2Ygb3ZlcmxvYWRl
ZCBkZWNsYXJhdGlvbnMgaW4gV2ViR0wgJiBDYW52YXMgd2lsbCBiZSBkb25lIGluIHN1YnNlcXVl
bnQgcGF0Y2hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4OTIwCisKKyAgICAgICAgTm90ZSB0aGF0IEpTVGVzdENhbGxiYWNrLmNwcC9oIGluY2x1
ZGUgbWlub3IgaXJyZWxldmFudCBjaGFuZ2VzIHRvbyBzaW5jZSBzb21lYm9keSBmb3Jnb3QgdG8g
dXBkYXRlIHRoZW0gYWZ0ZXIgY2hhbmdpbmcgdGhlIEpTIGdlbmVyYXRvci4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OkpTVGVz
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiAKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisKIDIwMTAtMDUtMTIgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQkocmV2aXNpb24gNTkzMzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMzYzLDQgKzM2MywyMSBAQCBzdWIgTmFt
ZXNwYWNlRm9yQXR0cmlidXRlTmFtZQogICAgIHJldHVybiAiSFRNTE5hbWVzIjsKIH0KIAorIyBJ
ZGVudGlmaWVzIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCBmb3IgZWFjaCBmdW5jdGlvbiBhZGRz
IGFuIGFycmF5IHdpdGgKKyMgbGlua3MgdG8gaXRzIHJlc3BlY3RpdmUgb3ZlcmxvYWRzIChpbmNs
dWRpbmcgaXRzZWxmKS4KK3N1YiBMaW5rT3ZlcmxvYWRlZEZ1bmN0aW9ucworeworICAgIG15ICgk
b2JqZWN0LCAkZGF0YU5vZGUpID0gQF87CisKKyAgICBteSAlbmFtZVRvRnVuY3Rpb25zTWFwID0g
KCk7CisgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7
CisgICAgICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAg
ICRuYW1lVG9GdW5jdGlvbnNNYXB7JG5hbWV9ID0gW10gaWYgIWV4aXN0cyAkbmFtZVRvRnVuY3Rp
b25zTWFweyRuYW1lfTsKKyAgICAgICAgcHVzaChAeyRuYW1lVG9GdW5jdGlvbnNNYXB7JG5hbWV9
fSwgJGZ1bmN0aW9uKTsKKyAgICAgICAgJGZ1bmN0aW9uLT57b3ZlcmxvYWRzfSA9ICRuYW1lVG9G
dW5jdGlvbnNNYXB7JG5hbWV9OworICAgICAgICAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSA9
IEB7JG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX19OworICAgIH0KK30KKworCiAxOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA1
OTMzMykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsOCBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UKICAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OwogCisgICAg
JGNvZGVHZW5lcmF0b3ItPkxpbmtPdmVybG9hZGVkRnVuY3Rpb25zKCRkYXRhTm9kZSk7CisKICAg
ICAjIFN0YXJ0IGFjdHVhbCBnZW5lcmF0aW9uCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKICAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxs
YmFja0hlYWRlcigkZGF0YU5vZGUpOwpAQCAtOTgzLDYgKzk4NSw3IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCIvLyBGdW5jdGlvbnNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9u
IChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgbmV4dCBpZiAkZnVuY3Rp
b24tPntvdmVybG9hZEluZGV4fSA+IDE7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rp
b24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5h
bWUpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CiAgICAgICAgIH0KQEAg
LTEwOTIsNiArMTA5NSw3OSBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVzSGFzaFRhYmxlKCQkKQog
ICAgIHJldHVybiAkbnVtQXR0cmlidXRlczsKIH0KIAorc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0No
ZWNrRXhwcmVzc2lvbgoreworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gc2hpZnQ7CisgICAgbXkg
JGZ1bmN0aW9uID0gc2hpZnQ7CisKKyAgICBteSBAYW5kRXhwcmVzc2lvbiA9ICgpOworICAgIHB1
c2goQGFuZEV4cHJlc3Npb24sICJhcmdzLnNpemUoKSA9PSAkbnVtUGFyYW1ldGVycyIpOworICAg
IG15ICRwYXJhbWV0ZXJJbmRleCA9IDA7CisgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgbGFzdCBpZiAkcGFyYW1ldGVySW5kZXggPj0g
JG51bVBhcmFtZXRlcnM7CisgICAgICAgIG15ICR2YWx1ZSA9ICJhcmdzLmF0KCRwYXJhbWV0ZXJJ
bmRleCkiOworICAgICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgk
cGFyYW1ldGVyLT50eXBlKTsKKworICAgICAgICAjIE9ubHkgRE9NU3RyaW5nIG9yIHdyYXBwZXIg
dHlwZXMgYXJlIGNoZWNrZWQuCisgICAgICAgICMgRm9yIERPTVN0cmluZywgTnVsbCwgVW5kZWZp
bmVkIGFuZCBhbnkgT2JqZWN0IGFyZSBhY2NlcHRlZCB0b28sIGFzCisgICAgICAgICMgdGhlc2Ug
YXJlIGFjY2VwdGFibGUgdmFsdWVzIGZvciBhIERPTVN0cmluZyBhcmd1bWVudCAoYW55IE9iamVj
dCBjYW4KKyAgICAgICAgIyBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdmlhIC50b1N0cmluZyku
CisgICAgICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2YWx1ZX0uaXNOdWxsKCkgfHwgJHt2
YWx1ZX0uaXNVbmRlZmluZWQoKSB8fCAke3ZhbHVlfS5pc1N0cmluZygpIHx8ICR7dmFsdWV9Lmlz
T2JqZWN0KCkpIikgaWYgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAg
ICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2YWx1ZX0uaXNOdWxsKCkgfHwgYXNPYmplY3Qo
JHt2YWx1ZX0pLT5pbmhlcml0cyhKUyR7dHlwZX06OnNfaW5mbykiKSB1bmxlc3MgSXNOYXRpdmVU
eXBlKCR0eXBlKTsKKworICAgICAgICAkcGFyYW1ldGVySW5kZXgrKzsKKyAgICB9CisgICAgbXkg
JHJlcyA9IGpvaW4oIiAmJiAiLCBAYW5kRXhwcmVzc2lvbik7CisgICAgJHJlcyA9ICIoJHJlcyki
IGlmIEBhbmRFeHByZXNzaW9uID4gMTsKKyAgICByZXR1cm4gJHJlczsKK30KKworc3ViIEdlbmVy
YXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2sKK3sKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsK
KworICAgIG15IEBvckV4cHJlc3Npb24gPSAoKTsKKyAgICBteSAkbnVtUGFyYW1ldGVycyA9IDA7
CisgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAg
ICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7
CisgICAgICAgICAgICBwdXNoKEBvckV4cHJlc3Npb24sIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
RXhwcmVzc2lvbigkbnVtUGFyYW1ldGVycywgJGZ1bmN0aW9uKSk7CisgICAgICAgIH0KKyAgICAg
ICAgJG51bVBhcmFtZXRlcnMrKzsKKyAgICB9CisgICAgcHVzaChAb3JFeHByZXNzaW9uLCBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVja0V4cHJlc3Npb24oJG51bVBhcmFtZXRlcnMsICRmdW5jdGlvbikp
OworICAgIHJldHVybiBqb2luKCIgfHwgIiwgQG9yRXhwcmVzc2lvbik7Cit9CisKK3N1YiBHZW5l
cmF0ZU92ZXJsb2FkZWRQcm90b3R5cGVGdW5jdGlvbgoreworICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0g
c2hpZnQ7CisKKyAgICAjIEdlbmVyYXRlIGNvZGUgZm9yIGNob29zaW5nIHRoZSBjb3JyZWN0IG92
ZXJsb2FkIHRvIGNhbGwuIE92ZXJsb2FkcyBhcmUKKyAgICAjIGNob3NlbiBiYXNlZCBvbiB0aGUg
dG90YWwgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgYW5kIHRoZSB0eXBlIG9mCisgICAgIyB2
YWx1ZXMgcGFzc2VkIGluIG5vbi1wcmltaXRpdmUgYXJndW1lbnQgc2xvdHMuIFdoZW4gbW9yZSB0
aGFuIGEgc2luZ2xlCisgICAgIyBvdmVybG9hZCBpcyBhcHBsaWNhYmxlLCBwcmVjZWRlbmNlIGlz
IGdpdmVuIGFjY29yZGluZyB0byB0aGUgb3JkZXIgb2YKKyAgICAjIGRlY2xhcmF0aW9uIGluIHRo
ZSBJREwuCisKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmly
c3QoJGltcGxDbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9y
LT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKKworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworeworRU5ECisgICAgZm9y
ZWFjaCBteSAkb3ZlcmxvYWQgKEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0pIHsKKyAgICAgICAg
bXkgJHBhcmFtZXRlcnNDaGVjayA9IEdlbmVyYXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2soJG92
ZXJsb2FkKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCRwYXJhbWV0ZXJz
Q2hlY2spXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAk
e2Z1bmN0aW9uTmFtZX0kb3ZlcmxvYWQtPntvdmVybG9hZEluZGV4fShleGVjLCB0aGlzVmFsdWUs
IGFyZ3MpO1xuIik7CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKK30KKworRU5ECit9CisKIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiB7CiAgICAgbXkgKCRvYmplY3QsICRkYXRhTm9kZSkgPSBA
XzsKQEAgLTExNzgsNiArMTI1NCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
fQogCiAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7
CisgICAgICAgIG5leHQgaWYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gPiAxOwogICAgICAg
ICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogICAgICAgICBwdXNoKEBo
YXNoS2V5cywgJG5hbWUpOwogCkBAIC0xNzAzLDYgKzE3ODAsMTIgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZSk7CiAKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdl
bmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAk
Y29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CisK
KyAgICAgICAgICAgIGlmIChAeyRmdW5jdGlvbi0+e292ZXJsb2Fkc319ID4gMSkgeworICAgICAg
ICAgICAgICAgICMgQXBwZW5kIGEgbnVtYmVyIHRvIGFuIG92ZXJsb2FkZWQgbWV0aG9kJ3MgbmFt
ZSB0byBtYWtlIGl0IHVuaXF1ZToKKyAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gJGZ1
bmN0aW9uTmFtZSAuICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBteSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUg
PSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGF0
aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+bmFtZSk7CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKQEAgLTE4NjQs
NiArMTk0NywxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKKworICAgICAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxICYmICRm
dW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID09IEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0pIHsK
KyAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIGEgZnVuY3Rpb24gZGlzcGF0Y2hpbmcgY2FsbCB0
byB0aGUgcmVzdCBvZiB0aGUgb3ZlcmxvYWRzLgorICAgICAgICAgICAgICAgIEdlbmVyYXRlT3Zl
cmxvYWRlZFByb3RvdHlwZUZ1bmN0aW9uKCRmdW5jdGlvbiwgJGRhdGFOb2RlLCAkaW1wbENsYXNz
TmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxOTUsNiArMjI4
MywxMiBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgIHJldHVybiAiJHt0eXBlfSoiOwogfQogCitz
dWIgSXNOYXRpdmVUeXBlCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gZXhp
c3RzICRuYXRpdmVUeXBleyR0eXBlfTsKK30KKwogc3ViIEpTVmFsdWVUb05hdGl2ZQogewogICAg
IG15ICRzaWduYXR1cmUgPSBzaGlmdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTkzMzMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMjMgKzIw
Niw2IEBAIHN1YiBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nCiAgICAgfQogfQogCi1zdWIgTGlu
a092ZXJsb2FkZWRGdW5jdGlvbnMKLXsKLSAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKLQotICAg
ICMgSWRlbnRpZmllcyBvdmVybG9hZGVkIGZ1bmN0aW9ucyBhbmQgZm9yIGVhY2ggZnVuY3Rpb24g
YWRkcyBhbiBhcnJheSB3aXRoCi0gICAgIyBsaW5rcyB0byBpdHMgcmVzcGVjdGl2ZSBvdmVybG9h
ZHMgKGluY2x1ZGluZyBpdHNlbGYpLgotICAgIG15ICVuYW1lVG9GdW5jdGlvbnNNYXAgPSAoKTsK
LSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKLSAg
ICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgJG5h
bWVUb0Z1bmN0aW9uc01hcHskbmFtZX0gPSBbXSBpZiAhZXhpc3RzICRuYW1lVG9GdW5jdGlvbnNN
YXB7JG5hbWV9OwotICAgICAgICBwdXNoKEB7JG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX19LCAk
ZnVuY3Rpb24pOwotICAgICAgICAkZnVuY3Rpb24tPntvdmVybG9hZHN9ID0gJG5hbWVUb0Z1bmN0
aW9uc01hcHskbmFtZX07Ci0gICAgICAgICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID0gQHsk
bmFtZVRvRnVuY3Rpb25zTWFweyRuYW1lfX07Ci0gICAgfQotCi19Ci0KIHN1YiBHZW5lcmF0ZUhl
YWRlcgogewogICAgIG15ICRvYmplY3QgPSBzaGlmdDsKQEAgLTE2NTgsNyArMTY0MSw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JHZXR0
ZXIoJGltcGxDbGFzc05hbWUpOwogICAgIH0KIAotICAgIExpbmtPdmVybG9hZGVkRnVuY3Rpb25z
KCRkYXRhTm9kZSk7CisgICAgJGNvZGVHZW5lcmF0b3ItPkxpbmtPdmVybG9hZGVkRnVuY3Rpb25z
KCRkYXRhTm9kZSk7CiAKICAgICBteSAkaW5kZXhlcjsKICAgICBteSAkbmFtZWRQcm9wZXJ0eUdl
dHRlcjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShy
ZXZpc2lvbiA1OTMzMykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAg
ICAgLy8gJ0NvbnZlcnRTY3JpcHRTdHJpbmcnIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyBzY3JpcHRT
dHJpbmdBdHRyOwogCi0jaWZkZWYgVEVTVElOR19WOAorI2lmIGRlZmluZWQoVEVTVElOR19WOCkg
fHwgZGVmaW5lZChURVNUSU5HX0pTKQogICAgICAgICAvLyBPdmVybG9hZHMKICAgICAgICAgdm9p
ZCAgICBvdmVybG9hZGVkTWV0aG9kKGluIFRlc3RPYmogb2JqQXJnLCBpbiBET01TdHJpbmcgc3Ry
QXJnKTsKICAgICAgICAgdm9pZCAgICBvdmVybG9hZGVkTWV0aG9kKGluIFRlc3RPYmogb2JqQXJn
LCBpbiBbT3B0aW9uYWxdIGxvbmcgaW50QXJnKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gNTkzMzMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJv
cGVydAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1syNl0g
PQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFs
dWVzWzI3XSA9CiB7CiAgICAgeyAidm9pZE1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZvaWRNZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAg
ICB7ICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAg
LTE2MCw2ICsxNjAsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
CiAgICAgeyAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9S
KDApIH0sCiAgICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmciLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRP
cHRpb25hbEFyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIm1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIsIERvbnREZWxldGUgfCBG
dW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJn
cyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm92ZXJsb2FkZWRN
ZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKSwg
KGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAwLCAwLCAwLCAwIFRIVU5L
X0dFTkVSQVRPUigwKSB9CiB9OwogCkBAIC04MDEsNiArODAyLDgwIEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBp
ZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRl
c3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwor
ICAgIFRlc3RPYmoqIG9iakFyZyA9IHRvVGVzdE9iaihhcmdzLmF0KDApKTsKKyAgICBjb25zdCBT
dHJpbmcmIHN0ckFyZyA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMp
KTsKKworICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChvYmpBcmcsIHN0ckFyZyk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBVTlVT
RURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6
c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBUZXN0T2JqKiBvYmpBcmcgPSB0b1Rlc3RPYmooYXJn
cy5hdCgwKSk7CisKKyAgICBpbnQgYXJnc0NvdW50ID0gYXJncy5zaXplKCk7CisgICAgaWYgKGFy
Z3NDb3VudCA8IDIpIHsKKyAgICAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZyk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGludCBpbnRBcmcgPSBh
cmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisKKyAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2Jq
QXJnLCBpbnRBcmcpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3MpOworICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgY29uc3QgU3Ry
aW5nJiBzdHJBcmcgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7
CisKKyAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qoc3RyQXJnKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9QQVJBTShh
cmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIGludCBpbnRBcmcgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisK
KyAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoaW50QXJnKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKK30KKworSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHRlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmICgoYXJncy5zaXplKCkgPT0g
MiAmJiAoYXJncy5hdCgwKS5pc051bGwoKSB8fCBhc09iamVjdChhcmdzLmF0KDApKS0+aW5oZXJp
dHMoSlNUZXN0T2JqOjpzX2luZm8pICYmIChhcmdzLmF0KDEpLmlzTnVsbCgpIHx8IGFyZ3MuYXQo
MSkuaXNVbmRlZmluZWQoKSB8fCBhcmdzLmF0KDEpLmlzU3RyaW5nKCkgfHwgYXJncy5hdCgxKS5p
c09iamVjdCgpKSkpCisgICAgICAgIHJldHVybiB0ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMShleGVjLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgIGlmICgoYXJncy5zaXpl
KCkgPT0gMSAmJiAoYXJncy5hdCgwKS5pc051bGwoKSB8fCBhc09iamVjdChhcmdzLmF0KDApKS0+
aW5oZXJpdHMoSlNUZXN0T2JqOjpzX2luZm8pKSB8fCAoYXJncy5zaXplKCkgPT0gMiAmJiAoYXJn
cy5hdCgwKS5pc051bGwoKSB8fCBhc09iamVjdChhcmdzLmF0KDApKS0+aW5oZXJpdHMoSlNUZXN0
T2JqOjpzX2luZm8pKSkKKyAgICAgICAgcmV0dXJuIHRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QyKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncyk7CisgICAgaWYgKChhcmdzLnNp
emUoKSA9PSAxICYmIChhcmdzLmF0KDApLmlzTnVsbCgpIHx8IGFyZ3MuYXQoMCkuaXNVbmRlZmlu
ZWQoKSB8fCBhcmdzLmF0KDApLmlzU3RyaW5nKCkgfHwgYXJncy5hdCgwKS5pc09iamVjdCgpKSkp
CisgICAgICAgIHJldHVybiB0ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MyhleGVjLCB0aGlzVmFsdWUsIGFyZ3MpOworICAgIGlmIChhcmdzLnNpemUoKSA9PSAxKQorICAg
ICAgICByZXR1cm4gdGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoZXhl
YywgdGhpc1ZhbHVlLCBhcmdzKTsKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOworfQorCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE9iaiogb2JqZWN0KQogewogICAgIHJldHVy
biBnZXRET01PYmplY3RXcmFwcGVyPEpTVGVzdE9iaj4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmpl
Y3QpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmgJKHJldmlzaW9uIDU5MzMzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBKU0M6OkpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90CiBKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlz
dCYpOwogSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogSlND
OjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKK0pTQzo6SlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6QXJnTGlzdCYpOwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNUZXN0T2Jq
UmVhZE9ubHlJbnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55989</attachid>
            <date>2010-05-13 09:37:18 -0700</date>
            <delta_ts>2010-05-15 03:15:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38920-20100513093717.patch</filename>
            <type>text/plain</type>
            <size>16642</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTMzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMTMgIFlhYXIgU2Nobml0bWFuICA8eWFhckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Vjggb3ZlcmxvYWQgc3VwcG9ydCBwb3J0ZWQgdG8gSlNDLiBVbmZvcmtpbmcgb2Ygb3ZlcmxvYWRl
ZCBkZWNsYXJhdGlvbnMgaW4gV2ViR0wgJiBDYW52YXMgd2lsbCBiZSBkb25lIGluIHN1YnNlcXVl
bnQgcGF0Y2hlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4OTIwCisKKyAgICAgICAgTm90ZSB0aGF0IEpTVGVzdENhbGxiYWNrLmNwcC9oIGluY2x1
ZGUgbWlub3IgaXJyZWxldmFudCBjaGFuZ2VzIHRvbyBzaW5jZSBzb21lYm9keSBmb3Jnb3QgdG8g
dXBkYXRlIHRoZW0gYWZ0ZXIgY2hhbmdpbmcgdGhlIEpTIGdlbmVyYXRvci4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OkpTVGVz
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiAKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisKIDIwMTAtMDUtMTIgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQkocmV2aXNpb24gNTkzMzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMzYzLDQgKzM2MywyMSBAQCBzdWIgTmFt
ZXNwYWNlRm9yQXR0cmlidXRlTmFtZQogICAgIHJldHVybiAiSFRNTE5hbWVzIjsKIH0KIAorIyBJ
ZGVudGlmaWVzIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCBmb3IgZWFjaCBmdW5jdGlvbiBhZGRz
IGFuIGFycmF5IHdpdGgKKyMgbGlua3MgdG8gaXRzIHJlc3BlY3RpdmUgb3ZlcmxvYWRzIChpbmNs
dWRpbmcgaXRzZWxmKS4KK3N1YiBMaW5rT3ZlcmxvYWRlZEZ1bmN0aW9ucworeworICAgIG15ICgk
b2JqZWN0LCAkZGF0YU5vZGUpID0gQF87CisKKyAgICBteSAlbmFtZVRvRnVuY3Rpb25zTWFwID0g
KCk7CisgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7
CisgICAgICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAg
ICRuYW1lVG9GdW5jdGlvbnNNYXB7JG5hbWV9ID0gW10gaWYgIWV4aXN0cyAkbmFtZVRvRnVuY3Rp
b25zTWFweyRuYW1lfTsKKyAgICAgICAgcHVzaChAeyRuYW1lVG9GdW5jdGlvbnNNYXB7JG5hbWV9
fSwgJGZ1bmN0aW9uKTsKKyAgICAgICAgJGZ1bmN0aW9uLT57b3ZlcmxvYWRzfSA9ICRuYW1lVG9G
dW5jdGlvbnNNYXB7JG5hbWV9OworICAgICAgICAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSA9
IEB7JG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX19OworICAgIH0KK30KKworCiAxOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA1
OTMzMykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsOCBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UKICAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OwogCisgICAg
JGNvZGVHZW5lcmF0b3ItPkxpbmtPdmVybG9hZGVkRnVuY3Rpb25zKCRkYXRhTm9kZSk7CisKICAg
ICAjIFN0YXJ0IGFjdHVhbCBnZW5lcmF0aW9uCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKICAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxs
YmFja0hlYWRlcigkZGF0YU5vZGUpOwpAQCAtOTgzLDYgKzk4NSw3IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCIvLyBGdW5jdGlvbnNcblxuIik7CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9u
IChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgbmV4dCBpZiAkZnVuY3Rp
b24tPntvdmVybG9hZEluZGV4fSA+IDE7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rp
b24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5h
bWUpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYpO1xuIik7CiAgICAgICAgIH0KQEAg
LTEwOTIsNiArMTA5NSw3OSBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVzSGFzaFRhYmxlKCQkKQog
ICAgIHJldHVybiAkbnVtQXR0cmlidXRlczsKIH0KIAorc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0No
ZWNrRXhwcmVzc2lvbgoreworICAgIG15ICRudW1QYXJhbWV0ZXJzID0gc2hpZnQ7CisgICAgbXkg
JGZ1bmN0aW9uID0gc2hpZnQ7CisKKyAgICBteSBAYW5kRXhwcmVzc2lvbiA9ICgpOworICAgIHB1
c2goQGFuZEV4cHJlc3Npb24sICJhcmdzLnNpemUoKSA9PSAkbnVtUGFyYW1ldGVycyIpOworICAg
IG15ICRwYXJhbWV0ZXJJbmRleCA9IDA7CisgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgbGFzdCBpZiAkcGFyYW1ldGVySW5kZXggPj0g
JG51bVBhcmFtZXRlcnM7CisgICAgICAgIG15ICR2YWx1ZSA9ICJhcmdzLmF0KCRwYXJhbWV0ZXJJ
bmRleCkiOworICAgICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgk
cGFyYW1ldGVyLT50eXBlKTsKKworICAgICAgICAjIE9ubHkgRE9NU3RyaW5nIG9yIHdyYXBwZXIg
dHlwZXMgYXJlIGNoZWNrZWQuCisgICAgICAgICMgRm9yIERPTVN0cmluZywgTnVsbCwgVW5kZWZp
bmVkIGFuZCBhbnkgT2JqZWN0IGFyZSBhY2NlcHRlZCB0b28sIGFzCisgICAgICAgICMgdGhlc2Ug
YXJlIGFjY2VwdGFibGUgdmFsdWVzIGZvciBhIERPTVN0cmluZyBhcmd1bWVudCAoYW55IE9iamVj
dCBjYW4KKyAgICAgICAgIyBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdmlhIC50b1N0cmluZyku
CisgICAgICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2YWx1ZX0uaXNOdWxsKCkgfHwgJHt2
YWx1ZX0uaXNVbmRlZmluZWQoKSB8fCAke3ZhbHVlfS5pc1N0cmluZygpIHx8ICR7dmFsdWV9Lmlz
T2JqZWN0KCkpIikgaWYgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAg
ICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2YWx1ZX0uaXNOdWxsKCkgfHwgYXNPYmplY3Qo
JHt2YWx1ZX0pLT5pbmhlcml0cyhKUyR7dHlwZX06OnNfaW5mbykiKSB1bmxlc3MgSXNOYXRpdmVU
eXBlKCR0eXBlKTsKKworICAgICAgICAkcGFyYW1ldGVySW5kZXgrKzsKKyAgICB9CisgICAgbXkg
JHJlcyA9IGpvaW4oIiAmJiAiLCBAYW5kRXhwcmVzc2lvbik7CisgICAgJHJlcyA9ICIoJHJlcyki
IGlmIEBhbmRFeHByZXNzaW9uID4gMTsKKyAgICByZXR1cm4gJHJlczsKK30KKworc3ViIEdlbmVy
YXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2sKK3sKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsK
KworICAgIG15IEBvckV4cHJlc3Npb24gPSAoKTsKKyAgICBteSAkbnVtUGFyYW1ldGVycyA9IDA7
CisgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAg
ICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPcHRpb25hbCJ9KSB7
CisgICAgICAgICAgICBwdXNoKEBvckV4cHJlc3Npb24sIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
RXhwcmVzc2lvbigkbnVtUGFyYW1ldGVycywgJGZ1bmN0aW9uKSk7CisgICAgICAgIH0KKyAgICAg
ICAgJG51bVBhcmFtZXRlcnMrKzsKKyAgICB9CisgICAgcHVzaChAb3JFeHByZXNzaW9uLCBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVja0V4cHJlc3Npb24oJG51bVBhcmFtZXRlcnMsICRmdW5jdGlvbikp
OworICAgIHJldHVybiBqb2luKCIgfHwgIiwgQG9yRXhwcmVzc2lvbik7Cit9CisKK3N1YiBHZW5l
cmF0ZU92ZXJsb2FkZWRQcm90b3R5cGVGdW5jdGlvbgoreworICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRpbXBsQ2xhc3NOYW1lID0g
c2hpZnQ7CisKKyAgICAjIEdlbmVyYXRlIGNvZGUgZm9yIGNob29zaW5nIHRoZSBjb3JyZWN0IG92
ZXJsb2FkIHRvIGNhbGwuIE92ZXJsb2FkcyBhcmUKKyAgICAjIGNob3NlbiBiYXNlZCBvbiB0aGUg
dG90YWwgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgYW5kIHRoZSB0eXBlIG9mCisgICAgIyB2
YWx1ZXMgcGFzc2VkIGluIG5vbi1wcmltaXRpdmUgYXJndW1lbnQgc2xvdHMuIFdoZW4gbW9yZSB0
aGFuIGEgc2luZ2xlCisgICAgIyBvdmVybG9hZCBpcyBhcHBsaWNhYmxlLCBwcmVjZWRlbmNlIGlz
IGdpdmVuIGFjY29yZGluZyB0byB0aGUgb3JkZXIgb2YKKyAgICAjIGRlY2xhcmF0aW9uIGluIHRo
ZSBJREwuCisKKyAgICBteSAkZnVuY3Rpb25OYW1lID0gImpzJHtpbXBsQ2xhc3NOYW1lfVByb3Rv
dHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOworeworRU5ECisgICAgZm9yZWFjaCBteSAkb3ZlcmxvYWQgKEB7JGZ1bmN0
aW9uLT57b3ZlcmxvYWRzfX0pIHsKKyAgICAgICAgbXkgJHBhcmFtZXRlcnNDaGVjayA9IEdlbmVy
YXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2soJG92ZXJsb2FkKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCRwYXJhbWV0ZXJzQ2hlY2spXG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiAke2Z1bmN0aW9uTmFtZX0kb3ZlcmxvYWQtPntv
dmVybG9hZEluZGV4fShleGVjLCB0aGlzVmFsdWUsIGFyZ3MpO1xuIik7CisgICAgfQorICAgIHB1
c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yKTsKK30KKworRU5ECit9CisKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiB7CiAg
ICAgbXkgKCRvYmplY3QsICRkYXRhTm9kZSkgPSBAXzsKQEAgLTExNzgsNiArMTI1NCw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgZm9yZWFjaCBteSAkZnVuY3Rp
b24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgIG5leHQgaWYgJGZ1bmN0aW9u
LT57b3ZlcmxvYWRJbmRleH0gPiAxOwogICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lOwogICAgICAgICBwdXNoKEBoYXNoS2V5cywgJG5hbWUpOwogCkBAIC0xNzAz
LDYgKzE3ODAsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CiAKICAgICAgICAg
ICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NO
YW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CisKKyAgICAgICAgICAgIGlmIChAeyRmdW5jdGlv
bi0+e292ZXJsb2Fkc319ID4gMSkgeworICAgICAgICAgICAgICAgICMgQXBwZW5kIGEgbnVtYmVy
IHRvIGFuIG92ZXJsb2FkZWQgbWV0aG9kJ3MgbmFtZSB0byBtYWtlIGl0IHVuaXF1ZToKKyAgICAg
ICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uTmFtZSAuICRmdW5jdGlvbi0+e292
ZXJsb2FkSW5kZXh9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBt
eSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGF0aW9uRnVuY3Rpb24ifSB8fCAkY29kZUdlbmVy
YXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CiAKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25O
YW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpXG4iKTsKQEAgLTE4NjQsNiArMTk0NywxMSBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAgaWYgKEB7JGZ1
bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxICYmICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID09
IEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0pIHsKKyAgICAgICAgICAgICAgICAjIEdlbmVyYXRl
IGEgZnVuY3Rpb24gZGlzcGF0Y2hpbmcgY2FsbCB0byB0aGUgcmVzdCBvZiB0aGUgb3ZlcmxvYWRz
LgorICAgICAgICAgICAgICAgIEdlbmVyYXRlT3ZlcmxvYWRlZFByb3RvdHlwZUZ1bmN0aW9uKCRm
dW5jdGlvbiwgJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTIxOTUsNiArMjI4MywxMiBAQCBzdWIgR2V0TmF0aXZlVHlwZQog
ICAgIHJldHVybiAiJHt0eXBlfSoiOwogfQogCitzdWIgSXNOYXRpdmVUeXBlCit7CisgICAgbXkg
JHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gZXhpc3RzICRuYXRpdmVUeXBleyR0eXBlfTsKK30K
Kwogc3ViIEpTVmFsdWVUb05hdGl2ZQogewogICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNp
b24gNTkzMzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMjMgKzIwNiw2IEBAIHN1YiBHZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nCiAgICAgfQogfQogCi1zdWIgTGlua092ZXJsb2FkZWRGdW5jdGlvbnMKLXsKLSAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKLQotICAgICMgSWRlbnRpZmllcyBvdmVybG9hZGVkIGZ1
bmN0aW9ucyBhbmQgZm9yIGVhY2ggZnVuY3Rpb24gYWRkcyBhbiBhcnJheSB3aXRoCi0gICAgIyBs
aW5rcyB0byBpdHMgcmVzcGVjdGl2ZSBvdmVybG9hZHMgKGluY2x1ZGluZyBpdHNlbGYpLgotICAg
IG15ICVuYW1lVG9GdW5jdGlvbnNNYXAgPSAoKTsKLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAo
QHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKLSAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgJG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX0gPSBb
XSBpZiAhZXhpc3RzICRuYW1lVG9GdW5jdGlvbnNNYXB7JG5hbWV9OwotICAgICAgICBwdXNoKEB7
JG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX19LCAkZnVuY3Rpb24pOwotICAgICAgICAkZnVuY3Rp
b24tPntvdmVybG9hZHN9ID0gJG5hbWVUb0Z1bmN0aW9uc01hcHskbmFtZX07Ci0gICAgICAgICRm
dW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID0gQHskbmFtZVRvRnVuY3Rpb25zTWFweyRuYW1lfX07
Ci0gICAgfQotCi19Ci0KIHN1YiBHZW5lcmF0ZUhlYWRlcgogewogICAgIG15ICRvYmplY3QgPSBz
aGlmdDsKQEAgLTE2NTgsNyArMTY0MSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JHZXR0ZXIoJGltcGxDbGFzc05hbWUpOwogICAgIH0K
IAotICAgIExpbmtPdmVybG9hZGVkRnVuY3Rpb25zKCRkYXRhTm9kZSk7CisgICAgJGNvZGVHZW5l
cmF0b3ItPkxpbmtPdmVybG9hZGVkRnVuY3Rpb25zKCRkYXRhTm9kZSk7CiAKICAgICBteSAkaW5k
ZXhlcjsKICAgICBteSAkbmFtZWRQcm9wZXJ0eUdldHRlcjsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiA1OTMzMykKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgICAgLy8gJ0NvbnZlcnRTY3JpcHRTdHJpbmcn
IGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnRT
Y3JpcHRTdHJpbmddIERPTVN0cmluZyBzY3JpcHRTdHJpbmdBdHRyOwogCi0jaWZkZWYgVEVTVElO
R19WOAorI2lmIGRlZmluZWQoVEVTVElOR19WOCkgfHwgZGVmaW5lZChURVNUSU5HX0pTKQogICAg
ICAgICAvLyBPdmVybG9hZHMKICAgICAgICAgdm9pZCAgICBvdmVybG9hZGVkTWV0aG9kKGluIFRl
c3RPYmogb2JqQXJnLCBpbiBET01TdHJpbmcgc3RyQXJnKTsKICAgICAgICAgdm9pZCAgICBvdmVy
bG9hZGVkTWV0aG9kKGluIFRlc3RPYmogb2JqQXJnLCBpbiBbT3B0aW9uYWxdIGxvbmcgaW50QXJn
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAkocmV2aXNpb24gNTkzMzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBK
U1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydAogI2RlZmluZSBUSFVOS19HRU5FUkFU
T1IoZ2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1syNl0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZh
bHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzI3XSA9CiB7CiAgICAgeyAidm9pZE1l
dGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2QpLCAoaW50cHRy
X3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRy
X3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE2MCw2ICsxNjAsNyBAQCBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvCiAgICAgeyAibWV0aG9kV2l0aE9wdGlvbmFs
QXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJn
KSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyksIChpbnRwdHJfdCkyIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3
b09wdGlvbmFsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAorICAgIHsgIm92ZXJsb2FkZWRNZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9S
KDApIH0sCiAgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9CiB9OwogCkBAIC04
MDEsNiArODAyLDgwIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGUK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAorSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorewor
ICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNU
ZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIFRlc3RPYmoqIG9iakFyZyA9IHRvVGVz
dE9iaihhcmdzLmF0KDApKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyA9IHVzdHJpbmdUb1N0
cmluZyhhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpKTsKKworICAgIGltcC0+b3ZlcmxvYWRlZE1l
dGhvZChvYmpBcmcsIHN0ckFyZyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJncyk7CisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBU
ZXN0T2JqKiBvYmpBcmcgPSB0b1Rlc3RPYmooYXJncy5hdCgwKSk7CisKKyAgICBpbnQgYXJnc0Nv
dW50ID0gYXJncy5zaXplKCk7CisgICAgaWYgKGFyZ3NDb3VudCA8IDIpIHsKKyAgICAgICAgaW1w
LT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIH0KKworICAgIGludCBpbnRBcmcgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisK
KyAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBpbnRBcmcpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgVU5VU0VEX1BB
UkFNKGFyZ3MpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisgICAgY29uc3QgU3RyaW5nJiBzdHJBcmcgPSB1c3RyaW5nVG9TdHJp
bmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7CisKKyAgICBpbXAtPm92ZXJsb2FkZWRNZXRo
b2Qoc3RyQXJnKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQoreworICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGludCBpbnRBcmcg
PSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisKKyAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qo
aW50QXJnKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCit7CisgICAgaWYgKChhcmdzLnNpemUoKSA9PSAyICYmIChhcmdzLmF0KDApLmlzTnVsbCgp
IHx8IGFzT2JqZWN0KGFyZ3MuYXQoMCkpLT5pbmhlcml0cyhKU1Rlc3RPYmo6OnNfaW5mbykgJiYg
KGFyZ3MuYXQoMSkuaXNOdWxsKCkgfHwgYXJncy5hdCgxKS5pc1VuZGVmaW5lZCgpIHx8IGFyZ3Mu
YXQoMSkuaXNTdHJpbmcoKSB8fCBhcmdzLmF0KDEpLmlzT2JqZWN0KCkpKSkKKyAgICAgICAgcmV0
dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoZXhlYywgdGhp
c1ZhbHVlLCBhcmdzKTsKKyAgICBpZiAoKGFyZ3Muc2l6ZSgpID09IDEgJiYgKGFyZ3MuYXQoMCku
aXNOdWxsKCkgfHwgYXNPYmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6c19p
bmZvKSkgfHwgKGFyZ3Muc2l6ZSgpID09IDIgJiYgKGFyZ3MuYXQoMCkuaXNOdWxsKCkgfHwgYXNP
YmplY3QoYXJncy5hdCgwKSktPmluaGVyaXRzKEpTVGVzdE9iajo6c19pbmZvKSkpCisgICAgICAg
IHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKGV4ZWMs
IHRoaXNWYWx1ZSwgYXJncyk7CisgICAgaWYgKChhcmdzLnNpemUoKSA9PSAxICYmIChhcmdzLmF0
KDApLmlzTnVsbCgpIHx8IGFyZ3MuYXQoMCkuaXNVbmRlZmluZWQoKSB8fCBhcmdzLmF0KDApLmlz
U3RyaW5nKCkgfHwgYXJncy5hdCgwKS5pc09iamVjdCgpKSkpCisgICAgICAgIHJldHVybiBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzKGV4ZWMsIHRoaXNWYWx1ZSwg
YXJncyk7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KGV4ZWMsIHRoaXNWYWx1ZSwgYXJn
cyk7CisgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKK30KKwogSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RPYmoqIG9iamVjdCkKIHsKICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3Jh
cHBlcjxKU1Rlc3RPYmo+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lvbiA1OTMz
MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdAogSlNDOjpKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKIEpTQzo6SlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKIEpTQzo6SlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QW5kVHdvT3B0aW9uYWxBcmdzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6
SlNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CitKU0M6OkpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsK
IC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5SW50QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>