<?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>26382</bug_id>
          
          <creation_ts>2009-06-13 23:17:56 -0700</creation_ts>
          <short_desc>[ES5] Implement Function.prototype.bind</short_desc>
          <delta_ts>2011-10-18 01:03:59 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>ES5</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="tav">tav</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>arv</cc>
    
    <cc>barraclough</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>erights</cc>
    
    <cc>ggaren</cc>
    
    <cc>gsnedders</cc>
    
    <cc>jesus</cc>
    
    <cc>john.david.dalton</cc>
    
    <cc>kangax</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>marcus</cc>
    
    <cc>mathias</cc>
    
    <cc>me</cc>
    
    <cc>mike</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>pmuellr</cc>
    
    <cc>simon_kaegi</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>webmaster</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>125742</commentid>
    <comment_count>0</comment_count>
    <who name="tav">tav</who>
    <bug_when>2009-06-13 23:17:56 -0700</bug_when>
    <thetext>ES5 adds a bind() method to Function.prototype as pioneered by the Prototype Library.

  Function.prototype.bind (thisArg [, arg1 [, arg2, …]]) 

It is defined in §15.3.4.5 of http://www.ecma-international.org/publications/files/drafts/tc39-2009-025.pdf

--------------------------------------------------

The bind method takes one or more arguments, thisArg and (optionally) arg1, arg2, etc, and returns a new function object by performing the following steps: 

1. Let Target be the this value. 

2. If IsCallable(Target) is false, throw a TypeError exception. 

3. Let A be a new (possibly empty) internal list of all of the argument values provided after thisArg (arg1, arg2 etc), in order. 

4. Let F be a new native ECMAScript object . 

5. Set the [[TargetFunction]] internal property of F to Target. 

6. Set the [[BoundThis]] internal property of F to the value of thisArg. 

7. Set the [[BoundArgs]] internal property of F to A. 

8. Set the [[Class]] internal property of F to &quot;Function&quot;. 

9. Set the [[Prototype]] internal property of F to the standard built-in Function prototype object as  specified in 15.3.3.1. 

10. Set the [[Call]] internal property of F as described in 15.3.4.5.1. 

11. Set the [[Construct]] internal property of F as described in 15.3.4.5.2. 

12. Set the [[HasInstance]] internal property of F as described in 15.3.4.5.3. 

13. The [[Scope]] internal property of F is unused and need not exist. 

14. If the [[Class]] internal property of Target is &quot;Function&quot;, then 

a. Let L be the length property of Target minus the length of A. 
b. Set the length own property of F to either 0 or L, whichever is larger.  

15. Else set the length own property of F to 0. 

16. The length own property of F is given attributes as specified in 15.3.5.1. 

17. Set the [[Extensible]] internal property of F to true. 

18. Call the [[DefineOwnProperty]] internal method of F with arguments &quot;caller&quot;, PropertyDescriptor {[[Value: null, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}, and false. 

19. Call the [[DefineOwnProperty]] internal method of F with arguments &quot;arguments&quot;, PropertyDescriptor {[[Value: null, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}, and false. 

20. Return F. 

Note: The length property of the bind method is 1. 

Note: Function objects created using Function.prototype.bind do not have a prototype property. 

[[Call]] 

When the [[Call]] internal method of a function object, F, which was created using the bind function is called with a this value and a list of arguments ExtraArgs the following steps are taken: 

1. Let boundArgs be the value of F‘s [[BoundArgs]] internal property. 

2. Let boundThis be the value of F‘s [[BoundThis]] internal property. 

3. Let target be the value of F‘s [[TargetFunction]] internal property. 

4. Let args be a new list containing the same values as the list boundArgs in the same order followed by the same values as the list ExtraArgs in the same order. 

5. Return the result of  calling the [[Call]] internal method of target providing boundThis as the this value and providing args as the arguments. 

[[Construct]] 

When the [[Construct]] internal method of a function object, F that was created using the bind function is called with a list of arguments ExtraArgs the following steps are taken: 

1. Let target be the value of F‘s [[TargetFunction]] internal property. 

2. If target has no [[Construct]] internal method, a TypeError exception is thrown. 

3. Let boundArgs be the value of F‘s [[BoundArgs]] internal property. 

4. Let args be a new list containing the same values as the list boundArgs in the same order followed by the same values as the list ExtraArgs in the same order. 

5. Return the result of  calling the [[Construct]] internal method of  target providing Args as the arguments. 

[[HasInstance]] (V) 

When the [[HasInstance]] internal method of a function object F, that was created using the bind function is called with argument V the following steps are taken: 

1. Let target be the value of F‘s [[TargetFunction]] internal property. 

2. If target has no [[HasInstance]] internal method, a TypeError exception is thrown. 

3. Return the result of  calling the [[HasInstance]] internal method of target providing V as the argument. 

--------------------------------------------------

In order to facilitate the implementation of .bind(), Object now has a number of internal properties. These are defined in §8.6.2 of the spec.

Property: [[TargetFunction]]
Value Type Domain: Object

The target function of a function object created using the standard built-in Function.prototype.bind method. Only ECMAScript objects created using Function.prototype.bind have a [[TargetFunction]] internal property. 

Property: [[BoundThis]]
Value Type Domain: any

The pre-bound this value of a function Object created using the standard built-in Function.prototype.bind method. Only ECMAScript objects created using Function.prototype.bind have a [[BoundThis]] internal property. 

Property: [[BoundArguments]]
Value Type Domain: List of any

The pre-bound argument values of a function Object created using the standard built-in Function.prototype.bind method. Only ECMAScript objects created using Function.prototype.bind have a [[BoundArguments]] internal property. 

See http://www.prototypejs.org/api/function/bind for the inspiration which led to .bind() becoming part of the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169458</commentid>
    <comment_count>1</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-12-07 13:33:51 -0800</bug_when>
    <thetext>*** Bug 32243 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182121</commentid>
    <comment_count>2</comment_count>
    <who name="kangax">kangax</who>
    <bug_when>2010-01-18 20:39:27 -0800</bug_when>
    <thetext>Would be great to have this. And here&apos;s a similar Mozilla ticket for reference — https://bugzilla.mozilla.org/show_bug.cgi?id=429507</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215504</commentid>
    <comment_count>3</comment_count>
      <attachid>53992</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-21 14:35:29 -0700</bug_when>
    <thetext>Created attachment 53992
Attempt to implement Function.prototype.bind()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216405</commentid>
    <comment_count>4</comment_count>
      <attachid>54158</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-23 07:57:15 -0700</bug_when>
    <thetext>Created attachment 54158
Attempt 2 to implement Function.prototype.bind()

This clean up some minor issues, adds tests and more build systems support. The implementation for a very simple case (just binding &apos;this&apos; in a small function without parameters), is around 4 times slower than using JS directly. When there&apos;s complexity, this difference is smaller: taking around 50% more time in more complex cases (with curried parameter and a larger function). Talking to Oliver Hunt, if I understood correctly this overhead might be due the re-entering the VM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216774</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-24 19:06:10 -0700</bug_when>
    <thetext>I don&apos;t think we should land a version of Function.prototype.bind() if it is slower than a JS-implemented version. We should look into ways to make this faster, or find a way to implement fully or partially in JS but still look native in the required ways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216776</commentid>
    <comment_count>6</comment_count>
    <who name="kangax">kangax</who>
    <bug_when>2010-04-24 19:31:05 -0700</bug_when>
    <thetext>The fastest implementation of `bind` I was able to come up with back in the days was the one with load-time + run-time forking (to avoid unnecessary arguments concatenation). Does native `bind` perform better than this &quot;optimized&quot; version?

Function.prototype.bind = (function(){
  
  var _slice = Array.prototype.slice;
  
  return function(context) {
    var fn = this,
        args = _slice.call(arguments, 1);

    if (args.length) { 
      return function() {
        return arguments.length
          ? fn.apply(context, args.concat(_slice.call(arguments)))
          : fn.apply(context, args);
      }
    } 
    return function() {
      return arguments.length
        ? fn.apply(context, arguments)
        : fn.call(context);
    }; 
  }
})();


There are also some tests in this thread: https://prototype.lighthouseapp.com/projects/8886/tickets/215-optimize-bind-bindaseventlistener</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216779</commentid>
    <comment_count>7</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-24 20:30:23 -0700</bug_when>
    <thetext>Thanks for looking into it.

For the record, the simplest case (and the one with worst performance) I was testing was comparing &apos;g&apos; and &apos;h&apos;

    g = function() { return obj.f(); }
    h = obj.f.bind(obj);  // using the native implementation

Agreed that we should land a solution only if it is not slower. So, I&apos;ll look into Maciej&apos;s suggestions to improve the performance and report back here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216841</commentid>
    <comment_count>8</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-25 11:00:04 -0700</bug_when>
    <thetext>There&apos;s a benchmark for the bind() function, which includes both Prototype.js trunk implementation and the one pointed out by kangax:

http://www.broofa.com/Tools/JSLitmus/tests/PrototypeBind.html

I&apos;ve changed my patch to rename the native bind to &apos;bindNative&apos; (so no collisions with any other implementation), and added a case for it.

My conclusion is that the situation isn&apos;t as bad as we thought. The difference between my previous tests is that real world &apos;bind()&apos; implementations perform worse than special tuned functions that I was using.

Results in the following chart -&gt; 
http://chart.apis.google.com/chart?chtt=Prototype%20bind()%20Performance|Ops/sec%20(Safari%20533.7%20on%20Linux)&amp;chts=000000,10&amp;cht=bhg&amp;chd=t:8258481,7556237,6140297,1255825,873981,641343,1546185,981289,788777,20532293,966813,778470,20099368,2898464,2094766,4424939,3588929,509668,4555667,2904887,2065063&amp;chds=0,20532293&amp;chxt=x&amp;chxl=0:|0|20.5M&amp;chsp=0,1&amp;chm=tnative%20bind(obj)(8.3M),000000,0,0,10|tnative%20bind(obj\,1\,2)(7.6M),000000,0,1,10|tnative%20bind(obj\,1\,2[\,3\,4])(6.1M),000000,0,2,10|t1.6.0.3%20bind(obj)(1.3M),000000,0,3,10|t1.6.0.3%20bind(obj\,1\,2)(874K),000000,0,4,10|t1.6.0.3%20bind(obj\,1\,2[\,3\,4])(641.3K),000000,0,5,10|ttrunk%20bind(obj)(1.5M),000000,0,6,10|ttrunk%20bind(obj\,1\,2)(981.3K),000000,0,7,10|ttrunk%20bind(obj\,1\,2[\,3\,4])(788.8K),000000,0,8,10|tTobie&apos;s%20bind(obj)(20.5M),000000,0,9,10|tTobie&apos;s%20bind(obj\,1\,2)(966.8K),000000,0,10,10|tTobie&apos;s%20bind(obj\,1\,2[\,3\,4])(778.5K),000000,0,11,10|tBroofa&apos;s%20bind(obj)(20.1M),000000,0,12,10|tBroofa&apos;s%20bind(obj\,1\,2)(2.9M),000000,0,13,10|tBroofa&apos;s%20bind(obj\,1\,2[\,3\,4])(2.1M),000000,0,14,10|tKangax&apos;s%20bind(obj)(4.4M),000000,0,15,10|tKangax&apos;s%20bind(obj\,1\,2)(3.6M),000000,0,16,10|tKangax&apos;s%20bind(obj\,1\,2[\,3\,4])(509.7K),000000,0,17,10|tImproved%20bind(obj)(4.6M),000000,0,18,10|tImproved%20bind(obj\,1\,2)(2.9M),000000,0,19,10|tImproved%20bind(obj\,1\,2[\,3\,4])(2.1M),000000,0,20,10&amp;chbh=15,0,5&amp;chs=250x490</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216842</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-04-25 11:21:38 -0700</bug_when>
    <thetext>Okay, here&apos;s my thought for getting a non-reentrant version of bind, it only works for non-partially applied bound functions (but according to Caio&apos;s numbers the native impl of partially applied bind is faster than the js version).  Basically we do this:
    DEFINE_OPCODE(op_call) {
...
    call_start:
        JSValue v = callFrame-&gt;r(func).jsValue();

        CallData callData;
        CallType callType = v.getCallData(callData);

        if (callType == CallTypeJS) {
...
        
        if (callType == CallTypeHost) {
             if (callData.boundFunction) {
                  callFrame-&gt;r(func) = callData.boundFunction;
                  // we actually need to work out what thisRegister is :D
                  callFrame-&gt;r(thisRegister) = static_cast&lt;JSBoundFunction*&gt;(v.asCell())-&gt;thisArgument();
                  goto call_start;
             }
             ...

That should save the reentry cost -- in the jit we&apos;d probably just want to do the handling on return from host call stub.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216849</commentid>
    <comment_count>10</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-25 13:05:49 -0700</bug_when>
    <thetext>For reference, the same chart as before but with JSC compiled without JIT:

http://chart.apis.google.com/chart?chtt=Prototype%20bind()%20Performance|Ops/sec%20(Safari%20533.7%20on%20Linux)&amp;chts=000000,10&amp;cht=bhg&amp;chd=t:7791053,7395421,5339330,1009812,752429,533684,1062186,766510,586194,8581717,767408,585147,8457131,2138261,1198116,3382643,2843309,474214,3431348,2124399,1180846&amp;chds=0,8581717&amp;chxt=x&amp;chxl=0:|0|8.6M&amp;chsp=0,1&amp;chm=tnative%20bind(obj)(7.8M),000000,0,0,10|tnative%20bind(obj\,1\,2)(7.4M),000000,0,1,10|tnative%20bind(obj\,1\,2[\,3\,4])(5.3M),000000,0,2,10|t1.6.0.3%20bind(obj)(1M),000000,0,3,10|t1.6.0.3%20bind(obj\,1\,2)(752.4K),000000,0,4,10|t1.6.0.3%20bind(obj\,1\,2[\,3\,4])(533.7K),000000,0,5,10|ttrunk%20bind(obj)(1.1M),000000,0,6,10|ttrunk%20bind(obj\,1\,2)(766.5K),000000,0,7,10|ttrunk%20bind(obj\,1\,2[\,3\,4])(586.2K),000000,0,8,10|tTobie&apos;s%20bind(obj)(8.6M),000000,0,9,10|tTobie&apos;s%20bind(obj\,1\,2)(767.4K),000000,0,10,10|tTobie&apos;s%20bind(obj\,1\,2[\,3\,4])(585.1K),000000,0,11,10|tBroofa&apos;s%20bind(obj)(8.5M),000000,0,12,10|tBroofa&apos;s%20bind(obj\,1\,2)(2.1M),000000,0,13,10|tBroofa&apos;s%20bind(obj\,1\,2[\,3\,4])(1.2M),000000,0,14,10|tKangax&apos;s%20bind(obj)(3.4M),000000,0,15,10|tKangax&apos;s%20bind(obj\,1\,2)(2.8M),000000,0,16,10|tKangax&apos;s%20bind(obj\,1\,2[\,3\,4])(474.2K),000000,0,17,10|tImproved%20bind(obj)(3.4M),000000,0,18,10|tImproved%20bind(obj\,1\,2)(2.1M),000000,0,19,10|tImproved%20bind(obj\,1\,2[\,3\,4])(1.2M),000000,0,20,10&amp;chbh=15,0,5&amp;chs=250x490</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216855</commentid>
    <comment_count>11</comment_count>
      <attachid>54243</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-25 15:47:53 -0700</bug_when>
    <thetext>Created attachment 54243
Native implementation of Function.prototype.bind()

Same as before, just fixes order of functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216857</commentid>
    <comment_count>12</comment_count>
      <attachid>54245</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-04-25 15:53:47 -0700</bug_when>
    <thetext>Created attachment 54245
Optimization for bind() used just for binding &apos;this&apos; (non JIT case)

This patch follows the suggestion of Oliver Hunt in the bug comments. For the non-JIT case, this will make the native implementation win all the other JavaScript-only implementations we found out. In my local tests it even gets a better result than the explicit &apos;function() { obj.method(); }&apos; call.

We are using http://www.broofa.com/Tools/JSLitmus/tests/PrototypeBind.html as the benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219940</commentid>
    <comment_count>13</comment_count>
      <attachid>54896</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-02 18:28:27 -0700</bug_when>
    <thetext>Created attachment 54896
Native implementation of Function.prototype.bind(), v4

Use Cell space available, and avoid allocating space for holding arguments if they are not used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219942</commentid>
    <comment_count>14</comment_count>
      <attachid>54897</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-02 18:31:12 -0700</bug_when>
    <thetext>Created attachment 54897
Optimization for bind() used just for binding &apos;this&apos; (non JIT case)

Updated because of changes in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219943</commentid>
    <comment_count>15</comment_count>
      <attachid>54898</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-02 18:33:05 -0700</bug_when>
    <thetext>Created attachment 54898
Optimization for bind() used just for binding &apos;this&apos; (JIT case)

Uses same idea from previous optimization in the JIT context. With this patch, in the linked benchmark, the native is faster all the three scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219981</commentid>
    <comment_count>16</comment_count>
      <attachid>54900</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-02 19:24:38 -0700</bug_when>
    <thetext>Created attachment 54900
Optimization for bind() used just for binding &apos;this&apos; (non JIT case)

After some discussion with Oliver and testing, it isn&apos;t always safe to rewrite the &apos;callee&apos; register, since it might be reused by the bytecode. For the non-JIT case the fix is simple, just change the local variable used instead of the call frame.

The JIT version is already correct in this case, but suffer other problem: that slow cases can look at the callee register again (ex.: compileOpCallSlowCase() when OPTIMIZED_CALL is disabled).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221297</commentid>
    <comment_count>17</comment_count>
      <attachid>55158</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-05 15:09:56 -0700</bug_when>
    <thetext>Created attachment 55158
Native implementation of Function.prototype.bind(), v5

Adds a missing &apos;OverridesMarkChildren&apos; to the StructureFlags of JSBoundFunction. This is needed because JSBoundFunction implements markChildren method.

Also added new test cases to guarantee that CallFrame rewriting done by possible optimizations will not break the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221307</commentid>
    <comment_count>18</comment_count>
      <attachid>55161</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-05 15:32:43 -0700</bug_when>
    <thetext>Created attachment 55161
Optimization for bind() used just for binding &apos;this&apos; (JIT case), v2

This an improvement of earlier implementation of the JIT rewriting optimization.

Functionally it should be complete, still have a FIXME to check and possibly removing a redundant information passed to the stub. Note that I&apos;m still working only in one case of Call until we settle in a solution.

After some tests and discussion with Oliver, we understood that it was not always safe to rewrite the register containing the &apos;callee&apos; since it could be a non-temporary register. The solution in this patch is to force every call emitted to use a temporary for &apos;callee&apos;. This causes impact on the size of bytecode generated, but guarantee that it&apos;s safe to rewrite the call frame, making the optimization correct.

I still want to give a different take on optimizing this case, and try to save/restore the &apos;callee&apos; instead of guarantee that it is always a temporary. Then compare both solutions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224640</commentid>
    <comment_count>19</comment_count>
      <attachid>55852</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2010-05-12 08:37:45 -0700</bug_when>
    <thetext>Created attachment 55852
Native implementation of Function.prototype.bind(), v6

Fixes building in 64bits: JSBoundFunction was too large to fit in the cell, so moved other members inside the private data. Tested that on MacOSX.

Also cached the CallData information of target function, this gave a small boost in performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228084</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-19 17:06:10 -0700</bug_when>
    <thetext>I&apos;d really prefer that we didn&apos;t add overhead to normal calls in order to make bind faster. We&apos;re working really hard right now to remove overhead from normal calls, and it&apos;s paying off in terms of performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228088</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-19 17:12:53 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I&apos;d really prefer that we didn&apos;t add overhead to normal calls in order to make bind faster. We&apos;re working really hard right now to remove overhead from normal calls, and it&apos;s paying off in terms of performance.

Geoff actually pointed out that the new specialised thunk stuff i added would potentially make the jit code much easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228090</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-19 17:13:41 -0700</bug_when>
    <thetext>I think a better solution would be for the binding function to fix up callframe[callee] and callframe[this], and then jump to the bound function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377318</commentid>
    <comment_count>23</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-03-31 10:38:33 -0700</bug_when>
    <thetext>ping

The lack of this is starting to cause compat issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377322</commentid>
    <comment_count>24</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-03-31 10:45:13 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; ping
&gt; 
&gt; The lack of this is starting to cause compat issue.

Given that JS can be used to make a reasonably performant  implementation and most sites that use Function.prototype.bind  do actually start of with an existence check and then add the js impl this is not high priority.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377774</commentid>
    <comment_count>25</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2011-04-01 07:06:20 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; ping
&gt; &gt; 
&gt; &gt; The lack of this is starting to cause compat issue.
&gt; 
&gt; Given that JS can be used to make a reasonably performant  implementation and most sites that use Function.prototype.bind  do actually start of with an existence check and then add the js impl this is not high priority.

JS can reasonably emulate the [[Call]] behavior of .bind() but not its [[Construct]] behavior. This is important because the [[Construct]] behavior of .bind() is the only way to implement a correct var-args construction (new) operation in ES5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393696</commentid>
    <comment_count>26</comment_count>
    <who name="Simon Kaegi">simon_kaegi</who>
    <bug_when>2011-04-27 11:51:58 -0700</bug_when>
    <thetext>another ping

The lack of this is starting to cause compatibility issues in some of the browser-based tooling being done at Eclipse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394422</commentid>
    <comment_count>27</comment_count>
    <who name="Simon Kaegi">simon_kaegi</who>
    <bug_when>2011-04-28 07:43:16 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; The lack of this is starting to cause compatibility issues in some of the browser-based tooling being done at Eclipse.

To be clear the shim is fine for our case. Just comes as a surprise that we need it for JSC given that all other current VMs provide support. Despite our best effort to inform we get folk using Function.bind and testing in other browsers and then have failing unit tests during our nightly builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394442</commentid>
    <comment_count>28</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-04-28 08:32:31 -0700</bug_when>
    <thetext>Hello Geoffrey,

(In reply to comment #22)
&gt; I think a better solution would be for the binding function to fix up callframe[callee] and callframe[this], and then jump to the bound function.

Is this still valid? Can you elaborate a bit on that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394485</commentid>
    <comment_count>29</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2011-04-28 09:35:16 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; 
&gt; JS can reasonably emulate the [[Call]] behavior of .bind() but not 
&gt; its [[Construct]] behavior. This is important because the [[Construct]] 
&gt; behavior of .bind() is the only way to implement a correct var-args 
&gt; construction (new) operation in ES5.

To expand on that, given the ES5 specified Function.prototype.bind, one can implement a &quot;construct(f, args)&quot; operation as follows:

    &gt; function construct(f, args) {
    &gt;   var bound = Function.prototype.bind.apply(f, [null].concat(args));
    &gt;   return new bound();
    &gt; }

    &gt; construct(Date, [1957, 5, 27])
    Thu Jun 27 1957 00:00:00 GMT-0700 (PDT)

Without the specified primitive implementation of bind, I know of no way for a pure JavaScript shim to correctly emulate this behavior, and therefore no way for an ES-next to ES5 compiler to correctly compile &quot;new f(...args)&quot; to ES5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471776</commentid>
    <comment_count>30</comment_count>
      <attachid>108382</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-22 12:20:57 -0700</bug_when>
    <thetext>Created attachment 108382
New patch, reentrant implementation.

A fresh implementation.  This has three interesting features:
* Based on ToT!
* Subclasses JSFunction (this allows the JIT to make fast calls to bound functions)
* Cell size is no longer restricted (doesn&apos;t need a data object).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471777</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 12:24:25 -0700</bug_when>
    <thetext>Attachment 108382 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/JavaScriptCore/runtime/ConstructData.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSFunction.h:47:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:47:  The parameter name &quot;descriptor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;nativeFunction&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:58:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:58:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:58:  The parameter name &quot;nativeExecutable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:134:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSBoundFunction.h:45:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSBoundFunction.h:45:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471788</commentid>
    <comment_count>32</comment_count>
      <attachid>108382</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-22 12:33:50 -0700</bug_when>
    <thetext>Comment on attachment 108382
New patch, reentrant implementation.

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

&gt; Source/JavaScriptCore/runtime/JSBoundFunction.cpp:92
&gt; +    // FIXME: our instanceof implementation will have already (incorrectly) performed
&gt; +    // a [[Get]] of .prototype from the bound function object, which is incorrect!
&gt; +    proto = m_targetFunction-&gt;get(exec, exec-&gt;propertyNames().prototype);

You should add a test showing this is incorrect.

&gt; Source/JavaScriptCore/runtime/JSBoundFunction.h:66
&gt; +    WriteBarrier&lt;JSObject&gt; m_targetFunction;
&gt; +    WriteBarrier&lt;Unknown&gt; m_boundThis;
&gt; +    WriteBarrier&lt;Unknown&gt; m_boundArgs;

How are these marked?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471792</commentid>
    <comment_count>33</comment_count>
      <attachid>108382</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-22 12:38:37 -0700</bug_when>
    <thetext>Comment on attachment 108382
New patch, reentrant implementation.

Attachment 108382 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9798358</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471800</commentid>
    <comment_count>34</comment_count>
      <attachid>108382</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-22 12:50:02 -0700</bug_when>
    <thetext>Comment on attachment 108382
New patch, reentrant implementation.

Attachment 108382 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9792455</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471854</commentid>
    <comment_count>35</comment_count>
      <attachid>108399</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-22 14:04:56 -0700</bug_when>
    <thetext>Created attachment 108399
Build fixes, GC fixes, added more test cases, fix for recursive hasInstance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471858</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 14:09:05 -0700</bug_when>
    <thetext>Attachment 108399 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/JavaScriptCore/runtime/ConstructData.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSFunction.h:47:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:47:  The parameter name &quot;descriptor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;nativeFunction&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:58:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:58:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:58:  The parameter name &quot;nativeExecutable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSFunction.h:135:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSBoundFunction.h:45:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSBoundFunction.h:45:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471862</commentid>
    <comment_count>37</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-22 14:21:29 -0700</bug_when>
    <thetext>Fixed in r95751.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472138</commentid>
    <comment_count>38</comment_count>
      <attachid>108399</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-09-23 03:21:30 -0700</bug_when>
    <thetext>Comment on attachment 108399
Build fixes, GC fixes, added more test cases, fix for recursive hasInstance

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

&gt; LayoutTests/fast/js/Object-getOwnPropertyNames-expected.txt:46
&gt; -PASS getSortedOwnPropertyNames(Function.prototype) is [&apos;apply&apos;, &apos;call&apos;, &apos;constructor&apos;, &apos;length&apos;, &apos;name&apos;, &apos;toString&apos;]
&gt; +FAIL getSortedOwnPropertyNames(Function.prototype) should be apply,call,constructor,length,name,toString. Was apply,bind,call,constructor,length,name,toString.

Shouldn&apos;t we update the test to expect the bind property?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472391</commentid>
    <comment_count>39</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-23 12:14:42 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 108399 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108399&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/js/Object-getOwnPropertyNames-expected.txt:46
&gt; &gt; -PASS getSortedOwnPropertyNames(Function.prototype) is [&apos;apply&apos;, &apos;call&apos;, &apos;constructor&apos;, &apos;length&apos;, &apos;name&apos;, &apos;toString&apos;]
&gt; &gt; +FAIL getSortedOwnPropertyNames(Function.prototype) should be apply,call,constructor,length,name,toString. Was apply,bind,call,constructor,length,name,toString.
&gt; 
&gt; Shouldn&apos;t we update the test to expect the bind property?

Ooops, yes, meant to do so, clearly forgot to.  Will do.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53992</attachid>
            <date>2010-04-21 14:35:29 -0700</date>
            <delta_ts>2010-04-23 07:57:15 -0700</delta_ts>
            <desc>Attempt to implement Function.prototype.bind()</desc>
            <filename>0001-DRAFT-Function.prototype.bind-support.patch</filename>
            <type>text/plain</type>
            <size>13460</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSA2YTdiNDZhOTI0OTVkYTRmY2QxYTYwNTE3NzljZGI0MDJmNjM3OTBkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAxOCBBcHIgMjAxMCAxODo1MDo1OSAt
MDMwMApTdWJqZWN0OiBbUEFUQ0hdIFtEUkFGVF0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQoKSBz
dXBwb3J0CgotLS0KIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybyAgICAgICAgICAg
IHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggICB8
ICAgIDEgKwogSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAgfCAg
IDE4ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgICB8
ICAxMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmggICAgIHwgICA3NiArKysrKysrKysrKysrKysrKysrCiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCAgICB8ICAgIDIgKwogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oICAgICAgfCAgICAyICsKIDcgZmlsZXMgY2hh
bmdlZCwgMjA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAoKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybyBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnBybwppbmRleCBiZThhMTU0Li42MGFkOWU4IDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUucHJvCkBAIC0xMzksNiArMTM5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVu
dGltZS9KU0J5dGVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvSlNDZWxsLmNwcCBcCiAgICAgcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcCBcCisgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwK
ICAgICBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgXAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBcCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggZGUyNGY0YS4uNmRk
MzNhNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAt
MzMsNiArMzMsNyBAQAogICAgIG1hY3JvKF9fbG9va3VwU2V0dGVyX18pIFwKICAgICBtYWNybyhh
cHBseSkgXAogICAgIG1hY3JvKGFyZ3VtZW50cykgXAorICAgIG1hY3JvKGJpbmQpIFwKICAgICBt
YWNybyhjYWxsKSBcCiAgICAgbWFjcm8oY2FsbGVlKSBcCiAgICAgbWFjcm8oY2FsbGVyKSBcCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IGE3N2I1
YjIuLmI2NzA2MjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdC
dWlsZGVyLmgiCkBAIC0zNyw2ICszOCw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRnVu
Y3Rpb25Qcm90b3R5cGUpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQmluZChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAogRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9u
UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBz
dHJ1Y3R1cmUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bGxJZGVudGlmaWVyKQpAQCAtNTEsNiAr
NTMsNyBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHByb3RvdAogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24oZXhlYywgKmFwcGx5RnVuY3Rpb24sIERvbnRFbnVtKTsKICAgICAqY2Fs
bEZ1bmN0aW9uID0gbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgcHJvdG90
eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCBmdW5j
dGlvblByb3RvRnVuY0NhbGwpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYywgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIo
ZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5iaW5kLCBmdW5jdGlvblByb3RvRnVuY0JpbmQpLCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC0xMDAsNiArMTAzLDkgQEAgSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmEKICAgICAgICAgcmV0dXJuIGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lKGV4ZWMpLCAiKCkge1xuICAgIFtu
YXRpdmUgY29kZV1cbn0iKTsKICAgICB9CiAKKyAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZK
U0JvdW5kRnVuY3Rpb246OmluZm8pKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImJv
dW5kZWQgZnVuY3Rpb24iKTsKKwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CiB9CiAKQEAgLTE0Myw0ICsxNDksMTYgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZQogICAg
IHJldHVybiBjYWxsKGV4ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcmdzLmF0
KDApLCBjYWxsQXJncyk7CiB9CiAKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3Rv
RnVuY0JpbmQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVlLmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lIHx8IGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIEFyZ0xpc3QgYm91bmRBcmdz
OworICAgIGFyZ3MuZ2V0U2xpY2UoMSwgYm91bmRBcmdzKTsKKyAgICByZXR1cm4gbmV3IChleGVj
KSBKU0JvdW5kRnVuY3Rpb24oZXhlYywgdGhpc1ZhbHVlLCBhcmdzLmF0KDApLCBib3VuZEFyZ3Mp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODBjYjk2
Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uY3BwCkBAIC0wLDAgKzEsMTA1IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNCb3VuZEZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKEpTQm91bmRGdW5jdGlvbik7CisKK2NvbnN0IENsYXNzSW5mbyBKU0JvdW5kRnVuY3Rpb246
OmluZm8gPSB7ICJGdW5jdGlvbiIsIDAsIDAsIDAgfTsKKworSlNCb3VuZEZ1bmN0aW9uOjpKU0Jv
dW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRhcmdldEZ1bmN0aW9uLCBKU1Zh
bHVlIGJvdW5kVGhpcywgY29uc3QgQXJnTGlzdCYgYXJncykKKyAgICA6IEludGVybmFsRnVuY3Rp
b24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ib3Vu
ZEZ1bmN0aW9uU3RydWN0dXJlKCksIElkZW50aWZpZXIoZXhlYywgImJvdW5kRnVuY3Rpb24iKSkK
KyAgICAsIGQobmV3IEpTQm91bmRGdW5jdGlvbkRhdGEodGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhp
cywgYXJncykpCit7CisgICAgY29uc3QgdW5zaWduZWQgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0RnVu
Y3Rpb24uZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4
ZWMpOworICAgIGludCBsZW5ndGggPSB0YXJnZXRMZW5ndGggLSBhcmdzLnNpemUoKTsKKyAgICBp
ZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVuZ3RoKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIC8vICMjIyBEZWZpbmVPd25Qcm9wZXJ0eSBm
b3IgImNhbGxlciIgYW5kICJhcmd1bWVudHMiIHVzaW5nIFRocm93VHlwZUVycm9yIGFzIGdldC9z
ZXQKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAg
IEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jID0gYXNCb3VuZEZ1bmN0aW9uKGZ1bmN0aW9uKTsK
KworICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBhc09iamVjdChib3VuZEZ1bmMtPnRhcmdldEZ1bmN0
aW9uKCkpOworICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKKyAgICBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGUgPSB0YXJnZXQtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0
YSk7CisgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisKKyAgICBKU1ZhbHVlKiBib3Vu
ZEFyZ3MgPSBib3VuZEZ1bmMtPmJvdW5kQXJncygpOworICAgIHNpemVfdCBib3VuZEFyZ0NvdW50
ID0gYm91bmRGdW5jLT5ib3VuZEFyZ0NvdW50KCk7CisKKyAgICBpZiAoIWFyZ3Muc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIHRhcmdldCwgY29uc3RydWN0VHlwZSwgY29u
c3RydWN0RGF0YSwgQXJnTGlzdChib3VuZEFyZ3MsIGJvdW5kQXJnQ291bnQpKTsKKworICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGZpbmFsQXJnczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJv
dW5kQXJnQ291bnQ7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChib3VuZEFyZ3NbaV0p
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykKKyAgICAgICAgZmlu
YWxBcmdzLmFwcGVuZChhcmdzLmF0KGkpKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywg
dGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBmaW5hbEFyZ3MpOworfQorCiti
b29sIEpTQm91bmRGdW5jdGlvbjo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBKU1ZhbHVlIHByb3RvKQoreworICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBhc09iamVj
dChkLT50YXJnZXRGdW5jdGlvbik7CisgICAgaWYgKCF0YXJnZXQtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOworCisgICAgcmV0dXJuIHRhcmdldC0+aGFzSW5zdGFuY2UoZXhl
YywgdmFsdWUsIHRhcmdldC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU0JvdW5kRnVuY3Rpb246OmdldENvbnN0cnVjdERh
dGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEJvdW5kRnVuY3Rpb247CisgICAgcmV0dXJuIENvbnN0
cnVjdFR5cGVIb3N0OworfQorCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb3Vu
ZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jID0g
YXNCb3VuZEZ1bmN0aW9uKGZ1bmN0aW9uKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBhc09i
amVjdChib3VuZEZ1bmMtPnRhcmdldEZ1bmN0aW9uKCkpOworICAgIENhbGxEYXRhIGNhbGxEYXRh
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGFyZ2V0LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7
CisKKyAgICAvLyBXZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBpbiBmdW5jdGlvblByb3RvRnVuY0Jp
bmQoKQorICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOworCisgICAgSlNWYWx1
ZSogYm91bmRBcmdzID0gYm91bmRGdW5jLT5ib3VuZEFyZ3MoKTsKKyAgICBzaXplX3QgYm91bmRB
cmdDb3VudCA9IGJvdW5kRnVuYy0+Ym91bmRBcmdDb3VudCgpOworCisgICAgaWYgKCFhcmdzLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIGNhbGwoZXhlYywgdGFyZ2V0LCBjYWxsVHlwZSwgY2FsbERh
dGEsIGJvdW5kRnVuYy0+Ym91bmRUaGlzKCksIEFyZ0xpc3QoYm91bmRBcmdzLCBib3VuZEFyZ0Nv
dW50KSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBmaW5hbEFyZ3M7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBib3VuZEFyZ0NvdW50OyBpKyspCisgICAgICAgIGZpbmFsQXJncy5hcHBl
bmQoYm91bmRBcmdzW2ldKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBp
KyspCisgICAgICAgIGZpbmFsQXJncy5hcHBlbmQoYXJncy5hdChpKSk7CisKKyAgICByZXR1cm4g
Y2FsbChleGVjLCB0YXJnZXQsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYm91bmRGdW5jLT5ib3VuZFRo
aXMoKSwgZmluYWxBcmdzKTsKK30KKworQ2FsbFR5cGUgSlNCb3VuZEZ1bmN0aW9uOjpnZXRDYWxs
RGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9u
ID0gY2FsbEJvdW5kRnVuY3Rpb247CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKwordm9p
ZCBKU0JvdW5kRnVuY3Rpb246Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKK3sK
KyAgICBKU09iamVjdDo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisgICAgbWFya1N0YWNrLmFw
cGVuZChkLT50YXJnZXRGdW5jdGlvbik7CisgICAgbWFya1N0YWNrLmFwcGVuZChkLT5ib3VuZFRo
aXMpOyAvLyAjIyMgc2hvdWxkIEkgY2hlY2sgZm9yIGlzTnVsbD8KKyAgICBtYXJrU3RhY2suYXBw
ZW5kVmFsdWVzKGQtPmFyZ3MsIGQtPmFyZ0NvdW50LCBNYXlDb250YWluTnVsbFZhbHVlcyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhZjRkNgotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKQEAg
LTAsMCArMSw3NiBAQAorI2lmbmRlZiBKU0JvdW5kRnVuY3Rpb25faAorI2RlZmluZSBKU0JvdW5k
RnVuY3Rpb25faAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNCb3VuZEZ1bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
eworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CisKKyAgICBKU1ZhbHVlIHRhcmdldEZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gZC0+dGFyZ2V0RnVuY3Rpb247IH0KKyAgICBKU1ZhbHVlIGJv
dW5kVGhpcygpIGNvbnN0IHsgcmV0dXJuIGQtPmJvdW5kVGhpczsgfQorICAgIEpTVmFsdWUqIGJv
dW5kQXJncygpIGNvbnN0IHsgcmV0dXJuIGQtPmFyZ3M7IH0KKyAgICBzaXplX3QgYm91bmRBcmdD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIGQtPmFyZ0NvdW50OyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIEFub255bW91c1Nsb3RDb3VudCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzSGFzSW5zdGFuY2Ug
fCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7
CisKKyAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3RE
YXRhJik7CisgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOworCisg
ICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKKworICAgIHN0cnVjdCBK
U0JvdW5kRnVuY3Rpb25EYXRhIDogRmFzdEFsbG9jQmFzZSB7CisgICAgICAgIEpTQm91bmRGdW5j
dGlvbkRhdGEoSlNWYWx1ZSB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCisgICAgICAgICAgICA6IHRhcmdldEZ1bmN0aW9uKHRhcmdldEZ1bmN0
aW9uKQorICAgICAgICAgICAgLCBib3VuZFRoaXMoYm91bmRUaGlzKQorICAgICAgICAgICAgLCBh
cmdzKDApCisgICAgICAgICAgICAsIGFyZ0NvdW50KGFyZ3Muc2l6ZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoYXJnQ291bnQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hcmdzID0g
bmV3IEpTVmFsdWVbYXJnQ291bnRdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+YXJnc1tpXSA9IGFy
Z3MuYXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB+SlNCb3VuZEZ1
bmN0aW9uRGF0YSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBbXSBhcmdzOworICAg
ICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSB0YXJnZXRGdW5jdGlvbjsKKyAgICAgICAgSlNWYWx1
ZSBib3VuZFRoaXM7CisgICAgICAgIEpTVmFsdWUqIGFyZ3M7CisgICAgICAgIHNpemVfdCBhcmdD
b3VudDsKKyAgICB9OworCisgICAgT3duUHRyPEpTQm91bmRGdW5jdGlvbkRhdGE+IGQ7Cit9Owor
CitKU0JvdW5kRnVuY3Rpb24qIGFzQm91bmRGdW5jdGlvbihKU1ZhbHVlKTsKKworaW5saW5lIEpT
Qm91bmRGdW5jdGlvbiogYXNCb3VuZEZ1bmN0aW9uKEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNT
RVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkpTQm91bmRGdW5jdGlvbjo6aW5mbykpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0JvdW5kRnVuY3Rpb24qPihhc09iamVjdCh2YWx1ZSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQm91bmRGdW5jdGlvbl9o
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDg2NjkwYmQu
LmY1OWNmMTggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBA
IC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2xvYmFsRXZhbEZ1bmN0aW9uLmgi
CisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CkBAIC0yMTksNiArMjIwLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBw
cm90b3R5cGUpCiAKICAgICBkKCktPmZ1bmN0aW9uU3RydWN0dXJlID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwogICAgIGQoKS0+Y2FsbGJhY2tG
dW5jdGlvblN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+Ym91bmRGdW5jdGlvblN0cnVjdHVyZSA9
IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
OwogICAgIGQoKS0+YXJndW1lbnRzU3RydWN0dXJlID0gQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1
cmUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwogICAgIGQoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0
cnVjdHVyZSA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+b2Jq
ZWN0UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlID0gSlNDYWxs
YmFja09iamVjdDxKU09iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShkKCktPm9iamVjdFByb3RvdHlw
ZSk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmgg
Yi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggZGY5NDJjZi4u
NTdlYjZlYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMTM2
LDYgKzEzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVy
ZT4gYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gYXJy
YXlTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBib29sZWFuT2JqZWN0
U3RydWN0dXJlOworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gYm91bmRGdW5jdGlvblN0
cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGNhbGxiYWNrQ29uc3RydWN0
b3JTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBjYWxsYmFja0Z1bmN0
aW9uU3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gY2FsbGJhY2tPYmpl
Y3RTdHJ1Y3R1cmU7CkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFN0cnVjdHVyZSogYXJndW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5hcmd1
bWVudHNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+YXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAg
U3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5i
b29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZSogYm91bmRG
dW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Ym91bmRGdW5jdGlvblN0cnVj
dHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUu
Z2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gZCgpLT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9Ci0tIAoxLjcuMC40LjM2MC5n
MTE3NjZjCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54158</attachid>
            <date>2010-04-23 07:57:15 -0700</date>
            <delta_ts>2010-04-25 15:47:53 -0700</delta_ts>
            <desc>Attempt 2 to implement Function.prototype.bind()</desc>
            <filename>0001-Implement-ES5-Function.prototype.bind-function.patch</filename>
            <type>text/plain</type>
            <size>20717</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSBhYTJiZmU0NjM5MGJmNDgwZmZmN2U3OGJkMmQyMmE5OTc2ZTk2NzA5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAxOCBBcHIgMjAxMCAxODo1MDo1OSAt
MDMwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxlbWVudCBFUzUgRnVuY3Rpb24ucHJvdG90eXBlLmJp
bmQgZnVuY3Rpb24KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjM4
MgoKLS0tCiBKYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDEgKwogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAg
ICAgICAgfCAgICAyICsKIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkgICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8gICAg
ICAgICAgICAgICAgICB8ICAgIDEgKwogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oICAgICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwICAgICAgIHwgICAxOCArKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5jcHAgICAgICAgICB8ICAxMDUgKysrKysrKysrKysrKysrKysrKysK
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggICAgICAgICAgIHwgICA3
NiArKysrKysrKysrKysrKwogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAgICAgICAgICAgfCAgICAyICsKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaCAgICAgICAgICAgIHwgICAgMiArCiAuLi4vanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFt
ZXMtZXhwZWN0ZWQudHh0ICAgICB8ICAgIDIgKy0KIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rp
b24tYmluZC5odG1sICAgICAgICAgICAgIHwgICAxMyArKysKIC4uLi9qcy9zY3JpcHQtdGVzdHMv
T2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMuanMgIHwgICAgMiArLQogTGF5b3V0VGVzdHMvZmFz
dC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcyAgfCAgIDUwICsrKysrKysrKwogMTQg
ZmlsZXMgY2hhbmdlZCwgMjc1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC5o
dG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMv
ZnVuY3Rpb24tYmluZC5qcwoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0FuZHJvaWQubWsg
Yi9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCmluZGV4IDFiNWRhMDIuLjY0ZWZjOGUgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0FuZHJvaWQubWsKKysrIGIvSmF2YVNjcmlwdENvcmUvQW5k
cm9pZC5tawpAQCAtMTAzLDYgKzEwMyw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJcnVudGlt
ZS9KU0FQSVZhbHVlV3JhcHBlci5jcHAgXAogCXJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBcCiAJ
cnVudGltZS9KU0FycmF5LmNwcCBcCisJcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKIAly
dW50aW1lL0pTQnl0ZUFycmF5LmNwcCBcCiAJcnVudGltZS9KU0NlbGwuY3BwIFwKIAlydW50aW1l
L0pTRnVuY3Rpb24uY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtIGIvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzFkNjFhMS4uMmZjZTk3
NyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTQzOSw2ICs0MzksOCBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBcCiAJSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5jcHAgXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAgXAogCUphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggMWYyYjk2MS4u
YTJhMjhmYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQor
KysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0yMjMsNiArMjIzLDgg
QEAKICAgICAgICAgICAgICdydW50aW1lL0pTQWN0aXZhdGlvbi5oJywKICAgICAgICAgICAgICdy
dW50aW1lL0pTQXJyYXkuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL0pTQXJyYXkuaCcsCisg
ICAgICAgICAgICAncnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdy
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oJywKICAgICAgICAgICAgICdydW50aW1lL0pTQnl0ZUFy
cmF5LmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0J5dGVBcnJheS5oJywKICAgICAgICAg
ICAgICdydW50aW1lL0pTQ2VsbC5jcHAnLApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUucHJvIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCmluZGV4
IDFjZDk2MDkuLjQzZDQwNjcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KQEAgLTE0Niw2
ICsxNDYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0pTQnl0ZUFycmF5LmNwcCBcCiAg
ICAgcnVudGltZS9KU0NlbGwuY3BwIFwKICAgICBydW50aW1lL0pTRnVuY3Rpb24uY3BwIFwKKyAg
ICBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAogICAgIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaAppbmRleCBkZTI0ZjRhLi42ZGQzM2E1IDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0zMyw2ICszMyw3IEBACiAgICAgbWFjcm8o
X19sb29rdXBTZXR0ZXJfXykgXAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1l
bnRzKSBcCisgICAgbWFjcm8oYmluZCkgXAogICAgIG1hY3JvKGNhbGwpIFwKICAgICBtYWNybyhj
YWxsZWUpIFwKICAgICBtYWNybyhjYWxsZXIpIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5jcHAKaW5kZXggYTc3YjViMi4uZjdjZTFkMSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAK
IAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRl
ICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1N0cmluZ0J1aWxkZXIuaCIKQEAgLTM3LDYgKzM4LDcg
QEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChGdW5jdGlvblByb3RvdHlwZSk7CiBzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90
b0Z1bmNCaW5kKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
OwogCiBGdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKICAgICA6IEludGVybmFs
RnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubnVsbElkZW50aWZpZXIpCkBAIC01MSw2ICs1Myw3IEBAIHZvaWQgRnVuY3Rpb25Qcm90
b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
cHJvdG90CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAqYXBw
bHlGdW5jdGlvbiwgRG9udEVudW0pOwogICAgICpjYWxsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIE5h
dGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCk7CiAgICAg
cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAqY2FsbEZ1bmN0aW9uLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBu
ZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJpbmQsIGZ1bmN0aW9uUHJvdG9GdW5j
QmluZCksIERvbnRFbnVtKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
RnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKQEAgLTk1LDYgKzk4LDkgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmEKICAgICAg
ICAgfQogICAgIH0KIAorICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoJkpTQm91bmRGdW5jdGlv
bjo6aW5mbykpCisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiZnVuY3Rpb24gKCkge1xu
ICAgIFtib3VuZGVkIGZ1bmN0aW9uXVxufSIpOworCiAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0
cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpIHsKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24odGhpc1ZhbHVlKTsKICAgICAgICAgcmV0dXJu
IGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1l
KGV4ZWMpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKTsKQEAgLTE0Myw0ICsxNDksMTYg
QEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZQogICAgIHJldHVybiBjYWxsKGV4ZWMsIHRoaXNWYWx1
ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcmdzLmF0KDApLCBjYWxsQXJncyk7CiB9CiAKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0JpbmQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAg
IENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdGhpc1ZhbHVlLmdl
dENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lIHx8
IGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKKworICAgIEFyZ0xpc3QgYm91bmRBcmdzOworICAgIGFyZ3MuZ2V0U2xpY2UoMSwgYm91
bmRBcmdzKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU0JvdW5kRnVuY3Rpb24oZXhlYywgdGhp
c1ZhbHVlLCBhcmdzLmF0KDApLCBib3VuZEFyZ3MpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODg4NDNhCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsMTA1IEBACisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisKKyNpbmNs
dWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQm91bmRGdW5jdGlvbik7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU0JvdW5kRnVuY3Rpb246OmluZm8gPSB7ICJGdW5jdGlvbiIsICZJbnRl
cm5hbEZ1bmN0aW9uOjppbmZvLCAwLCAwIH07CisKK0pTQm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBi
b3VuZFRoaXMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCisgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Ym91bmRGdW5j
dGlvblN0cnVjdHVyZSgpLCBJZGVudGlmaWVyKGV4ZWMsICJib3VuZEZ1bmN0aW9uIikpCisgICAg
LCBkKG5ldyBKU0JvdW5kRnVuY3Rpb25EYXRhKHRhcmdldEZ1bmN0aW9uLCBib3VuZFRoaXMsIGFy
Z3MpKQoreworICAgIGNvbnN0IHVuc2lnbmVkIHRhcmdldExlbmd0aCA9IHRhcmdldEZ1bmN0aW9u
LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
KyAgICBpbnQgbGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gYXJncy5zaXplKCk7CisgICAgaWYgKGxl
bmd0aCA8IDApCisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCksIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICAvLyBGSVhNRTogRGVmaW5lT3duUHJvcGVydHkgZm9y
ICJjYWxsZXIiIGFuZCAiYXJndW1lbnRzIiB1c2luZyBUaHJvd1R5cGVFcnJvciBhcyBnZXQvc2V0
LgorfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEJvdW5kRnVuY3Rpb24oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
SlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmMgPSBhc0JvdW5kRnVuY3Rpb24oZnVuY3Rpb24pOwor
CisgICAgSlNPYmplY3QqIHRhcmdldCA9IGFzT2JqZWN0KGJvdW5kRnVuYy0+dGFyZ2V0RnVuY3Rp
b24oKSk7CisgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOworICAgIENvbnN0cnVjdFR5
cGUgY29uc3RydWN0VHlwZSA9IHRhcmdldC0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3REYXRh
KTsKKyAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIEpTVmFsdWUqIGJvdW5k
QXJncyA9IGJvdW5kRnVuYy0+Ym91bmRBcmdzKCk7CisgICAgc2l6ZV90IGJvdW5kQXJnQ291bnQg
PSBib3VuZEZ1bmMtPmJvdW5kQXJnQ291bnQoKTsKKworICAgIGlmIChhcmdzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNv
bnN0cnVjdERhdGEsIEFyZ0xpc3QoYm91bmRBcmdzLCBib3VuZEFyZ0NvdW50KSk7CisKKyAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBmaW5hbEFyZ3M7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBi
b3VuZEFyZ0NvdW50OyBpKyspCisgICAgICAgIGZpbmFsQXJncy5hcHBlbmQoYm91bmRBcmdzW2ld
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCisgICAgICAgIGZp
bmFsQXJncy5hcHBlbmQoYXJncy5hdChpKSk7CisKKyAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMs
IHRhcmdldCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgZmluYWxBcmdzKTsKK30KKwor
Ym9vbCBKU0JvdW5kRnVuY3Rpb246Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90bykKK3sKKyAgICBKU09iamVjdCogdGFyZ2V0ID0gYXNPYmpl
Y3QoZC0+dGFyZ2V0RnVuY3Rpb24pOworICAgIGlmICghdGFyZ2V0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIHJldHVybiB0YXJnZXQtPmhhc0luc3RhbmNlKGV4
ZWMsIHZhbHVlLCB0YXJnZXQtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlKSk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNCb3VuZEZ1bmN0aW9uOjpnZXRDb25zdHJ1Y3RE
YXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RCb3VuZEZ1bmN0aW9uOworICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSG9zdDsKK30KKworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm91
bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuYyA9
IGFzQm91bmRGdW5jdGlvbihmdW5jdGlvbik7CisKKyAgICBKU09iamVjdCogdGFyZ2V0ID0gYXNP
YmplY3QoYm91bmRGdW5jLT50YXJnZXRGdW5jdGlvbigpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHRhcmdldC0+Z2V0Q2FsbERhdGEoY2FsbERhdGEp
OworCisgICAgLy8gV2UgYWxyZWFkeSBjaGVja2VkIHRoaXMgaW4gZnVuY3Rpb25Qcm90b0Z1bmNC
aW5kKCkuCisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CisKKyAgICBKU1Zh
bHVlKiBib3VuZEFyZ3MgPSBib3VuZEZ1bmMtPmJvdW5kQXJncygpOworICAgIHNpemVfdCBib3Vu
ZEFyZ0NvdW50ID0gYm91bmRGdW5jLT5ib3VuZEFyZ0NvdW50KCk7CisKKyAgICBpZiAoYXJncy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBib3VuZEZ1bmMtPmJvdW5kVGhpcygpLCBBcmdMaXN0KGJvdW5kQXJncywgYm91bmRB
cmdDb3VudCkpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgZmluYWxBcmdzOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYm91bmRBcmdDb3VudDsgaSsrKQorICAgICAgICBmaW5hbEFyZ3Mu
YXBwZW5kKGJvdW5kQXJnc1tpXSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLnNpemUo
KTsgaSsrKQorICAgICAgICBmaW5hbEFyZ3MuYXBwZW5kKGFyZ3MuYXQoaSkpOworCisgICAgcmV0
dXJuIGNhbGwoZXhlYywgdGFyZ2V0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGJvdW5kRnVuYy0+Ym91
bmRUaGlzKCksIGZpbmFsQXJncyk7Cit9CisKK0NhbGxUeXBlIEpTQm91bmRGdW5jdGlvbjo6Z2V0
Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5j
dGlvbiA9IGNhbGxCb3VuZEZ1bmN0aW9uOworICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisK
K3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2sp
Cit7CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworICAgIG1hcmtTdGFj
ay5hcHBlbmQoZC0+dGFyZ2V0RnVuY3Rpb24pOworICAgIG1hcmtTdGFjay5hcHBlbmQoZC0+Ym91
bmRUaGlzKTsKKyAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKGQtPmFyZ3MsIGQtPmFyZ0NvdW50
LCBNYXlDb250YWluTnVsbFZhbHVlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaCBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzhhZjRkNgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBKU0JvdW5k
RnVuY3Rpb25faAorI2RlZmluZSBKU0JvdW5kRnVuY3Rpb25faAorCisjaW5jbHVkZSAiSW50ZXJu
YWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNCb3VuZEZ1bmN0aW9u
IDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQm91
bmRGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
CisKKyAgICBKU1ZhbHVlIHRhcmdldEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gZC0+dGFyZ2V0
RnVuY3Rpb247IH0KKyAgICBKU1ZhbHVlIGJvdW5kVGhpcygpIGNvbnN0IHsgcmV0dXJuIGQtPmJv
dW5kVGhpczsgfQorICAgIEpTVmFsdWUqIGJvdW5kQXJncygpIGNvbnN0IHsgcmV0dXJuIGQtPmFy
Z3M7IH0KKyAgICBzaXplX3QgYm91bmRBcmdDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGQtPmFyZ0Nv
dW50OyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHBy
b3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1cmVG
bGFnczsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CisKKyAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CisgICAgdmlydHVhbCBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihN
YXJrU3RhY2smKTsKKworICAgIHN0cnVjdCBKU0JvdW5kRnVuY3Rpb25EYXRhIDogRmFzdEFsbG9j
QmFzZSB7CisgICAgICAgIEpTQm91bmRGdW5jdGlvbkRhdGEoSlNWYWx1ZSB0YXJnZXRGdW5jdGlv
biwgSlNWYWx1ZSBib3VuZFRoaXMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCisgICAgICAgICAgICA6
IHRhcmdldEZ1bmN0aW9uKHRhcmdldEZ1bmN0aW9uKQorICAgICAgICAgICAgLCBib3VuZFRoaXMo
Ym91bmRUaGlzKQorICAgICAgICAgICAgLCBhcmdzKDApCisgICAgICAgICAgICAsIGFyZ0NvdW50
KGFyZ3Muc2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJnQ291bnQpIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLT5hcmdzID0gbmV3IEpTVmFsdWVbYXJnQ291bnRdOworICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy0+YXJnc1tpXSA9IGFyZ3MuYXQoaSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB+SlNCb3VuZEZ1bmN0aW9uRGF0YSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlbGV0ZSBbXSBhcmdzOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSB0YXJn
ZXRGdW5jdGlvbjsKKyAgICAgICAgSlNWYWx1ZSBib3VuZFRoaXM7CisgICAgICAgIEpTVmFsdWUq
IGFyZ3M7CisgICAgICAgIHNpemVfdCBhcmdDb3VudDsKKyAgICB9OworCisgICAgT3duUHRyPEpT
Qm91bmRGdW5jdGlvbkRhdGE+IGQ7Cit9OworCitKU0JvdW5kRnVuY3Rpb24qIGFzQm91bmRGdW5j
dGlvbihKU1ZhbHVlKTsKKworaW5saW5lIEpTQm91bmRGdW5jdGlvbiogYXNCb3VuZEZ1bmN0aW9u
KEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMo
JkpTQm91bmRGdW5jdGlvbjo6aW5mbykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0JvdW5k
RnVuY3Rpb24qPihhc09iamVjdCh2YWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTQm91bmRGdW5jdGlvbl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCmluZGV4IDg2NjkwYmQuLmY1OWNmMTggMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAiR2xvYmFsRXZhbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC0yMTksNiArMjIwLDcgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90b3R5cGUpCiAKICAgICBkKCktPmZ1bmN0aW9u
U3RydWN0dXJlID0gSlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpOwogICAgIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tG
dW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQo
KS0+Ym91bmRGdW5jdGlvblN0cnVjdHVyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0
dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwogICAgIGQoKS0+YXJndW1lbnRzU3RydWN0dXJl
ID0gQXJndW1lbnRzOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwogICAg
IGQoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxi
YWNrT2JqZWN0U3RydWN0dXJlID0gSlNDYWxsYmFja09iamVjdDxKU09iamVjdD46OmNyZWF0ZVN0
cnVjdHVyZShkKCktPm9iamVjdFByb3RvdHlwZSk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKaW5kZXggZGY5NDJjZi4uNTdlYjZlYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMTM2LDYgKzEzNiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAg
ICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gYXJyYXlTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlPiBib29sZWFuT2JqZWN0U3RydWN0dXJlOworICAgICAgICAgICAgUmVmUHRy
PFN0cnVjdHVyZT4gYm91bmRGdW5jdGlvblN0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxT
dHJ1Y3R1cmU+IGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlPiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgICAgICAgICAgUmVm
UHRyPFN0cnVjdHVyZT4gY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmU7CkBAIC0yMjEsNiArMjIyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogYXJndW1lbnRzU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gZCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAg
ICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+YXJyYXlT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9
CisgICAgICAgIFN0cnVjdHVyZSogYm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIGQoKS0+Ym91bmRGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1
cmUqIGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmNh
bGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBj
YWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5jYWxsYmFja0Z1
bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tPYmpl
Y3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJl
LmdldCgpOyB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Q
cm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdl
dE93blByb3BlcnR5TmFtZXMtZXhwZWN0ZWQudHh0CmluZGV4IDQ5ODc4ZjIuLjRiZGM0NWMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3Bl
cnR5TmFtZXMtZXhwZWN0ZWQudHh0CkBAIC00Myw3ICs0Myw3IEBAIFBBU1MgZ2V0U29ydGVkT3du
UHJvcGVydHlOYW1lcyhlbmNvZGVVUklDb21wb25lbnQpIGlzIFsnbGVuZ3RoJywgJ25hbWUnXQog
UEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdCkgaXMgWydjcmVhdGUnLCAnZGVm
aW5lUHJvcGVydGllcycsICdkZWZpbmVQcm9wZXJ0eScsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsICdnZXRQcm90b3R5cGVPZicsICdrZXlzJywgJ2xl
bmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFt
ZXMoT2JqZWN0LnByb3RvdHlwZSkgaXMgWydfX2RlZmluZUdldHRlcl9fJywgJ19fZGVmaW5lU2V0
dGVyX18nLCAnX19sb29rdXBHZXR0ZXJfXycsICdfX2xvb2t1cFNldHRlcl9fJywgJ2NvbnN0cnVj
dG9yJywgJ2hhc093blByb3BlcnR5JywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1l
cmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAndmFsdWVPZiddCiBQQVNTIGdl
dFNvcnRlZE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24pIGlzIFsnbGVuZ3RoJywgJ25hbWUnLCAn
cHJvdG90eXBlJ10KLVBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhGdW5jdGlvbi5wcm90
b3R5cGUpIGlzIFsnYXBwbHknLCAnY2FsbCcsICdjb25zdHJ1Y3RvcicsICdsZW5ndGgnLCAnbmFt
ZScsICd0b1N0cmluZyddCitQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24u
cHJvdG90eXBlKSBpcyBbJ2FwcGx5JywgJ2JpbmQnLCAnY2FsbCcsICdjb25zdHJ1Y3RvcicsICds
ZW5ndGgnLCAnbmFtZScsICd0b1N0cmluZyddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFt
ZXMoQXJyYXkpIGlzIFsnaXNBcnJheScsICdsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUnXQog
UEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEFycmF5LnByb3RvdHlwZSkgaXMgWydjb25j
YXQnLCAnY29uc3RydWN0b3InLCAnZXZlcnknLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnaW5kZXhP
ZicsICdqb2luJywgJ2xhc3RJbmRleE9mJywgJ2xlbmd0aCcsICdtYXAnLCAncG9wJywgJ3B1c2gn
LCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc2xpY2UnLCAn
c29tZScsICdzb3J0JywgJ3NwbGljZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICd1
bnNoaWZ0J10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhTdHJpbmcpIGlzIFsnZnJv
bUNoYXJDb2RlJywgJ2xlbmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
anMvZnVuY3Rpb24tYmluZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRjZWFiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9u
LWJpbmQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvT2JqZWN0LWdldE93blBy
b3BlcnR5TmFtZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9PYmplY3Qt
Z2V0T3duUHJvcGVydHlOYW1lcy5qcwppbmRleCA0NzdmMDI0Li5iMDY1OTRlIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9PYmplY3QtZ2V0T3duUHJvcGVydHlO
YW1lcy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9PYmplY3QtZ2V0
T3duUHJvcGVydHlOYW1lcy5qcwpAQCAtNTEsNyArNTEsNyBAQCB2YXIgZXhwZWN0ZWRQcm9wZXJ0
eU5hbWVzU2V0ID0gewogICAgICJPYmplY3QiOiAiWydjcmVhdGUnLCAnZGVmaW5lUHJvcGVydGll
cycsICdkZWZpbmVQcm9wZXJ0eScsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3du
UHJvcGVydHlOYW1lcycsICdnZXRQcm90b3R5cGVPZicsICdrZXlzJywgJ2xlbmd0aCcsICduYW1l
JywgJ3Byb3RvdHlwZSddIiwKICAgICAiT2JqZWN0LnByb3RvdHlwZSI6ICJbJ19fZGVmaW5lR2V0
dGVyX18nLCAnX19kZWZpbmVTZXR0ZXJfXycsICdfX2xvb2t1cEdldHRlcl9fJywgJ19fbG9va3Vw
U2V0dGVyX18nLCAnY29uc3RydWN0b3InLCAnaGFzT3duUHJvcGVydHknLCAnaXNQcm90b3R5cGVP
ZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycs
ICd2YWx1ZU9mJ10iLAogICAgICJGdW5jdGlvbiI6ICJbJ2xlbmd0aCcsICduYW1lJywgJ3Byb3Rv
dHlwZSddIiwKLSAgICAiRnVuY3Rpb24ucHJvdG90eXBlIjogIlsnYXBwbHknLCAnY2FsbCcsICdj
b25zdHJ1Y3RvcicsICdsZW5ndGgnLCAnbmFtZScsICd0b1N0cmluZyddIiwKKyAgICAiRnVuY3Rp
b24ucHJvdG90eXBlIjogIlsnYXBwbHknLCAnYmluZCcsICdjYWxsJywgJ2NvbnN0cnVjdG9yJywg
J2xlbmd0aCcsICduYW1lJywgJ3RvU3RyaW5nJ10iLAogICAgICJBcnJheSI6ICJbJ2lzQXJyYXkn
LCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10iLAogICAgICJBcnJheS5wcm90b3R5cGUi
OiAiWydjb25jYXQnLCAnY29uc3RydWN0b3InLCAnZXZlcnknLCAnZmlsdGVyJywgJ2ZvckVhY2gn
LCAnaW5kZXhPZicsICdqb2luJywgJ2xhc3RJbmRleE9mJywgJ2xlbmd0aCcsICdtYXAnLCAncG9w
JywgJ3B1c2gnLCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ3JldmVyc2UnLCAnc2hpZnQnLCAn
c2xpY2UnLCAnc29tZScsICdzb3J0JywgJ3NwbGljZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0
cmluZycsICd1bnNoaWZ0J10iLAogICAgICJTdHJpbmciOiAiWydmcm9tQ2hhckNvZGUnLCAnbGVu
Z3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10iLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMv
c2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmQxOGJlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMv
c2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMKQEAgLTAsMCArMSw1MCBAQAorZGVzY3JpcHRp
b24oIlRlc3QgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3VyIG9mIEZ1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kIik7CisKKworLy8gU2ltcGxlIHVzZSB0byBiaW5kICd0aGlzJworbmFtZSA9ICJnbG9i
YWwiOwordmFyIG9iaiA9IHsgbmFtZTogImxvY2FsIiB9OworCitzaG91bGRCZSgib2JqLm5hbWUi
LCAiJ2xvY2FsJyIpOworCit2YXIgZiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5uYW1lOyB9
CitvYmouZiA9IGY7CisKK3Nob3VsZEJlKCJmKCkiLCAiJ2dsb2JhbCciKTsKK3Nob3VsZEJlKCJv
YmouZigpIiwgIidsb2NhbCciKTsKKwordmFyIGcgPSBvYmouZjsKK3Nob3VsZEJlKCJnKCkiLCAi
J2dsb2JhbCciKTsKKwordmFyIGggPSBmLmJpbmQob2JqKTsKK3Nob3VsZEJlKCJoKCkiLCAiJ2xv
Y2FsJyIpOworCisKKy8vIFNpbXBsZSB1c2UgdG8gY3VycnkgdGhlIHBhcmFtZXRlcnMKK3ZhciBh
ZGRlciA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBhICsgYiArIGMgKyBkOyB9Owor
dmFyIGFkZFR3b1R3byA9IGFkZGVyLmJpbmQobnVsbCwgMiwgMik7CisKK3Nob3VsZEJlKCJhZGRU
d29Ud28oMywgNCkiLCAiMTEiKTsKKworCisvLyBDb25zdHJ1Y3RvcgordmFyIFJlY3RhbmdsZSA9
IGZ1bmN0aW9uKGNvbG9yLCBzaXplKSB7IHRoaXMuY29sb3IgPSBjb2xvcjsgdGhpcy5zaXplID0g
c2l6ZTsgfTsKK3ZhciBCbHVlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlLmJpbmQobnVsbCwgImJsdWUi
KTsKKwordmFyIHJlY3QgPSBuZXcgQmx1ZVJlY3RhbmdsZSgxMCk7CisKK3Nob3VsZEJlKCJyZWN0
LmNvbG9yIiwgIidibHVlJyIpOworc2hvdWxkQmUoInJlY3Quc2l6ZSIsICIxMCIpOworc2hvdWxk
QmVUcnVlKCJyZWN0IGluc3RhbmNlb2YgUmVjdGFuZ2xlIik7CitzaG91bGRCZVRydWUoInJlY3Qg
aW5zdGFuY2VvZiBCbHVlUmVjdGFuZ2xlIik7CisKKworLy8gQmluZCBvdmVyIGJpbmQKK3ZhciBm
dW4xID0gZnVuY3Rpb24oYSwgYiwgYykgeyByZXR1cm4gYSArIGIgKyBjOyB9OwordmFyIGZ1bjIg
PSBmdW4xLmJpbmQobnVsbCwgMSk7Cit2YXIgZnVuMyA9IGZ1bjIuYmluZChudWxsLCAyKTsKKwor
c2hvdWxkQmUoImZ1bjMoMykiLCAiNiIpOworCisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Ci0tIAoxLjcuMC40LjM2MC5nMTE3NjZjCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54243</attachid>
            <date>2010-04-25 15:47:53 -0700</date>
            <delta_ts>2010-05-02 18:28:27 -0700</delta_ts>
            <desc>Native implementation of Function.prototype.bind()</desc>
            <filename>0001-Implement-ES5-Function.prototype.bind-function.patch</filename>
            <type>text/plain</type>
            <size>20707</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSBjOGYxOTI0MjI2ZGEzNWI4YjE0YjlmNzU4NDhmYjg2ZWQ3OTJmNWFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAxOCBBcHIgMjAxMCAxODo1MDo1OSAt
MDMwMApTdWJqZWN0OiBbUEFUQ0ggMS8yXSBJbXBsZW1lbnQgRVM1IEZ1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kIGZ1bmN0aW9uCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjYzODIKCi0tLQogSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tayAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpICAg
ICAgICAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJv
ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaCAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcCAgICAgICB8ICAgMTggKysrKwogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwICAgICAgICAgfCAgMTA1ICsrKysrKysrKysrKysrKysr
KysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oICAgICAgICAgICB8
ICAgNzYgKysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmggICAgICAgICAgICB8ICAgIDIgKwogLi4uL2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0
eU5hbWVzLWV4cGVjdGVkLnR4dCAgICAgfCAgICAyICstCiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1
bmN0aW9uLWJpbmQuaHRtbCAgICAgICAgICAgICB8ICAgMTMgKysrCiAuLi4vanMvc2NyaXB0LXRl
c3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLmpzICB8ICAgIDIgKy0KIExheW91dFRlc3Rz
L2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMgIHwgICA1MCArKysrKysrKysK
IDE0IGZpbGVzIGNoYW5nZWQsIDI3NSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWJp
bmQuaHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRl
c3RzL2Z1bmN0aW9uLWJpbmQuanMKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lk
Lm1rIGIvSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tawppbmRleCAxYjVkYTAyLi42NGVmYzhlIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0FuZHJvaWQubWsKQEAgLTEwMyw2ICsxMDMsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gXAogCXJ1
bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3BwIFwKIAlydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAg
XAogCXJ1bnRpbWUvSlNBcnJheS5jcHAgXAorCXJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBc
CiAJcnVudGltZS9KU0J5dGVBcnJheS5jcHAgXAogCXJ1bnRpbWUvSlNDZWxsLmNwcCBcCiAJcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGMxZDYxYTEuLjJm
Y2U5NzcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC00MzksNiArNDM5LDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggXAog
CUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3BwIFwKIAlKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmggXAorCUphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwIFwKIAlK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCmluZGV4IDFmMmI5
NjEuLmEyYTI4ZmIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5
cGkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtMjIzLDYgKzIy
Myw4IEBACiAgICAgICAgICAgICAncnVudGltZS9KU0FjdGl2YXRpb24uaCcsCiAgICAgICAgICAg
ICAncnVudGltZS9KU0FycmF5LmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0FycmF5Lmgn
LAorICAgICAgICAgICAgJ3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCcsCisgICAgICAgICAg
ICAncnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0J5
dGVBcnJheS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNCeXRlQXJyYXkuaCcsCiAgICAg
ICAgICAgICAncnVudGltZS9KU0NlbGwuY3BwJywKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnBybyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwpp
bmRleCAxY2Q5NjA5Li40M2Q0MDY3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCkBAIC0x
NDYsNiArMTQ2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9KU0J5dGVBcnJheS5jcHAg
XAogICAgIHJ1bnRpbWUvSlNDZWxsLmNwcCBcCiAgICAgcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBc
CisgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAgXAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKICAgICBydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmgKaW5kZXggZGUyNGY0YS4uNmRkMzNhNSAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMzMsNiArMzMsNyBAQAogICAgIG1h
Y3JvKF9fbG9va3VwU2V0dGVyX18pIFwKICAgICBtYWNybyhhcHBseSkgXAogICAgIG1hY3JvKGFy
Z3VtZW50cykgXAorICAgIG1hY3JvKGJpbmQpIFwKICAgICBtYWNybyhjYWxsKSBcCiAgICAgbWFj
cm8oY2FsbGVlKSBcCiAgICAgbWFjcm8oY2FsbGVyKSBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IGE3N2I1YjIuLmY3Y2UxZDEgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCkBAIC0yMyw2ICsyMyw3
IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5j
bHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCkBAIC0zNyw2ICsz
OCw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRnVuY3Rpb25Qcm90b3R5cGUpOwogc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJvdG9GdW5jQmluZChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xp
c3QmKTsKIAogRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYywgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAgOiBJbnRl
cm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm51bGxJZGVudGlmaWVyKQpAQCAtNTEsNiArNTMsNyBAQCB2b2lkIEZ1bmN0aW9u
UHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHByb3RvdAogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywg
KmFwcGx5RnVuY3Rpb24sIERvbnRFbnVtKTsKICAgICAqY2FsbEZ1bmN0aW9uID0gbmV3IChleGVj
KSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUs
IDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCBmdW5jdGlvblByb3RvRnVuY0NhbGwpOwog
ICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgKmNhbGxGdW5jdGlv
biwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhl
YywgbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgcHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5iaW5kLCBmdW5jdGlvblByb3Rv
RnVuY0JpbmQpLCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpCkBAIC05NSw2ICs5OCw5IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhCiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZKU0JvdW5kRnVu
Y3Rpb246OmluZm8pKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9uICgp
IHtcbiAgICBbYm91bmRlZCBmdW5jdGlvbl1cbn0iKTsKKwogICAgIGlmICh0aGlzVmFsdWUuaW5o
ZXJpdHMoJkludGVybmFsRnVuY3Rpb246OmluZm8pKSB7CiAgICAgICAgIEludGVybmFsRnVuY3Rp
b24qIGZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1bmN0aW9uKHRoaXNWYWx1ZSk7CiAgICAgICAgIHJl
dHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+
bmFtZShleGVjKSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59Iik7CkBAIC0xNDMsNCArMTQ5
LDE2IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUKICAgICByZXR1cm4gY2FsbChleGVjLCB0aGlz
VmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJncy5hdCgwKSwgY2FsbEFyZ3MpOwogfQogCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNCaW5kKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sK
KyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHRoaXNWYWx1
ZS5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSB8fCBhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CisKKyAgICBBcmdMaXN0IGJvdW5kQXJnczsKKyAgICBhcmdzLmdldFNsaWNlKDEs
IGJvdW5kQXJncyk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNCb3VuZEZ1bmN0aW9uKGV4ZWMs
IHRoaXNWYWx1ZSwgYXJncy5hdCgwKSwgYm91bmRBcmdzKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmNTE0NgotLS0gL2Rldi9udWxsCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDEwNSBA
QAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgorCisj
aW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0JvdW5kRnVuY3Rpb24pOwor
Citjb25zdCBDbGFzc0luZm8gSlNCb3VuZEZ1bmN0aW9uOjppbmZvID0geyAiRnVuY3Rpb24iLCAm
SW50ZXJuYWxGdW5jdGlvbjo6aW5mbywgMCwgMCB9OworCitKU0JvdW5kRnVuY3Rpb246OkpTQm91
bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGFyZ2V0RnVuY3Rpb24sIEpTVmFs
dWUgYm91bmRUaGlzLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorICAgIDogSW50ZXJuYWxGdW5jdGlv
bigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgSWRlbnRpZmllcihleGVjLCAiYm91bmRGdW5jdGlvbiIpKQor
ICAgICwgZChuZXcgSlNCb3VuZEZ1bmN0aW9uRGF0YSh0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlz
LCBhcmdzKSkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCB0YXJnZXRMZW5ndGggPSB0YXJnZXRGdW5j
dGlvbi5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhl
Yyk7CisgICAgaW50IGxlbmd0aCA9IHRhcmdldExlbmd0aCAtIGFyZ3Muc2l6ZSgpOworICAgIGlm
IChsZW5ndGggPCAwKQorICAgICAgICBsZW5ndGggPSAwOworICAgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCBsZW5ndGgpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgLy8gRklYTUU6IERlZmluZU93blByb3BlcnR5
IGZvciAiY2FsbGVyIiBhbmQgImFyZ3VtZW50cyIgdXNpbmcgVGhyb3dUeXBlRXJyb3IgYXMgZ2V0
L3NldC4KK30KKworYm9vbCBKU0JvdW5kRnVuY3Rpb246Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90bykKK3sKKyAgICBKU09iamVjdCogdGFy
Z2V0ID0gYXNPYmplY3QoZC0+dGFyZ2V0RnVuY3Rpb24pOworICAgIGlmICghdGFyZ2V0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIHJldHVybiB0YXJnZXQtPmhh
c0luc3RhbmNlKGV4ZWMsIHZhbHVlLCB0YXJnZXQtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlKSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0Qm91bmRG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sKKyAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuYyA9IGFzQm91bmRGdW5j
dGlvbihmdW5jdGlvbik7CisKKyAgICBKU09iamVjdCogdGFyZ2V0ID0gYXNPYmplY3QoYm91bmRG
dW5jLT50YXJnZXRGdW5jdGlvbigpKTsKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7
CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gdGFyZ2V0LT5nZXRDb25zdHJ1Y3RE
YXRhKGNvbnN0cnVjdERhdGEpOworICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5
cGVOb25lKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisg
ICAgSlNWYWx1ZSogYm91bmRBcmdzID0gYm91bmRGdW5jLT5ib3VuZEFyZ3MoKTsKKyAgICBzaXpl
X3QgYm91bmRBcmdDb3VudCA9IGJvdW5kRnVuYy0+Ym91bmRBcmdDb3VudCgpOworCisgICAgaWYg
KGFyZ3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIHRhcmdldCwg
Y29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgQXJnTGlzdChib3VuZEFyZ3MsIGJvdW5kQXJn
Q291bnQpKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZpbmFsQXJnczsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGJvdW5kQXJnQ291bnQ7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFw
cGVuZChib3VuZEFyZ3NbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7
IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChhcmdzLmF0KGkpKTsKKworICAgIHJldHVy
biBjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBm
aW5hbEFyZ3MpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQm91bmRGdW5jdGlvbjo6Z2V0Q29uc3Ry
dWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Qm91bmRGdW5jdGlvbjsKKyAgICByZXR1cm4g
Q29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bEJvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1
bmMgPSBhc0JvdW5kRnVuY3Rpb24oZnVuY3Rpb24pOworCisgICAgSlNPYmplY3QqIHRhcmdldCA9
IGFzT2JqZWN0KGJvdW5kRnVuYy0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0YXJnZXQtPmdldENhbGxEYXRhKGNhbGxE
YXRhKTsKKworICAgIC8vIFdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIGluIGZ1bmN0aW9uUHJvdG9G
dW5jQmluZCgpLgorICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOworCisgICAg
SlNWYWx1ZSogYm91bmRBcmdzID0gYm91bmRGdW5jLT5ib3VuZEFyZ3MoKTsKKyAgICBzaXplX3Qg
Ym91bmRBcmdDb3VudCA9IGJvdW5kRnVuYy0+Ym91bmRBcmdDb3VudCgpOworCisgICAgaWYgKGFy
Z3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY2FsbChleGVjLCB0YXJnZXQsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgYm91bmRGdW5jLT5ib3VuZFRoaXMoKSwgQXJnTGlzdChib3VuZEFyZ3MsIGJv
dW5kQXJnQ291bnQpKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZpbmFsQXJnczsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGJvdW5kQXJnQ291bnQ7IGkrKykKKyAgICAgICAgZmluYWxB
cmdzLmFwcGVuZChib3VuZEFyZ3NbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5z
aXplKCk7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChhcmdzLmF0KGkpKTsKKworICAg
IHJldHVybiBjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmMt
PmJvdW5kVGhpcygpLCBmaW5hbEFyZ3MpOworfQorCitDYWxsVHlwZSBKU0JvdW5kRnVuY3Rpb246
OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjYWxsQm91bmRGdW5jdGlvbjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0Owor
fQorCit2b2lkIEpTQm91bmRGdW5jdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0
YWNrKQoreworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKyAgICBtYXJr
U3RhY2suYXBwZW5kKGQtPnRhcmdldEZ1bmN0aW9uKTsKKyAgICBtYXJrU3RhY2suYXBwZW5kKGQt
PmJvdW5kVGhpcyk7CisgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhkLT5hcmdzLCBkLT5hcmdD
b3VudCwgTWF5Q29udGFpbk51bGxWYWx1ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM4YWY0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgSlNC
b3VuZEZ1bmN0aW9uX2gKKyNkZWZpbmUgSlNCb3VuZEZ1bmN0aW9uX2gKKworI2luY2x1ZGUgIklu
dGVybmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQm91bmRGdW5j
dGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBK
U0JvdW5kRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOworCisgICAgSlNWYWx1ZSB0YXJnZXRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGQtPnRh
cmdldEZ1bmN0aW9uOyB9CisgICAgSlNWYWx1ZSBib3VuZFRoaXMoKSBjb25zdCB7IHJldHVybiBk
LT5ib3VuZFRoaXM7IH0KKyAgICBKU1ZhbHVlKiBib3VuZEFyZ3MoKSBjb25zdCB7IHJldHVybiBk
LT5hcmdzOyB9CisgICAgc2l6ZV90IGJvdW5kQXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBkLT5h
cmdDb3VudDsgfQorCisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1
ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0hhc0luc3RhbmNlIHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0
dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGhhc0luc3RhbmNlKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG8pOworCisgICAgdmlydHVhbCBDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJik7CisKKyAgICBzdHJ1Y3QgSlNCb3VuZEZ1bmN0aW9uRGF0YSA6IEZhc3RB
bGxvY0Jhc2UgeworICAgICAgICBKU0JvdW5kRnVuY3Rpb25EYXRhKEpTVmFsdWUgdGFyZ2V0RnVu
Y3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorICAgICAgICAg
ICAgOiB0YXJnZXRGdW5jdGlvbih0YXJnZXRGdW5jdGlvbikKKyAgICAgICAgICAgICwgYm91bmRU
aGlzKGJvdW5kVGhpcykKKyAgICAgICAgICAgICwgYXJncygwKQorICAgICAgICAgICAgLCBhcmdD
b3VudChhcmdzLnNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFyZ0NvdW50KSB7
CisgICAgICAgICAgICAgICAgdGhpcy0+YXJncyA9IG5ldyBKU1ZhbHVlW2FyZ0NvdW50XTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspCisgICAgICAg
ICAgICAgICAgICAgIHRoaXMtPmFyZ3NbaV0gPSBhcmdzLmF0KGkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgfkpTQm91bmRGdW5jdGlvbkRhdGEoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBkZWxldGUgW10gYXJnczsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWUg
dGFyZ2V0RnVuY3Rpb247CisgICAgICAgIEpTVmFsdWUgYm91bmRUaGlzOworICAgICAgICBKU1Zh
bHVlKiBhcmdzOworICAgICAgICBzaXplX3QgYXJnQ291bnQ7CisgICAgfTsKKworICAgIE93blB0
cjxKU0JvdW5kRnVuY3Rpb25EYXRhPiBkOworfTsKKworSlNCb3VuZEZ1bmN0aW9uKiBhc0JvdW5k
RnVuY3Rpb24oSlNWYWx1ZSk7CisKK2lubGluZSBKU0JvdW5kRnVuY3Rpb24qIGFzQm91bmRGdW5j
dGlvbihKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVy
aXRzKCZKU0JvdW5kRnVuY3Rpb246OmluZm8pKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNC
b3VuZEZ1bmN0aW9uKj4oYXNPYmplY3QodmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU0JvdW5kRnVuY3Rpb25faApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAppbmRleCA4NjY5MGJkLi5mNTljZjE4IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUg
IkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkdsb2JhbEV2YWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpAQCAtMjE5LDYgKzIyMCw3IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG90eXBlKQogCiAgICAgZCgpLT5mdW5j
dGlvblN0cnVjdHVyZSA9IEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9u
UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUgPSBKU0NhbGxi
YWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAg
ICBkKCktPmJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZVN0
cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKICAgICBkKCktPmFyZ3VtZW50c1N0cnVj
dHVyZSA9IEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsK
ICAgICBkKCktPmNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUgPSBKU0NhbGxiYWNrQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShkKCktPm9iamVjdFByb3RvdHlwZSk7CiAgICAgZCgpLT5j
YWxsYmFja09iamVjdFN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3Q+OjpjcmVh
dGVTdHJ1Y3R1cmUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCmluZGV4IGRmOTQyY2YuLjU3ZWI2ZWMgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTEzNiw2ICsxMzYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGFyZ3VtZW50c1N0cnVjdHVyZTsKICAg
ICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGFycmF5U3RydWN0dXJlOwogICAgICAgICAgICAg
UmVmUHRyPFN0cnVjdHVyZT4gYm9vbGVhbk9iamVjdFN0cnVjdHVyZTsKKyAgICAgICAgICAgIFJl
ZlB0cjxTdHJ1Y3R1cmU+IGJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlPiBjYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwogICAgICAgICAgICAg
UmVmUHRyPFN0cnVjdHVyZT4gY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZTsKICAgICAgICAgICAg
IFJlZlB0cjxTdHJ1Y3R1cmU+IGNhbGxiYWNrT2JqZWN0U3RydWN0dXJlOwpAQCAtMjIxLDYgKzIy
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIGFyZ3VtZW50c1N0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+YXJndW1lbnRzU3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmFy
cmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZS5nZXQo
KTsgfQorICAgICAgICBTdHJ1Y3R1cmUqIGJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBkKCktPmJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3Ry
dWN0dXJlKiBjYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgp
LT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVy
ZSogY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Y2FsbGJh
Y2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNr
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5jYWxsYmFja09iamVjdFN0cnVj
dHVyZS5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9PYmplY3QtZ2V0
T3duUHJvcGVydHlOYW1lcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL09iamVj
dC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4dAppbmRleCA0OTg3OGYyLi40YmRjNDVj
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5h
bWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Q
cm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4dApAQCAtNDMsNyArNDMsNyBAQCBQQVNTIGdldFNvcnRl
ZE93blByb3BlcnR5TmFtZXMoZW5jb2RlVVJJQ29tcG9uZW50KSBpcyBbJ2xlbmd0aCcsICduYW1l
J10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhPYmplY3QpIGlzIFsnY3JlYXRlJywg
J2RlZmluZVByb3BlcnRpZXMnLCAnZGVmaW5lUHJvcGVydHknLCAnZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yJywgJ2dldE93blByb3BlcnR5TmFtZXMnLCAnZ2V0UHJvdG90eXBlT2YnLCAna2V5cycs
ICdsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUnXQogUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0
eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpIGlzIFsnX19kZWZpbmVHZXR0ZXJfXycsICdfX2RlZmlu
ZVNldHRlcl9fJywgJ19fbG9va3VwR2V0dGVyX18nLCAnX19sb29rdXBTZXR0ZXJfXycsICdjb25z
dHJ1Y3RvcicsICdoYXNPd25Qcm9wZXJ0eScsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNF
bnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXQogUEFT
UyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEZ1bmN0aW9uKSBpcyBbJ2xlbmd0aCcsICduYW1l
JywgJ3Byb3RvdHlwZSddCi1QQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24u
cHJvdG90eXBlKSBpcyBbJ2FwcGx5JywgJ2NhbGwnLCAnY29uc3RydWN0b3InLCAnbGVuZ3RoJywg
J25hbWUnLCAndG9TdHJpbmcnXQorUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEZ1bmN0
aW9uLnByb3RvdHlwZSkgaXMgWydhcHBseScsICdiaW5kJywgJ2NhbGwnLCAnY29uc3RydWN0b3In
LCAnbGVuZ3RoJywgJ25hbWUnLCAndG9TdHJpbmcnXQogUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0
eU5hbWVzKEFycmF5KSBpcyBbJ2lzQXJyYXknLCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBl
J10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhBcnJheS5wcm90b3R5cGUpIGlzIFsn
Y29uY2F0JywgJ2NvbnN0cnVjdG9yJywgJ2V2ZXJ5JywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2lu
ZGV4T2YnLCAnam9pbicsICdsYXN0SW5kZXhPZicsICdsZW5ndGgnLCAnbWFwJywgJ3BvcCcsICdw
dXNoJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NsaWNl
JywgJ3NvbWUnLCAnc29ydCcsICdzcGxpY2UnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcn
LCAndW5zaGlmdCddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoU3RyaW5nKSBpcyBb
J2Zyb21DaGFyQ29kZScsICdsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUnXQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1iaW5kLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kY2VhYmY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5j
dGlvbi1iaW5kLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL09iamVjdC1nZXRP
d25Qcm9wZXJ0eU5hbWVzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvT2Jq
ZWN0LWdldE93blByb3BlcnR5TmFtZXMuanMKaW5kZXggNDc3ZjAyNC4uYjA2NTk0ZSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvT2JqZWN0LWdldE93blByb3Bl
cnR5TmFtZXMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvT2JqZWN0
LWdldE93blByb3BlcnR5TmFtZXMuanMKQEAgLTUxLDcgKzUxLDcgQEAgdmFyIGV4cGVjdGVkUHJv
cGVydHlOYW1lc1NldCA9IHsKICAgICAiT2JqZWN0IjogIlsnY3JlYXRlJywgJ2RlZmluZVByb3Bl
cnRpZXMnLCAnZGVmaW5lUHJvcGVydHknLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dl
dE93blByb3BlcnR5TmFtZXMnLCAnZ2V0UHJvdG90eXBlT2YnLCAna2V5cycsICdsZW5ndGgnLCAn
bmFtZScsICdwcm90b3R5cGUnXSIsCiAgICAgIk9iamVjdC5wcm90b3R5cGUiOiAiWydfX2RlZmlu
ZUdldHRlcl9fJywgJ19fZGVmaW5lU2V0dGVyX18nLCAnX19sb29rdXBHZXR0ZXJfXycsICdfX2xv
b2t1cFNldHRlcl9fJywgJ2NvbnN0cnVjdG9yJywgJ2hhc093blByb3BlcnR5JywgJ2lzUHJvdG90
eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJp
bmcnLCAndmFsdWVPZiddIiwKICAgICAiRnVuY3Rpb24iOiAiWydsZW5ndGgnLCAnbmFtZScsICdw
cm90b3R5cGUnXSIsCi0gICAgIkZ1bmN0aW9uLnByb3RvdHlwZSI6ICJbJ2FwcGx5JywgJ2NhbGwn
LCAnY29uc3RydWN0b3InLCAnbGVuZ3RoJywgJ25hbWUnLCAndG9TdHJpbmcnXSIsCisgICAgIkZ1
bmN0aW9uLnByb3RvdHlwZSI6ICJbJ2FwcGx5JywgJ2JpbmQnLCAnY2FsbCcsICdjb25zdHJ1Y3Rv
cicsICdsZW5ndGgnLCAnbmFtZScsICd0b1N0cmluZyddIiwKICAgICAiQXJyYXkiOiAiWydpc0Fy
cmF5JywgJ2xlbmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddIiwKICAgICAiQXJyYXkucHJvdG90
eXBlIjogIlsnY29uY2F0JywgJ2NvbnN0cnVjdG9yJywgJ2V2ZXJ5JywgJ2ZpbHRlcicsICdmb3JF
YWNoJywgJ2luZGV4T2YnLCAnam9pbicsICdsYXN0SW5kZXhPZicsICdsZW5ndGgnLCAnbWFwJywg
J3BvcCcsICdwdXNoJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdyZXZlcnNlJywgJ3NoaWZ0
JywgJ3NsaWNlJywgJ3NvbWUnLCAnc29ydCcsICdzcGxpY2UnLCAndG9Mb2NhbGVTdHJpbmcnLCAn
dG9TdHJpbmcnLCAndW5zaGlmdCddIiwKICAgICAiU3RyaW5nIjogIlsnZnJvbUNoYXJDb2RlJywg
J2xlbmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddIiwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2pzL3NjcmlwdC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjZkMThiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2pzL3NjcmlwdC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzCkBAIC0wLDAgKzEsNTAgQEAKK2Rlc2Ny
aXB0aW9uKCJUZXN0IHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBGdW5jdGlvbi5wcm90
b3R5cGUuYmluZCIpOworCisKKy8vIFNpbXBsZSB1c2UgdG8gYmluZCAndGhpcycKK25hbWUgPSAi
Z2xvYmFsIjsKK3ZhciBvYmogPSB7IG5hbWU6ICJsb2NhbCIgfTsKKworc2hvdWxkQmUoIm9iai5u
YW1lIiwgIidsb2NhbCciKTsKKwordmFyIGYgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubmFt
ZTsgfQorb2JqLmYgPSBmOworCitzaG91bGRCZSgiZigpIiwgIidnbG9iYWwnIik7CitzaG91bGRC
ZSgib2JqLmYoKSIsICInbG9jYWwnIik7CisKK3ZhciBnID0gb2JqLmY7CitzaG91bGRCZSgiZygp
IiwgIidnbG9iYWwnIik7CisKK3ZhciBoID0gZi5iaW5kKG9iaik7CitzaG91bGRCZSgiaCgpIiwg
Iidsb2NhbCciKTsKKworCisvLyBTaW1wbGUgdXNlIHRvIGN1cnJ5IHRoZSBwYXJhbWV0ZXJzCit2
YXIgYWRkZXIgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gYSArIGIgKyBjICsgZDsg
fTsKK3ZhciBhZGRUd29Ud28gPSBhZGRlci5iaW5kKG51bGwsIDIsIDIpOworCitzaG91bGRCZSgi
YWRkVHdvVHdvKDMsIDQpIiwgIjExIik7CisKKworLy8gQ29uc3RydWN0b3IKK3ZhciBSZWN0YW5n
bGUgPSBmdW5jdGlvbihjb2xvciwgc2l6ZSkgeyB0aGlzLmNvbG9yID0gY29sb3I7IHRoaXMuc2l6
ZSA9IHNpemU7IH07Cit2YXIgQmx1ZVJlY3RhbmdsZSA9IFJlY3RhbmdsZS5iaW5kKG51bGwsICJi
bHVlIik7CisKK3ZhciByZWN0ID0gbmV3IEJsdWVSZWN0YW5nbGUoMTApOworCitzaG91bGRCZSgi
cmVjdC5jb2xvciIsICInYmx1ZSciKTsKK3Nob3VsZEJlKCJyZWN0LnNpemUiLCAiMTAiKTsKK3No
b3VsZEJlVHJ1ZSgicmVjdCBpbnN0YW5jZW9mIFJlY3RhbmdsZSIpOworc2hvdWxkQmVUcnVlKCJy
ZWN0IGluc3RhbmNlb2YgQmx1ZVJlY3RhbmdsZSIpOworCisKKy8vIEJpbmQgb3ZlciBiaW5kCit2
YXIgZnVuMSA9IGZ1bmN0aW9uKGEsIGIsIGMpIHsgcmV0dXJuIGEgKyBiICsgYzsgfTsKK3ZhciBm
dW4yID0gZnVuMS5iaW5kKG51bGwsIDEpOwordmFyIGZ1bjMgPSBmdW4yLmJpbmQobnVsbCwgMik7
CisKK3Nob3VsZEJlKCJmdW4zKDMpIiwgIjYiKTsKKworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOwotLSAKMS43LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54245</attachid>
            <date>2010-04-25 15:53:47 -0700</date>
            <delta_ts>2010-05-02 18:31:12 -0700</delta_ts>
            <desc>Optimization for bind() used just for binding &apos;this&apos; (non JIT case)</desc>
            <filename>0002-Enhance-non-JIT-performance-of-simplest-case-of-Func.patch</filename>
            <type>text/plain</type>
            <size>3825</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSBmMDQ3YzA0MjAyNDVjNmNlMzVkYWVhODY2OGY1N2I3NjVkMjQ3ZDk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAyNSBBcHIgMjAxMCAxOTozODoxOCAt
MDMwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBFbmhhbmNlIG5vbi1KSVQgcGVyZm9ybWFuY2Ugb2Yg
c2ltcGxlc3QgY2FzZSBvZiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCgpCiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKCkZvciB0aGUgc2ltcGxlc3QgY2FzZSBv
ZiBiaW5kKCkgKGJpbmRpbmcganVzdCB0aGUgJ3RoaXMnIHZhbHVlKSwgaW4gdGhlCkludGVycHJl
dGVyIChub24tSklUIGNhc2UpLCB3ZSB1c2UgdGhlIHRyaWNrIG9mIHJld3JpdGluZyB0aGUgQ2Fs
bEZyYW1lCmFuZCBzdGFydGluZyB0aGUgb3BfY29kZSBhZ2Fpbi4KClRoaXMgZ2l2ZXMgYSBodWdl
IHNwZWVkIHVwIChpbiBub24tSklUKSBmb3IgdGhpcyBjYXNlIGluIHJlbGF0aW9uIHRvCkphdmFT
Y3JpcHQgaW1wbGVtZW50YXRpb25zIG9mIGJpbmQoKS4KLS0tCiBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAgfCAgICA4ICsrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhbGxEYXRhLmggICAgICAgICAgfCAgICA1ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgfCAgICA0ICsrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDBmNjQ1OC4uODgzNDgzYSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIkdsb2JhbEV2YWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0J5dGVBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U05vdEFuT2JqZWN0LmgiCkBAIC0zMzc3LDYgKzMzNzgsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxm
OgogICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOwogCisgICAgY2FsbF9zdGFydDoKICAg
ICAgICAgSlNWYWx1ZSB2ID0gY2FsbEZyYW1lLT5yKGZ1bmMpLmpzVmFsdWUoKTsKIAogICAgICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTM0MDYsNiArMzQwOCwxMiBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSG9z
dCkgeworICAgICAgICAgICAgaWYgKGNhbGxEYXRhLm5hdGl2ZS5ib3VuZEZ1bmN0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgSlNCb3VuZEZ1bmN0aW9uICpib3VuZEZ1bmMgPSBhc0JvdW5kRnVuY3Rp
b24odi5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZ1bmMpID0gYm91
bmRGdW5jLT50YXJnZXRGdW5jdGlvbigpOworICAgICAgICAgICAgICAgIGNhbGxGcmFtZS0+cihy
ZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplKSA9IGJvdW5kRnVuYy0+Ym91bmRUaGlzKCk7CisgICAgICAgICAgICAgICAgZ290byBjYWxs
X3N0YXJ0OworICAgICAgICAgICAgfQogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKICAgICAgICAgICAgIENhbGxGcmFtZSog
bmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSAr
IHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMg
KyA1LCBzY29wZUNoYWluLCBjYWxsRnJhbWUsIGRzdCwgYXJnQ291bnQsIDApOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oIGIvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWxsRGF0YS5oCmluZGV4IDI0YzE5ZjkuLjQ2NGMxNmQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhbGxEYXRhLmgKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5kZWYgQ2FsbERhdGFfaAogI2RlZmlu
ZSBDYWxsRGF0YV9oCiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwogI2luY2x1ZGUgIk5hdGl2ZUZ1
bmN0aW9uV3JhcHBlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM5LDYgKzQxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKICAg
ICBjbGFzcyBTY29wZUNoYWluTm9kZTsKKyAgICBjbGFzcyBKU0JvdW5kRnVuY3Rpb247CiAKICAg
ICBlbnVtIENhbGxUeXBlIHsKICAgICAgICAgQ2FsbFR5cGVOb25lLApAQCAtNTEsMTEgKzU0LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHVuaW9uIENhbGxEYXRhIHsKICAgICAgICAgc3RydWN0
IHsKICAgICAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uOworICAgICAgICAgICAgYm9v
bCBib3VuZEZ1bmN0aW9uOwogICAgICAgICB9IG5hdGl2ZTsKICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlOwogICAgICAg
ICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW47CiAgICAgICAgIH0ganM7CisgICAgICAg
IENhbGxEYXRhKCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKENhbGxEYXRhKSk7IH0KICAgICB9
OwogCiAgICAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3Qs
IENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKaW5kZXgg
NGJmNTE0Ni4uYzRkZDc3OSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcApAQCAtOTEsNiArOTEsMTAgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGkKIENhbGxU
eXBlIEpTQm91bmRGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQogewog
ICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxCb3VuZEZ1bmN0aW9uOworICAgIGlm
ICghZC0+YXJnQ291bnQpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgb3B0aW1pemF0
aW9uIGluIEludGVycHJldGVyL0pJVC4KKyAgICAgICAgY2FsbERhdGEubmF0aXZlLmJvdW5kRnVu
Y3Rpb24gPSB0cnVlOworICAgIH0KICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi0tIAox
LjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54896</attachid>
            <date>2010-05-02 18:28:27 -0700</date>
            <delta_ts>2010-05-05 15:09:56 -0700</delta_ts>
            <desc>Native implementation of Function.prototype.bind(), v4</desc>
            <filename>0001-Implement-ES5-Function.prototype.bind-function.patch</filename>
            <type>text/plain</type>
            <size>20579</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSA5MTFjZjhmMzE1ZDc5M2E2MWE0ZjVjY2RkNmI5MWM3ZDk5YjIzMjZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAxOCBBcHIgMjAxMCAxODo1MDo1OSAt
MDMwMApTdWJqZWN0OiBbUEFUQ0ggMS8zXSBJbXBsZW1lbnQgRVM1IEZ1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kIGZ1bmN0aW9uCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjYzODIKCi0tLQogSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tayAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpICAg
ICAgICAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJv
ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaCAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcCAgICAgICB8ICAgMTggKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgICAgICAgICB8ICAxMDkgKysrKysrKysrKysrKysrKysr
KysKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggICAgICAgICAgIHwg
ICA3MyArKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcCAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oICAgICAgICAgICAgfCAgICAyICsKIC4uLi9qcy9PYmplY3QtZ2V0T3duUHJvcGVydHlO
YW1lcy1leHBlY3RlZC50eHQgICAgIHwgICAgMiArLQogTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5j
dGlvbi1iaW5kLmh0bWwgICAgICAgICAgICAgfCAgIDEzICsrKwogLi4uL2pzL3NjcmlwdC10ZXN0
cy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy5qcyAgfCAgICAyICstCiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3NjcmlwdC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzICB8ICAgNTAgKysrKysrKysrCiAx
NCBmaWxlcyBjaGFuZ2VkLCAyNzYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlv
bi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1iaW5k
Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0
cy9mdW5jdGlvbi1iaW5kLmpzCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5t
ayBiL0phdmFTY3JpcHRDb3JlL0FuZHJvaWQubWsKaW5kZXggMWI1ZGEwMi4uNjRlZmM4ZSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5taworKysgYi9KYXZhU2NyaXB0Q29yZS9B
bmRyb2lkLm1rCkBAIC0xMDMsNiArMTAzLDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9IFwKIAlydW50
aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcCBcCiAJcnVudGltZS9KU0FjdGl2YXRpb24uY3BwIFwK
IAlydW50aW1lL0pTQXJyYXkuY3BwIFwKKwlydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAog
CXJ1bnRpbWUvSlNCeXRlQXJyYXkuY3BwIFwKIAlydW50aW1lL0pTQ2VsbC5jcHAgXAogCXJ1bnRp
bWUvSlNGdW5jdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUuYW0gYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBlNDM5Zjc5Li5iNmZh
NzUyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNDQ3LDYgKzQ0Nyw4IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIFwKIAlK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcCBcCiAJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcCBcCiAJSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQppbmRleCA0ODFhOGQ0
Li4yZDIwMmRiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKQEAgLTIyNCw2ICsyMjQs
OCBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgnLAogICAgICAgICAgICAg
J3J1bnRpbWUvSlNBcnJheS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNBcnJheS5oJywK
KyAgICAgICAgICAgICdydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAnLAorICAgICAgICAgICAg
J3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNCeXRl
QXJyYXkuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL0pTQnl0ZUFycmF5LmgnLAogICAgICAg
ICAgICAgJ3J1bnRpbWUvSlNDZWxsLmNwcCcsCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5wcm8gYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KaW5k
ZXggZmMyNDJjZi4uMDYzZjFkMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUucHJvCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwpAQCAtMTUw
LDYgKzE1MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNCeXRlQXJyYXkuY3BwIFwK
ICAgICBydW50aW1lL0pTQ2VsbC5jcHAgXAogICAgIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAgXAor
ICAgIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oCmluZGV4IGRlMjRmNGEuLjZkZDMzYTUgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTMzLDYgKzMzLDcgQEAKICAgICBtYWNy
byhfX2xvb2t1cFNldHRlcl9fKSBcCiAgICAgbWFjcm8oYXBwbHkpIFwKICAgICBtYWNybyhhcmd1
bWVudHMpIFwKKyAgICBtYWNybyhiaW5kKSBcCiAgICAgbWFjcm8oY2FsbCkgXAogICAgIG1hY3Jv
KGNhbGxlZSkgXAogICAgIG1hY3JvKGNhbGxlcikgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcAppbmRleCBhNzdiNWIyLi5mN2NlMWQxIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcApAQCAtMjMsNiArMjMsNyBA
QAogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1
ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTU3RyaW5nQnVpbGRlci5oIgpAQCAtMzcsNiArMzgs
NyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEZ1bmN0aW9uUHJvdG90eXBlKTsKIHN0YXRp
YyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
b3RvRnVuY0JpbmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSW50ZXJu
YWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5udWxsSWRlbnRpZmllcikKQEAgLTUxLDYgKzUzLDcgQEAgdm9pZCBGdW5jdGlvblBy
b3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBwcm90b3QKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICph
cHBseUZ1bmN0aW9uLCBEb250RW51bSk7CiAgICAgKmNhbGxGdW5jdGlvbiA9IG5ldyAoZXhlYykg
TmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAx
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsKICAg
ICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVuY3Rpb24s
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMs
IG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgZnVuY3Rpb25Qcm90b0Z1
bmNCaW5kKSwgRG9udEVudW0pOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQpAQCAtOTUsNiArOTgsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYQogICAg
ICAgICB9CiAgICAgfQogCisgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cygmSlNCb3VuZEZ1bmN0
aW9uOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAoKSB7
XG4gICAgW2JvdW5kZWQgZnVuY3Rpb25dXG59Iik7CisKICAgICBpZiAodGhpc1ZhbHVlLmluaGVy
aXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9u
KiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbih0aGlzVmFsdWUpOwogICAgICAgICByZXR1
cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24tPm5h
bWUoZXhlYyksICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwpAQCAtMTQzLDQgKzE0OSwx
NiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlCiAgICAgcmV0dXJuIGNhbGwoZXhlYywgdGhpc1Zh
bHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFyZ3MuYXQoMCksIGNhbGxBcmdzKTsKIH0KIAorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQmluZChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7Cisg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0aGlzVmFsdWUu
Z2V0Q2FsbERhdGEoY2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUg
fHwgYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOworCisgICAgQXJnTGlzdCBib3VuZEFyZ3M7CisgICAgYXJncy5nZXRTbGljZSgxLCBi
b3VuZEFyZ3MpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQm91bmRGdW5jdGlvbihleGVjLCB0
aGlzVmFsdWUsIGFyZ3MuYXQoMCksIGJvdW5kQXJncyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
IGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YWQ4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSwxMDkgQEAK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKKworI2lu
Y2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNCb3VuZEZ1bmN0aW9uKTsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTQm91bmRGdW5jdGlvbjo6aW5mbyA9IHsgIkZ1bmN0aW9uIiwgJklu
dGVybmFsRnVuY3Rpb246OmluZm8sIDAsIDAgfTsKKworSlNCb3VuZEZ1bmN0aW9uOjpKU0JvdW5k
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVl
IGJvdW5kVGhpcywgY29uc3QgQXJnTGlzdCYgYXJncykKKyAgICA6IEludGVybmFsRnVuY3Rpb24o
JmV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ib3VuZEZ1
bmN0aW9uU3RydWN0dXJlKCksIElkZW50aWZpZXIoZXhlYywgImJvdW5kRnVuY3Rpb24iKSkKKyAg
ICAsIG1fdGFyZ2V0RnVuY3Rpb24odGFyZ2V0RnVuY3Rpb24pCisgICAgLCBtX2JvdW5kVGhpcyhi
b3VuZFRoaXMpCisgICAgLCBkKGFyZ3Muc2l6ZSgpID8gbmV3IEJvdW5kQXJnc0RhdGEoYXJncykg
OiAwKQoreworICAgIGNvbnN0IHVuc2lnbmVkIHRhcmdldExlbmd0aCA9IHRhcmdldEZ1bmN0aW9u
LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
KyAgICBpbnQgbGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gYXJncy5zaXplKCk7CisgICAgaWYgKGxl
bmd0aCA8IDApCisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIGxlbmd0aCksIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKKworICAgIC8vIEZJWE1FOiBEZWZpbmVPd25Qcm9wZXJ0eSBm
b3IgImNhbGxlciIgYW5kICJhcmd1bWVudHMiIHVzaW5nIFRocm93VHlwZUVycm9yIGFzIGdldC9z
ZXQuCit9CisKK2Jvb2wgSlNCb3VuZEZ1bmN0aW9uOjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG8pCit7CisgICAgSlNPYmplY3QqIHRhcmdl
dCA9IGFzT2JqZWN0KG1fdGFyZ2V0RnVuY3Rpb24pOworICAgIGlmICghdGFyZ2V0LT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIHJldHVybiB0YXJnZXQtPmhhc0lu
c3RhbmNlKGV4ZWMsIHZhbHVlLCB0YXJnZXQtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvdG90eXBlKSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0Qm91bmRGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuYyA9IGFzQm91bmRGdW5jdGlv
bihmdW5jdGlvbik7CisKKyAgICBKU09iamVjdCogdGFyZ2V0ID0gYXNPYmplY3QoYm91bmRGdW5j
LT50YXJnZXRGdW5jdGlvbigpKTsKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Cisg
ICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gdGFyZ2V0LT5nZXRDb25zdHJ1Y3REYXRh
KGNvbnN0cnVjdERhdGEpOworICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVO
b25lKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAg
SlNWYWx1ZSogYm91bmRBcmdzID0gYm91bmRGdW5jLT5ib3VuZEFyZ3MoKTsKKyAgICBzaXplX3Qg
Ym91bmRBcmdDb3VudCA9IGJvdW5kRnVuYy0+Ym91bmRBcmdDb3VudCgpOworCisgICAgaWYgKGFy
Z3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIHRhcmdldCwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgQXJnTGlzdChib3VuZEFyZ3MsIGJvdW5kQXJnQ291
bnQpKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZpbmFsQXJnczsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGJvdW5kQXJnQ291bnQ7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVu
ZChib3VuZEFyZ3NbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkr
KykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChhcmdzLmF0KGkpKTsKKworICAgIHJldHVybiBj
b25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBmaW5h
bEFyZ3MpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQm91bmRGdW5jdGlvbjo6Z2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Qm91bmRGdW5jdGlvbjsKKyAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUhvc3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJv
dW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmMg
PSBhc0JvdW5kRnVuY3Rpb24oZnVuY3Rpb24pOworCisgICAgSlNPYmplY3QqIHRhcmdldCA9IGFz
T2JqZWN0KGJvdW5kRnVuYy0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgQ2FsbERhdGEgY2FsbERh
dGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0YXJnZXQtPmdldENhbGxEYXRhKGNhbGxEYXRh
KTsKKworICAgIC8vIFdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIGluIGZ1bmN0aW9uUHJvdG9GdW5j
QmluZCgpLgorICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOworCisgICAgSlNW
YWx1ZSogYm91bmRBcmdzID0gYm91bmRGdW5jLT5ib3VuZEFyZ3MoKTsKKyAgICBzaXplX3QgYm91
bmRBcmdDb3VudCA9IGJvdW5kRnVuYy0+Ym91bmRBcmdDb3VudCgpOworCisgICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gY2FsbChleGVjLCB0YXJnZXQsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgYm91bmRGdW5jLT5ib3VuZFRoaXMoKSwgQXJnTGlzdChib3VuZEFyZ3MsIGJvdW5k
QXJnQ291bnQpKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZpbmFsQXJnczsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGJvdW5kQXJnQ291bnQ7IGkrKykKKyAgICAgICAgZmluYWxBcmdz
LmFwcGVuZChib3VuZEFyZ3NbaV0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXpl
KCk7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChhcmdzLmF0KGkpKTsKKworICAgIHJl
dHVybiBjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmMtPmJv
dW5kVGhpcygpLCBmaW5hbEFyZ3MpOworfQorCitDYWxsVHlwZSBKU0JvdW5kRnVuY3Rpb246Omdl
dENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBjYWxsQm91bmRGdW5jdGlvbjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQor
Cit2b2lkIEpTQm91bmRGdW5jdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNr
KQoreworICAgIEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKyAgICBtYXJrU3Rh
Y2suYXBwZW5kKG1fdGFyZ2V0RnVuY3Rpb24pOworICAgIG1hcmtTdGFjay5hcHBlbmQobV9ib3Vu
ZFRoaXMpOworICAgIGlmIChkKQorICAgICAgICBtYXJrU3RhY2suYXBwZW5kVmFsdWVzKGQtPmFy
Z3MsIGQtPmFyZ0NvdW50LCBNYXlDb250YWluTnVsbFZhbHVlcyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzYTliMAotLS0gL2Rldi9udWxsCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKQEAgLTAsMCArMSw3MyBAQAor
I2lmbmRlZiBKU0JvdW5kRnVuY3Rpb25faAorI2RlZmluZSBKU0JvdW5kRnVuY3Rpb25faAorCisj
aW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNl
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SlNCb3VuZEZ1bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0JvdW5kRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworCisgICAgSlNWYWx1ZSB0
YXJnZXRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0RnVuY3Rpb247IH0KKyAgICBK
U1ZhbHVlIGJvdW5kVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRUaGlzOyB9CisgICAgSlNW
YWx1ZSogYm91bmRBcmdzKCkgY29uc3QgeyByZXR1cm4gZCA/IGQtPmFyZ3MgOiAwOyB9CisgICAg
c2l6ZV90IGJvdW5kQXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBkID8gZC0+YXJnQ291bnQgOiAw
OyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3Rv
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBJbnRlcm5hbEZ1bmN0aW9uOjpTdHJ1Y3R1cmVGbGFn
czsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CisKKyAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CisgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRD
YWxsRGF0YShDYWxsRGF0YSYpOworCisgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJr
U3RhY2smKTsKKworICAgIHN0cnVjdCBCb3VuZEFyZ3NEYXRhIDogRmFzdEFsbG9jQmFzZSB7Cisg
ICAgICAgIEJvdW5kQXJnc0RhdGEoY29uc3QgQXJnTGlzdCYgYXJncykKKyAgICAgICAgICAgIDog
YXJncyhuZXcgSlNWYWx1ZVthcmdzLnNpemUoKV0pCisgICAgICAgICAgICAsIGFyZ0NvdW50KGFy
Z3Muc2l6ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy
Z0NvdW50OyBpKyspCisgICAgICAgICAgICAgICAgdGhpcy0+YXJnc1tpXSA9IGFyZ3MuYXQoaSk7
CisgICAgICAgIH0KKworICAgICAgICB+Qm91bmRBcmdzRGF0YSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlbGV0ZSBbXSBhcmdzOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSogYXJn
czsKKyAgICAgICAgc2l6ZV90IGFyZ0NvdW50OworICAgIH07CisKKyAgICBKU1ZhbHVlIG1fdGFy
Z2V0RnVuY3Rpb247CisgICAgSlNWYWx1ZSBtX2JvdW5kVGhpczsKKyAgICBPd25QdHI8Qm91bmRB
cmdzRGF0YT4gZDsKK307CisKK0pTQm91bmRGdW5jdGlvbiogYXNCb3VuZEZ1bmN0aW9uKEpTVmFs
dWUpOworCitpbmxpbmUgSlNCb3VuZEZ1bmN0aW9uKiBhc0JvdW5kRnVuY3Rpb24oSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQoYXNPYmplY3QodmFsdWUpLT5pbmhlcml0cygmSlNCb3VuZEZ1
bmN0aW9uOjppbmZvKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQm91bmRGdW5jdGlvbio+
KGFzT2JqZWN0KHZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
SlNCb3VuZEZ1bmN0aW9uX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKaW5kZXggNzU2OGZmZC4uNjU3YzE3YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJHbG9i
YWxFdmFsRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKQEAgLTIxNyw2ICsyMTgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
OjpyZXNldChKU1ZhbHVlIHByb3RvdHlwZSkKIAogICAgIGQoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUg
PSBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAg
ICAgZCgpLT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlID0gSlNDYWxsYmFja0Z1bmN0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAgZCgpLT5ib3VuZEZ1
bmN0aW9uU3RydWN0dXJlID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5m
dW5jdGlvblByb3RvdHlwZSk7CiAgICAgZCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUgPSBBcmd1bWVu
dHM6OmNyZWF0ZVN0cnVjdHVyZShkKCktPm9iamVjdFByb3RvdHlwZSk7CiAgICAgZCgpLT5jYWxs
YmFja0NvbnN0cnVjdG9yU3RydWN0dXJlID0gSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwogICAgIGQoKS0+Y2FsbGJhY2tPYmplY3RT
dHJ1Y3R1cmUgPSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGQo
KS0+b2JqZWN0UHJvdG90eXBlKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCBkZjk0MmNmLi41N2ViNmVjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCkBAIC0xMzYsNiArMTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBSZWZQdHI8U3RydWN0dXJlPiBhcmd1bWVudHNTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlPiBhcnJheVN0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1
cmU+IGJvb2xlYW5PYmplY3RTdHJ1Y3R1cmU7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJl
PiBib3VuZEZ1bmN0aW9uU3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4g
Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1
cmU+IGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQdHI8U3RydWN0
dXJlPiBjYWxsYmFja09iamVjdFN0cnVjdHVyZTsKQEAgLTIyMSw2ICsyMjIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBkKCktPmFyZ3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5hcnJheVN0cnVjdHVyZS5n
ZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBkKCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAg
U3RydWN0dXJlKiBib3VuZEZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5i
b3VuZEZ1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJh
Y2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Y2FsbGJhY2tDb25z
dHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrRnVu
Y3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmNhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja09iamVjdFN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFt
ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9PYmplY3QtZ2V0T3duUHJvcGVy
dHlOYW1lcy1leHBlY3RlZC50eHQKaW5kZXggNDk4NzhmMi4uNGJkYzQ1YyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9qcy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy1l
eHBlY3RlZC50eHQKQEAgLTQzLDcgKzQzLDcgQEAgUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5h
bWVzKGVuY29kZVVSSUNvbXBvbmVudCkgaXMgWydsZW5ndGgnLCAnbmFtZSddCiBQQVNTIGdldFNv
cnRlZE93blByb3BlcnR5TmFtZXMoT2JqZWN0KSBpcyBbJ2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0
aWVzJywgJ2RlZmluZVByb3BlcnR5JywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRP
d25Qcm9wZXJ0eU5hbWVzJywgJ2dldFByb3RvdHlwZU9mJywgJ2tleXMnLCAnbGVuZ3RoJywgJ25h
bWUnLCAncHJvdG90eXBlJ10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhPYmplY3Qu
cHJvdG90eXBlKSBpcyBbJ19fZGVmaW5lR2V0dGVyX18nLCAnX19kZWZpbmVTZXR0ZXJfXycsICdf
X2xvb2t1cEdldHRlcl9fJywgJ19fbG9va3VwU2V0dGVyX18nLCAnY29uc3RydWN0b3InLCAnaGFz
T3duUHJvcGVydHknLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0
b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICd2YWx1ZU9mJ10KIFBBU1MgZ2V0U29ydGVkT3du
UHJvcGVydHlOYW1lcyhGdW5jdGlvbikgaXMgWydsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUn
XQotUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEZ1bmN0aW9uLnByb3RvdHlwZSkgaXMg
WydhcHBseScsICdjYWxsJywgJ2NvbnN0cnVjdG9yJywgJ2xlbmd0aCcsICduYW1lJywgJ3RvU3Ry
aW5nJ10KK1BBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhGdW5jdGlvbi5wcm90b3R5cGUp
IGlzIFsnYXBwbHknLCAnYmluZCcsICdjYWxsJywgJ2NvbnN0cnVjdG9yJywgJ2xlbmd0aCcsICdu
YW1lJywgJ3RvU3RyaW5nJ10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhBcnJheSkg
aXMgWydpc0FycmF5JywgJ2xlbmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddCiBQQVNTIGdldFNv
cnRlZE93blByb3BlcnR5TmFtZXMoQXJyYXkucHJvdG90eXBlKSBpcyBbJ2NvbmNhdCcsICdjb25z
dHJ1Y3RvcicsICdldmVyeScsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdpbmRleE9mJywgJ2pvaW4n
LCAnbGFzdEluZGV4T2YnLCAnbGVuZ3RoJywgJ21hcCcsICdwb3AnLCAncHVzaCcsICdyZWR1Y2Un
LCAncmVkdWNlUmlnaHQnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzbGljZScsICdzb21lJywgJ3Nv
cnQnLCAnc3BsaWNlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ3Vuc2hpZnQnXQog
UEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKFN0cmluZykgaXMgWydmcm9tQ2hhckNvZGUn
LCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvanMvZnVuY3Rpb24tYmluZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlv
bi1iaW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlYWJmOQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC5odG1s
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvZnVuY3Rpb24tYmluZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1l
cy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL09iamVjdC1nZXRPd25Qcm9w
ZXJ0eU5hbWVzLmpzCmluZGV4IDQ3N2YwMjQuLmIwNjU5NGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLmpzCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0
eU5hbWVzLmpzCkBAIC01MSw3ICs1MSw3IEBAIHZhciBleHBlY3RlZFByb3BlcnR5TmFtZXNTZXQg
PSB7CiAgICAgIk9iamVjdCI6ICJbJ2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2RlZmlu
ZVByb3BlcnR5JywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0eU5h
bWVzJywgJ2dldFByb3RvdHlwZU9mJywgJ2tleXMnLCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90
eXBlJ10iLAogICAgICJPYmplY3QucHJvdG90eXBlIjogIlsnX19kZWZpbmVHZXR0ZXJfXycsICdf
X2RlZmluZVNldHRlcl9fJywgJ19fbG9va3VwR2V0dGVyX18nLCAnX19sb29rdXBTZXR0ZXJfXycs
ICdjb25zdHJ1Y3RvcicsICdoYXNPd25Qcm9wZXJ0eScsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3Bl
cnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ3ZhbHVlT2Yn
XSIsCiAgICAgIkZ1bmN0aW9uIjogIlsnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10iLAot
ICAgICJGdW5jdGlvbi5wcm90b3R5cGUiOiAiWydhcHBseScsICdjYWxsJywgJ2NvbnN0cnVjdG9y
JywgJ2xlbmd0aCcsICduYW1lJywgJ3RvU3RyaW5nJ10iLAorICAgICJGdW5jdGlvbi5wcm90b3R5
cGUiOiAiWydhcHBseScsICdiaW5kJywgJ2NhbGwnLCAnY29uc3RydWN0b3InLCAnbGVuZ3RoJywg
J25hbWUnLCAndG9TdHJpbmcnXSIsCiAgICAgIkFycmF5IjogIlsnaXNBcnJheScsICdsZW5ndGgn
LCAnbmFtZScsICdwcm90b3R5cGUnXSIsCiAgICAgIkFycmF5LnByb3RvdHlwZSI6ICJbJ2NvbmNh
dCcsICdjb25zdHJ1Y3RvcicsICdldmVyeScsICdmaWx0ZXInLCAnZm9yRWFjaCcsICdpbmRleE9m
JywgJ2pvaW4nLCAnbGFzdEluZGV4T2YnLCAnbGVuZ3RoJywgJ21hcCcsICdwb3AnLCAncHVzaCcs
ICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzbGljZScsICdz
b21lJywgJ3NvcnQnLCAnc3BsaWNlJywgJ3RvTG9jYWxlU3RyaW5nJywgJ3RvU3RyaW5nJywgJ3Vu
c2hpZnQnXSIsCiAgICAgIlN0cmluZyI6ICJbJ2Zyb21DaGFyQ29kZScsICdsZW5ndGgnLCAnbmFt
ZScsICdwcm90b3R5cGUnXSIsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Njcmlw
dC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVz
dHMvZnVuY3Rpb24tYmluZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZDE4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVz
dHMvZnVuY3Rpb24tYmluZC5qcwpAQCAtMCwwICsxLDUwIEBACitkZXNjcmlwdGlvbigiVGVzdCB0
byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIgb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQiKTsK
KworCisvLyBTaW1wbGUgdXNlIHRvIGJpbmQgJ3RoaXMnCituYW1lID0gImdsb2JhbCI7Cit2YXIg
b2JqID0geyBuYW1lOiAibG9jYWwiIH07CisKK3Nob3VsZEJlKCJvYmoubmFtZSIsICInbG9jYWwn
Iik7CisKK3ZhciBmID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm5hbWU7IH0KK29iai5mID0g
ZjsKKworc2hvdWxkQmUoImYoKSIsICInZ2xvYmFsJyIpOworc2hvdWxkQmUoIm9iai5mKCkiLCAi
J2xvY2FsJyIpOworCit2YXIgZyA9IG9iai5mOworc2hvdWxkQmUoImcoKSIsICInZ2xvYmFsJyIp
OworCit2YXIgaCA9IGYuYmluZChvYmopOworc2hvdWxkQmUoImgoKSIsICInbG9jYWwnIik7CisK
KworLy8gU2ltcGxlIHVzZSB0byBjdXJyeSB0aGUgcGFyYW1ldGVycwordmFyIGFkZGVyID0gZnVu
Y3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGEgKyBiICsgYyArIGQ7IH07Cit2YXIgYWRkVHdv
VHdvID0gYWRkZXIuYmluZChudWxsLCAyLCAyKTsKKworc2hvdWxkQmUoImFkZFR3b1R3bygzLCA0
KSIsICIxMSIpOworCisKKy8vIENvbnN0cnVjdG9yCit2YXIgUmVjdGFuZ2xlID0gZnVuY3Rpb24o
Y29sb3IsIHNpemUpIHsgdGhpcy5jb2xvciA9IGNvbG9yOyB0aGlzLnNpemUgPSBzaXplOyB9Owor
dmFyIEJsdWVSZWN0YW5nbGUgPSBSZWN0YW5nbGUuYmluZChudWxsLCAiYmx1ZSIpOworCit2YXIg
cmVjdCA9IG5ldyBCbHVlUmVjdGFuZ2xlKDEwKTsKKworc2hvdWxkQmUoInJlY3QuY29sb3IiLCAi
J2JsdWUnIik7CitzaG91bGRCZSgicmVjdC5zaXplIiwgIjEwIik7CitzaG91bGRCZVRydWUoInJl
Y3QgaW5zdGFuY2VvZiBSZWN0YW5nbGUiKTsKK3Nob3VsZEJlVHJ1ZSgicmVjdCBpbnN0YW5jZW9m
IEJsdWVSZWN0YW5nbGUiKTsKKworCisvLyBCaW5kIG92ZXIgYmluZAordmFyIGZ1bjEgPSBmdW5j
dGlvbihhLCBiLCBjKSB7IHJldHVybiBhICsgYiArIGM7IH07Cit2YXIgZnVuMiA9IGZ1bjEuYmlu
ZChudWxsLCAxKTsKK3ZhciBmdW4zID0gZnVuMi5iaW5kKG51bGwsIDIpOworCitzaG91bGRCZSgi
ZnVuMygzKSIsICI2Iik7CisKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLS0gCjEuNy4x
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54897</attachid>
            <date>2010-05-02 18:31:12 -0700</date>
            <delta_ts>2010-05-02 19:24:38 -0700</delta_ts>
            <desc>Optimization for bind() used just for binding &apos;this&apos; (non JIT case)</desc>
            <filename>0002-Enhance-non-JIT-performance-of-simplest-case-of-Func.patch</filename>
            <type>text/plain</type>
            <size>3823</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSAxYzhkMWUwNGJlZWM0NWM2ODU3NTU2YmM1YTFlZTYxMzdlZDFmMDdiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAyNSBBcHIgMjAxMCAxOTozODoxOCAt
MDMwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBFbmhhbmNlIG5vbi1KSVQgcGVyZm9ybWFuY2Ugb2Yg
c2ltcGxlc3QgY2FzZSBvZiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCgpCiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKCkZvciB0aGUgc2ltcGxlc3QgY2FzZSBv
ZiBiaW5kKCkgKGJpbmRpbmcganVzdCB0aGUgJ3RoaXMnIHZhbHVlKSwgaW4gdGhlCkludGVycHJl
dGVyIChub24tSklUIGNhc2UpLCB3ZSB1c2UgdGhlIHRyaWNrIG9mIHJld3JpdGluZyB0aGUgQ2Fs
bEZyYW1lCmFuZCBzdGFydGluZyB0aGUgb3BfY29kZSBhZ2Fpbi4KClRoaXMgZ2l2ZXMgYSBodWdl
IHNwZWVkIHVwIChpbiBub24tSklUKSBmb3IgdGhpcyBjYXNlIGluIHJlbGF0aW9uIHRvCkphdmFT
Y3JpcHQgaW1wbGVtZW50YXRpb25zIG9mIGJpbmQoKS4KLS0tCiBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAgfCAgICA4ICsrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhbGxEYXRhLmggICAgICAgICAgfCAgICA1ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgfCAgICA0ICsrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDBmNjQ1OC4uODcyMGI2YSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIkdsb2JhbEV2YWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0J5dGVBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U05vdEFuT2JqZWN0LmgiCkBAIC0zMzc3LDYgKzMzNzgsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxm
OgogICAgICAgICBpbnQgYXJnQ291bnQgPSB2UENbM10udS5vcGVyYW5kOwogICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSB2UENbNF0udS5vcGVyYW5kOwogCisgICAgY2FsbFN0YXJ0OgogICAg
ICAgICBKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIoZnVuYykuanNWYWx1ZSgpOwogCiAgICAgICAg
IENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMzQwNiw2ICszNDA4LDEyIEBAIHNraXBfaWRfY3VzdG9t
X3NlbGY6CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0
KSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbERhdGEubmF0aXZlLmJvdW5kRnVuY3Rp
b24pKSB7CisgICAgICAgICAgICAgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmMgPSBhc0Jv
dW5kRnVuY3Rpb24odi5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZ1
bmMpID0gYm91bmRGdW5jLT50YXJnZXRGdW5jdGlvbigpOworICAgICAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihyZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplKSA9IGJvdW5kRnVuYy0+Ym91bmRUaGlzKCk7CisgICAgICAgICAgICAgICAg
Z290byBjYWxsU3RhcnQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAgICAgQ2Fs
bEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lz
dGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0
KDAsIHZQQyArIDUsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwgMCk7CmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKaW5kZXggMjRjMTlmOS4uNDY0YzE2ZCAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBDYWxsRGF0YV9o
CiAjZGVmaW5lIENhbGxEYXRhX2gKIAorI2luY2x1ZGUgPHN0cmluZy5oPgorCiAjaW5jbHVkZSAi
TmF0aXZlRnVuY3Rpb25XcmFwcGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzksNiArNDEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1Zh
bHVlOwogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTQm91bmRGdW5jdGlv
bjsKIAogICAgIGVudW0gQ2FsbFR5cGUgewogICAgICAgICBDYWxsVHlwZU5vbmUsCkBAIC01MSwx
MSArNTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdW5pb24gQ2FsbERhdGEgewogICAgICAg
ICBzdHJ1Y3QgewogICAgICAgICAgICAgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb247CisgICAgICAg
ICAgICBib29sIGJvdW5kRnVuY3Rpb247CiAgICAgICAgIH0gbmF0aXZlOwogICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGU7
CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbjsKICAgICAgICAgfSBqczsK
KyAgICAgICAgQ2FsbERhdGEoKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoQ2FsbERhdGEpKTsg
fQogICAgIH07CiAKICAgICBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cAppbmRleCAzNWFkODlmLi43MDEyMzg5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwCkBAIC05NCw2ICs5NCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0
aQogQ2FsbFR5cGUgSlNCb3VuZEZ1bmN0aW9uOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERh
dGEpCiB7CiAgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbEJvdW5kRnVuY3Rpb247
CisgICAgaWYgKCFkKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIG9wdGltaXphdGlv
biBpbiBJbnRlcnByZXRlci9KSVQuCisgICAgICAgIGNhbGxEYXRhLm5hdGl2ZS5ib3VuZEZ1bmN0
aW9uID0gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAotLSAKMS43
LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54898</attachid>
            <date>2010-05-02 18:33:05 -0700</date>
            <delta_ts>2010-05-05 15:32:43 -0700</delta_ts>
            <desc>Optimization for bind() used just for binding &apos;this&apos; (JIT case)</desc>
            <filename>0003-Enhance-JIT-performance-of-simplest-case-of-Function.patch</filename>
            <type>text/plain</type>
            <size>4824</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSAzNTk5MmFlMjIxNjNkODhjMjFjMjNjMTY2MGI2YzU3OThiOTE4MGJmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAyIE1heSAyMDEwIDE4OjA4OjE2IC0w
MzAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIEVuaGFuY2UgSklUIHBlcmZvcm1hbmNlIG9mIHNpbXBs
ZXN0IGNhc2Ugb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQoKQogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzgyCgpTaW1pbGFyIGFwcHJvYWNoIHRvIG5vbi1KSVQg
Y2FzZSwgcmV3cml0ZSB0aGUgJ3RoaXMnIHZhbHVlLCBzZXQgJ2NhbGxlZScKYW5kIGp1bXAgYmFj
ayB0byB0aGUgc3RhcnQgb2YgdGhlIGNhbGwuCi0tLQogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAgICAgICB8ICAgIDEgKwogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oICAgICAgICB8ICAgIDEg
KwogSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwICB8ICAgMTYgKysrKysrKysrKysrKysr
KwogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCB8ICAgIDkgKysrKysrKysrCiA0IGZp
bGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAppbmRleCBhNTkyM2Y1Li5lZjRhNGYyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNzYsNiArNzYsNyBA
QCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2Nr
KQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSA6IDApCisgICAgLCBtX2NhbGxTdGFydHMoY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBp
bGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPm51bWJlck9mU3RydWN0dXJlU3R1Yklu
Zm9zKCkgOiAwKQogICAgICwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpIDogMCkKICAgICAsIG1f
Ynl0ZWNvZGVJbmRleCgodW5zaWduZWQpLTEpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZGJkMzExYi4uNWU2ZmI0
MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaApAQCAtODY1LDYgKzg2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogICAgICAgICBWZWN0b3I8TGFiZWw+IG1f
bGFiZWxzOworICAgICAgICBWZWN0b3I8TGFiZWw+IG1fY2FsbFN0YXJ0czsKICAgICAgICAgVmVj
dG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8+IG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxNZXRob2RD
YWxsQ29tcGlsYXRpb25JbmZvPiBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm87CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAKaW5kZXggZGE2MDNiZC4uYzQxMWZiMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0Jv
dW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCkBAIC0zMTQsNiArMzE1LDkgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgdW5zaWduZWQgY2EKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1Qw
KTsKIAorICAgIC8vIEVudHJ5IHBvaW50IGZvciByZXN0YXJ0aW5nIGEgY2FsbCwgdXNlZCBpbiBi
b3VuZCBmdW5jdGlvbiBvcHRpbWl6YXRpb24uCisgICAgbV9jYWxsU3RhcnRzW21fYnl0ZWNvZGVJ
bmRleF0gPSBsYWJlbCgpOworCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0
aW9uQ2hlY2s7CiAKICAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlT3BD
YWxsKTsKQEAgLTQxOCw4ICs0MjIsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5PjoKICAgICAv
LyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5jdGlvbnMKICAgICBjYWxsTGlua0ZhaWxOb3RPYmplY3Qu
bGluayh0aGlzKTsKICAgICBjYWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9uLmxpbmsodGhpcyk7CisK
ICAgICBKSVRTdHViQ2FsbCh0aGlzLCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBjdGlfb3Bf
Y29uc3RydWN0X05vdEpTQ29uc3RydWN0IDogY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbikuY2Fs
bCgpOwogCisgICAgSnVtcCBkb05vdFJlc3RhcnRDYWxsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisKKyAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGtub3cgdGhhdCBjYWxsZWUgaG9sZHMgYSBKU1ZhbHVlIHRoYXQgd3JhcHMgYSBKU0Jv
dW5kRnVuY3Rpb24uCisgICAgZW1pdExvYWRQYXlsb2FkKGNhbGxlZSwgcmVnVDIpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEpTQm91bmRGdW5jdGlvbiwgbV90
YXJnZXRGdW5jdGlvbikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlZ1QxKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihKU0Jv
dW5kRnVuY3Rpb24sIG1fdGFyZ2V0RnVuY3Rpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworCisgICAgLy8gUmVzdGFydCB0aGUgY2FsbC4K
KyAgICBqdW1wKCkubGlua1RvKG1fY2FsbFN0YXJ0c1ttX2J5dGVjb2RlSW5kZXhdLCB0aGlzKTsK
KworICAgIGRvTm90UmVzdGFydENhbGwubGluayh0aGlzKTsKICAgICBlbWl0U3RvcmUoZHN0LCBy
ZWdUMSwgcmVnVDApOzsKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogfQpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKaW5kZXggZWJkMjZiYi4uNTFhNjRiMiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQm91bmRG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKQEAgLTE4ODcsNiArMTg4OCwxNCBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfY2FsbF9Ob3RKU0Z1bmN0aW9u
KQogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKICAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCk7CiAgICAgICAgIGludCBhcmdD
b3VudCA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOworCisgICAgICAgIC8vIEJvdW5kIGZ1
bmN0aW9uIG9wdGltaXphdGlvbjogY2hhbmdlICd0aGlzJyBhbmQgcmVzdGFydCBjYWxsLgorICAg
ICAgICBpZiAoVU5MSUtFTFkoY2FsbERhdGEubmF0aXZlLmJvdW5kRnVuY3Rpb24pKSB7CisgICAg
ICAgICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuYyA9IGFzQm91bmRGdW5jdGlvbihhc09i
amVjdChmdW5jVmFsKSk7CisgICAgICAgICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+cihyZWdp
c3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
KSA9IGJvdW5kRnVuYy0+Ym91bmRUaGlzKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIH0KKwogICAgICAgICBDYWxsRnJhbWUqIHByZXZp
b3VzQ2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUocHJldmlvdXNDYWxsRnJhbWUtPnJlZ2lzdGVy
cygpICsgcmVnaXN0ZXJPZmZzZXQpOwogCi0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54900</attachid>
            <date>2010-05-02 19:24:38 -0700</date>
            <delta_ts>2010-06-11 12:55:48 -0700</delta_ts>
            <desc>Optimization for bind() used just for binding &apos;this&apos; (non JIT case)</desc>
            <filename>0002-Enhance-non-JIT-performance-of-simplest-case-of-Func.patch</filename>
            <type>text/plain</type>
            <size>3772</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSAzMjZhZGQ3NDVkNTkyZTBjMzQzN2JmMjlmNDU1MjBjMjAzNTAzMDllIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAyNSBBcHIgMjAxMCAxOTozODoxOCAt
MDMwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBFbmhhbmNlIG5vbi1KSVQgcGVyZm9ybWFuY2Ugb2Yg
c2ltcGxlc3QgY2FzZSBvZiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCgpCiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKCkZvciB0aGUgc2ltcGxlc3QgY2FzZSBv
ZiBiaW5kKCkgKGJpbmRpbmcganVzdCB0aGUgJ3RoaXMnIHZhbHVlKSwgaW4gdGhlCkludGVycHJl
dGVyIChub24tSklUIGNhc2UpLCB3ZSB1c2UgdGhlIHRyaWNrIG9mIHJld3JpdGluZyB0aGUgQ2Fs
bEZyYW1lCmFuZCBzdGFydGluZyB0aGUgb3BfY29kZSBhZ2Fpbi4KClRoaXMgZ2l2ZXMgYSBodWdl
IHNwZWVkIHVwIChpbiBub24tSklUKSBmb3IgdGhpcyBjYXNlIGluIHJlbGF0aW9uIHRvCkphdmFT
Y3JpcHQgaW1wbGVtZW50YXRpb25zIG9mIGJpbmQoKS4KLS0tCiBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAgfCAgICA4ICsrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhbGxEYXRhLmggICAgICAgICAgfCAgICA1ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgfCAgICA0ICsrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDBmNjQ1OC4uYWRjNjA1NiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIkdsb2JhbEV2YWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0J5dGVBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U05vdEFuT2JqZWN0LmgiCkBAIC0zMzc5LDYgKzMzODAsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxm
OgogCiAgICAgICAgIEpTVmFsdWUgdiA9IGNhbGxGcmFtZS0+cihmdW5jKS5qc1ZhbHVlKCk7CiAK
KyAgICBjYWxsU3RhcnQ6CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IHYuZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogCkBAIC0zNDA2LDYgKzM0
MDgsMTIgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShjYWxs
RGF0YS5uYXRpdmUuYm91bmRGdW5jdGlvbikpIHsKKyAgICAgICAgICAgICAgICBKU0JvdW5kRnVu
Y3Rpb24qIGJvdW5kRnVuYyA9IGFzQm91bmRGdW5jdGlvbih2LmFzQ2VsbCgpKTsKKyAgICAgICAg
ICAgICAgICB2ID0gYm91bmRGdW5jLT50YXJnZXRGdW5jdGlvbigpOworICAgICAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihyZWdpc3Rlck9mZnNldCAtIGFyZ0NvdW50IC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplKSA9IGJvdW5kRnVuYy0+Ym91bmRUaGlzKCk7CisgICAgICAgICAg
ICAgICAgZ290byBjYWxsU3RhcnQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUt
PnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICAgICAgbmV3Q2FsbEZyYW1l
LT5pbml0KDAsIHZQQyArIDUsIHNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgZHN0LCBhcmdDb3VudCwg
MCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKaW5kZXggMjRjMTlmOS4uNDY0YzE2ZCAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBDYWxs
RGF0YV9oCiAjZGVmaW5lIENhbGxEYXRhX2gKIAorI2luY2x1ZGUgPHN0cmluZy5oPgorCiAjaW5j
bHVkZSAiTmF0aXZlRnVuY3Rpb25XcmFwcGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzks
NiArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFz
cyBKU1ZhbHVlOwogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2RlOworICAgIGNsYXNzIEpTQm91bmRG
dW5jdGlvbjsKIAogICAgIGVudW0gQ2FsbFR5cGUgewogICAgICAgICBDYWxsVHlwZU5vbmUsCkBA
IC01MSwxMSArNTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdW5pb24gQ2FsbERhdGEgewog
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb247Cisg
ICAgICAgICAgICBib29sIGJvdW5kRnVuY3Rpb247CiAgICAgICAgIH0gbmF0aXZlOwogICAgICAg
ICBzdHJ1Y3QgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGU7CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbjsKICAgICAgICAg
fSBqczsKKyAgICAgICAgQ2FsbERhdGEoKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoQ2FsbERh
dGEpKTsgfQogICAgIH07CiAKICAgICBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBm
dW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAppbmRleCAzNWFkODlmLi43MDEyMzg5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uY3BwCkBAIC05NCw2ICs5NCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGZ1bmN0aQogQ2FsbFR5cGUgSlNCb3VuZEZ1bmN0aW9uOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYg
Y2FsbERhdGEpCiB7CiAgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbEJvdW5kRnVu
Y3Rpb247CisgICAgaWYgKCFkKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIG9wdGlt
aXphdGlvbiBpbiBJbnRlcnByZXRlci9KSVQuCisgICAgICAgIGNhbGxEYXRhLm5hdGl2ZS5ib3Vu
ZEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAot
LSAKMS43LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55158</attachid>
            <date>2010-05-05 15:09:56 -0700</date>
            <delta_ts>2010-05-12 08:37:45 -0700</delta_ts>
            <desc>Native implementation of Function.prototype.bind(), v5</desc>
            <filename>0001-Implement-ES5-Function.prototype.bind-function.patch</filename>
            <type>text/plain</type>
            <size>22371</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSBjZGJiNDk0OGU5MDFmMGUwMGIxMDMxOTlkNjYwYTRjMTU1MGQxZDMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAxOCBBcHIgMjAxMCAxODo1MDo1OSAt
MDMwMApTdWJqZWN0OiBbUEFUQ0ggMS80XSBJbXBsZW1lbnQgRVM1IEZ1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kIGZ1bmN0aW9uCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjYzODIKCi0tLQogSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tayAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpICAg
ICAgICAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJv
ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaCAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcCAgICAgICB8ICAgMTggKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgICAgICAgICB8ICAxMDkgKysrKysrKysrKysrKysrKysr
KysKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggICAgICAgICAgIHwg
ICA3MyArKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcCAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oICAgICAgICAgICAgfCAgICAyICsKIC4uLi9qcy9PYmplY3QtZ2V0T3duUHJvcGVydHlO
YW1lcy1leHBlY3RlZC50eHQgICAgIHwgICAgMiArLQogTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5j
dGlvbi1iaW5kLWV4cGVjdGVkLnR4dCAgICAgfCAgIDI2ICsrKysrCiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbCAgICAgICAgICAgICB8ICAgMTMgKysrCiAuLi4vanMvc2Ny
aXB0LXRlc3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLmpzICB8ICAgIDIgKy0KIExheW91
dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMgIHwgICA3OSArKysr
KysrKysrKysrKwogMTUgZmlsZXMgY2hhbmdlZCwgMzMxIGluc2VydGlvbnMoKyksIDIgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvanMv
ZnVuY3Rpb24tYmluZC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9mYXN0L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRl
c3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMKCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rIGIvSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tawppbmRl
eCAxYjVkYTAyLi42NGVmYzhlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1r
CisrKyBiL0phdmFTY3JpcHRDb3JlL0FuZHJvaWQubWsKQEAgLTEwMyw2ICsxMDMsNyBAQCBMT0NB
TF9TUkNfRklMRVMgOj0gXAogCXJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3BwIFwKIAlydW50
aW1lL0pTQWN0aXZhdGlvbi5jcHAgXAogCXJ1bnRpbWUvSlNBcnJheS5jcHAgXAorCXJ1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcCBcCiAJcnVudGltZS9KU0J5dGVBcnJheS5jcHAgXAogCXJ1bnRp
bWUvSlNDZWxsLmNwcCBcCiAJcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IGQzY2E3NmMuLmE3N2UxNTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC00NDYs
NiArNDQ2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdy
YXBwZXIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgg
XAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBcCisJSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIFwKIAlK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXBpCmluZGV4IDBlOTc3NGIuLmQ0NjRjMmIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZ3lwaQpAQCAtMjI0LDYgKzIyNCw4IEBACiAgICAgICAgICAgICAncnVudGltZS9KU0FjdGl2
YXRpb24uaCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0FycmF5LmNwcCcsCiAgICAgICAgICAg
ICAncnVudGltZS9KU0FycmF5LmgnLAorICAgICAgICAgICAgJ3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcCcsCisgICAgICAgICAgICAncnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaCcsCiAgICAg
ICAgICAgICAncnVudGltZS9KU0J5dGVBcnJheS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUv
SlNCeXRlQXJyYXkuaCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0NlbGwuY3BwJywKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybyBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnBybwppbmRleCBmYzI0MmNmLi4wNjNmMWQyIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUucHJvCkBAIC0xNTAsNiArMTUwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVu
dGltZS9KU0J5dGVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvSlNDZWxsLmNwcCBcCiAgICAgcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcCBcCisgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwK
ICAgICBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgXAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBcCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggZGUyNGY0YS4uNmRk
MzNhNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAt
MzMsNiArMzMsNyBAQAogICAgIG1hY3JvKF9fbG9va3VwU2V0dGVyX18pIFwKICAgICBtYWNybyhh
cHBseSkgXAogICAgIG1hY3JvKGFyZ3VtZW50cykgXAorICAgIG1hY3JvKGJpbmQpIFwKICAgICBt
YWNybyhjYWxsKSBcCiAgICAgbWFjcm8oY2FsbGVlKSBcCiAgICAgbWFjcm8oY2FsbGVyKSBcCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IGE3N2I1
YjIuLmY3Y2UxZDEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdC
dWlsZGVyLmgiCkBAIC0zNyw2ICszOCw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRnVu
Y3Rpb25Qcm90b3R5cGUpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
b3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQmluZChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAogRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9u
UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBz
dHJ1Y3R1cmUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bGxJZGVudGlmaWVyKQpAQCAtNTEsNiAr
NTMsNyBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHByb3RvdAogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24oZXhlYywgKmFwcGx5RnVuY3Rpb24sIERvbnRFbnVtKTsKICAgICAqY2Fs
bEZ1bmN0aW9uID0gbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIoZXhlYywgcHJvdG90
eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCBmdW5j
dGlvblByb3RvRnVuY0NhbGwpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYywgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBOYXRpdmVGdW5jdGlvbldyYXBwZXIo
ZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5iaW5kLCBmdW5jdGlvblByb3RvRnVuY0JpbmQpLCBEb250RW51bSk7CiB9CiAKIHN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCkBAIC05NSw2ICs5OCw5IEBAIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBKU1ZhCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAodGhpc1ZhbHVl
LmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rpb246OmluZm8pKQorICAgICAgICByZXR1cm4ganNTdHJp
bmcoZXhlYywgImZ1bmN0aW9uICgpIHtcbiAgICBbYm91bmRlZCBmdW5jdGlvbl1cbn0iKTsKKwog
ICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb246OmluZm8pKSB7CiAg
ICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1bmN0aW9uKHRo
aXNWYWx1ZSk7CiAgICAgICAgIHJldHVybiBqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJm
dW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZShleGVjKSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVd
XG59Iik7CkBAIC0xNDMsNCArMTQ5LDE2IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUKICAgICBy
ZXR1cm4gY2FsbChleGVjLCB0aGlzVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJncy5hdCgw
KSwgY2FsbEFyZ3MpOwogfQogCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1
bmNCaW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IHRoaXNWYWx1ZS5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlTm9uZSB8fCBhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisKKyAgICBBcmdMaXN0IGJvdW5kQXJnczsK
KyAgICBhcmdzLmdldFNsaWNlKDEsIGJvdW5kQXJncyk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNCb3VuZEZ1bmN0aW9uKGV4ZWMsIHRoaXNWYWx1ZSwgYXJncy5hdCgwKSwgYm91bmRBcmdzKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhZDg5Zgot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcApAQCAtMCwwICsxLDEwOSBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
Qm91bmRGdW5jdGlvbi5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VM
TChKU0JvdW5kRnVuY3Rpb24pOworCitjb25zdCBDbGFzc0luZm8gSlNCb3VuZEZ1bmN0aW9uOjpp
bmZvID0geyAiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbywgMCwgMCB9OworCitK
U0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
ICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgSWRlbnRpZmllcihleGVj
LCAiYm91bmRGdW5jdGlvbiIpKQorICAgICwgbV90YXJnZXRGdW5jdGlvbih0YXJnZXRGdW5jdGlv
bikKKyAgICAsIG1fYm91bmRUaGlzKGJvdW5kVGhpcykKKyAgICAsIGQoYXJncy5zaXplKCkgPyBu
ZXcgQm91bmRBcmdzRGF0YShhcmdzKSA6IDApCit7CisgICAgY29uc3QgdW5zaWduZWQgdGFyZ2V0
TGVuZ3RoID0gdGFyZ2V0RnVuY3Rpb24uZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgIGludCBsZW5ndGggPSB0YXJnZXRMZW5ndGggLSBh
cmdzLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywg
bGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworCisgICAgLy8gRklY
TUU6IERlZmluZU93blByb3BlcnR5IGZvciAiY2FsbGVyIiBhbmQgImFyZ3VtZW50cyIgdXNpbmcg
VGhyb3dUeXBlRXJyb3IgYXMgZ2V0L3NldC4KK30KKworYm9vbCBKU0JvdW5kRnVuY3Rpb246Omhh
c0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90bykK
K3sKKyAgICBKU09iamVjdCogdGFyZ2V0ID0gYXNPYmplY3QobV90YXJnZXRGdW5jdGlvbik7Cisg
ICAgaWYgKCF0YXJnZXQtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisg
ICAgcmV0dXJuIHRhcmdldC0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUsIHRhcmdldC0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKTsKK30KKworc3RhdGljIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1
bmN0aW9uLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTQm91bmRGdW5jdGlvbiogYm91
bmRGdW5jID0gYXNCb3VuZEZ1bmN0aW9uKGZ1bmN0aW9uKTsKKworICAgIEpTT2JqZWN0KiB0YXJn
ZXQgPSBhc09iamVjdChib3VuZEZ1bmMtPnRhcmdldEZ1bmN0aW9uKCkpOworICAgIENvbnN0cnVj
dERhdGEgY29uc3RydWN0RGF0YTsKKyAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSB0
YXJnZXQtPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0RGF0YSk7CisgICAgaWYgKGNvbnN0cnVj
dFR5cGUgPT0gQ29uc3RydWN0VHlwZU5vbmUpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CisKKyAgICBKU1ZhbHVlKiBib3VuZEFyZ3MgPSBib3VuZEZ1bmMtPmJv
dW5kQXJncygpOworICAgIHNpemVfdCBib3VuZEFyZ0NvdW50ID0gYm91bmRGdW5jLT5ib3VuZEFy
Z0NvdW50KCk7CisKKyAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjb25z
dHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBBcmdMaXN0
KGJvdW5kQXJncywgYm91bmRBcmdDb3VudCkpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
ZmluYWxBcmdzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRBcmdDb3VudDsgaSsrKQor
ICAgICAgICBmaW5hbEFyZ3MuYXBwZW5kKGJvdW5kQXJnc1tpXSk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKQorICAgICAgICBmaW5hbEFyZ3MuYXBwZW5kKGFyZ3Mu
YXQoaSkpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5
cGUsIGNvbnN0cnVjdERhdGEsIGZpbmFsQXJncyk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNCb3Vu
ZEZ1bmN0aW9uOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEp
Cit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RCb3VuZEZ1
bmN0aW9uOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBmdW5jdGlvbiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0Jv
dW5kRnVuY3Rpb24qIGJvdW5kRnVuYyA9IGFzQm91bmRGdW5jdGlvbihmdW5jdGlvbik7CisKKyAg
ICBKU09iamVjdCogdGFyZ2V0ID0gYXNPYmplY3QoYm91bmRGdW5jLT50YXJnZXRGdW5jdGlvbigp
KTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHRhcmdl
dC0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOworCisgICAgLy8gV2UgYWxyZWFkeSBjaGVja2VkIHRo
aXMgaW4gZnVuY3Rpb25Qcm90b0Z1bmNCaW5kKCkuCisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENh
bGxUeXBlTm9uZSk7CisKKyAgICBKU1ZhbHVlKiBib3VuZEFyZ3MgPSBib3VuZEZ1bmMtPmJvdW5k
QXJncygpOworICAgIHNpemVfdCBib3VuZEFyZ0NvdW50ID0gYm91bmRGdW5jLT5ib3VuZEFyZ0Nv
dW50KCk7CisKKyAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjYWxsKGV4
ZWMsIHRhcmdldCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmMtPmJvdW5kVGhpcygpLCBB
cmdMaXN0KGJvdW5kQXJncywgYm91bmRBcmdDb3VudCkpOworCisgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgZmluYWxBcmdzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRBcmdDb3VudDsg
aSsrKQorICAgICAgICBmaW5hbEFyZ3MuYXBwZW5kKGJvdW5kQXJnc1tpXSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKQorICAgICAgICBmaW5hbEFyZ3MuYXBwZW5k
KGFyZ3MuYXQoaSkpOworCisgICAgcmV0dXJuIGNhbGwoZXhlYywgdGFyZ2V0LCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGJvdW5kRnVuYy0+Ym91bmRUaGlzKCksIGZpbmFsQXJncyk7Cit9CisKK0NhbGxU
eXBlIEpTQm91bmRGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2FsbERhdGEmIGNhbGxEYXRhKQorewor
ICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxCb3VuZEZ1bmN0aW9uOworICAgIHJl
dHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK3ZvaWQgSlNCb3VuZEZ1bmN0aW9uOjptYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit7CisgICAgSlNPYmplY3Q6Om1hcmtDaGlsZHJlbiht
YXJrU3RhY2spOworICAgIG1hcmtTdGFjay5hcHBlbmQobV90YXJnZXRGdW5jdGlvbik7CisgICAg
bWFya1N0YWNrLmFwcGVuZChtX2JvdW5kVGhpcyk7CisgICAgaWYgKGQpCisgICAgICAgIG1hcmtT
dGFjay5hcHBlbmRWYWx1ZXMoZC0+YXJncywgZC0+YXJnQ291bnQsIE1heUNvbnRhaW5OdWxsVmFs
dWVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjFlZjYx
Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIEpTQm91bmRGdW5jdGlvbl9oCisjZGVmaW5l
IEpTQm91bmRGdW5jdGlvbl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5j
bHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0JvdW5kRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxG
dW5jdGlvbiB7CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKworcHVibGljOgorICAgIGV4cGxpY2l0
IEpTQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7CisKKyAgICBKU1ZhbHVlIHRhcmdldEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXRGdW5jdGlvbjsgfQorICAgIEpTVmFsdWUgYm91bmRUaGlzKCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZFRoaXM7IH0KKyAgICBKU1ZhbHVlKiBib3VuZEFyZ3MoKSBjb25zdCB7IHJldHVybiBk
ID8gZC0+YXJncyA6IDA7IH0KKyAgICBzaXplX3QgYm91bmRBcmdDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIGQgPyBkLT5hcmdDb3VudCA6IDA7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gaW5mbzsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUgcHJvdG8pCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5v
bnltb3VzU2xvdENvdW50KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRl
c01hcmtDaGlsZHJlbiB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgYm9vbCBoYXNJbnN0YW5jZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBK
U1ZhbHVlIHByb3RvKTsKKworICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKENvbnN0cnVjdERhdGEmKTsKKyAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENh
bGxEYXRhJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOwor
CisgICAgc3RydWN0IEJvdW5kQXJnc0RhdGEgOiBGYXN0QWxsb2NCYXNlIHsKKyAgICAgICAgQm91
bmRBcmdzRGF0YShjb25zdCBBcmdMaXN0JiBhcmdzKQorICAgICAgICAgICAgOiBhcmdzKG5ldyBK
U1ZhbHVlW2FyZ3Muc2l6ZSgpXSkKKyAgICAgICAgICAgICwgYXJnQ291bnQoYXJncy5zaXplKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkr
KykKKyAgICAgICAgICAgICAgICB0aGlzLT5hcmdzW2ldID0gYXJncy5hdChpKTsKKyAgICAgICAg
fQorCisgICAgICAgIH5Cb3VuZEFyZ3NEYXRhKCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVs
ZXRlIFtdIGFyZ3M7CisgICAgICAgIH0KKworICAgICAgICBKU1ZhbHVlKiBhcmdzOworICAgICAg
ICBzaXplX3QgYXJnQ291bnQ7CisgICAgfTsKKworICAgIEpTVmFsdWUgbV90YXJnZXRGdW5jdGlv
bjsKKyAgICBKU1ZhbHVlIG1fYm91bmRUaGlzOworICAgIE93blB0cjxCb3VuZEFyZ3NEYXRhPiBk
OworfTsKKworSlNCb3VuZEZ1bmN0aW9uKiBhc0JvdW5kRnVuY3Rpb24oSlNWYWx1ZSk7CisKK2lu
bGluZSBKU0JvdW5kRnVuY3Rpb24qIGFzQm91bmRGdW5jdGlvbihKU1ZhbHVlIHZhbHVlKQorewor
ICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZKU0JvdW5kRnVuY3Rpb246Omlu
Zm8pKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oYXNPYmplY3Qo
dmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0JvdW5kRnVu
Y3Rpb25faApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3
NTY4ZmZkLi42NTdjMTdjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkdsb2JhbEV2YWxGdW5j
dGlvbi5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpT
TG9jay5oIgpAQCAtMjE3LDYgKzIxOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpT
VmFsdWUgcHJvdG90eXBlKQogCiAgICAgZCgpLT5mdW5jdGlvblN0cnVjdHVyZSA9IEpTRnVuY3Rp
b246OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKICAgICBkKCktPmNh
bGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUgPSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBkKCktPmJvdW5kRnVuY3Rpb25TdHJ1
Y3R1cmUgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKTsKICAgICBkKCktPmFyZ3VtZW50c1N0cnVjdHVyZSA9IEFyZ3VtZW50czo6Y3JlYXRl
U3RydWN0dXJlKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxiYWNrQ29uc3Ry
dWN0b3JTdHJ1Y3R1cmUgPSBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShk
KCktPm9iamVjdFByb3RvdHlwZSk7CiAgICAgZCgpLT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSA9
IEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZCgpLT5vYmplY3RQ
cm90b3R5cGUpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGRm
OTQyY2YuLjU3ZWI2ZWMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
QEAgLTEzNiw2ICsxMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZlB0cjxT
dHJ1Y3R1cmU+IGFyZ3VtZW50c1N0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1
cmU+IGFycmF5U3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gYm9vbGVh
bk9iamVjdFN0cnVjdHVyZTsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGJvdW5kRnVu
Y3Rpb25TdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBjYWxsYmFja0Nv
bnN0cnVjdG9yU3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gY2FsbGJh
Y2tGdW5jdGlvblN0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGNhbGxi
YWNrT2JqZWN0U3RydWN0dXJlOwpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBTdHJ1Y3R1cmUqIGFyZ3VtZW50c1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQo
KS0+YXJndW1lbnRzU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmFycmF5U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IGQoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1cmUq
IGJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmJvdW5kRnVuY3Rp
b25TdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0NvbnN0cnVj
dG9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQo
KTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gZCgpLT5jYWxsYmFja09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4
cGVjdGVkLnR4dAppbmRleCA0OTg3OGYyLi40YmRjNDVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4
dApAQCAtNDMsNyArNDMsNyBAQCBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoZW5jb2Rl
VVJJQ29tcG9uZW50KSBpcyBbJ2xlbmd0aCcsICduYW1lJ10KIFBBU1MgZ2V0U29ydGVkT3duUHJv
cGVydHlOYW1lcyhPYmplY3QpIGlzIFsnY3JlYXRlJywgJ2RlZmluZVByb3BlcnRpZXMnLCAnZGVm
aW5lUHJvcGVydHknLCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgJ2dldE93blByb3BlcnR5
TmFtZXMnLCAnZ2V0UHJvdG90eXBlT2YnLCAna2V5cycsICdsZW5ndGgnLCAnbmFtZScsICdwcm90
b3R5cGUnXQogUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUp
IGlzIFsnX19kZWZpbmVHZXR0ZXJfXycsICdfX2RlZmluZVNldHRlcl9fJywgJ19fbG9va3VwR2V0
dGVyX18nLCAnX19sb29rdXBTZXR0ZXJfXycsICdjb25zdHJ1Y3RvcicsICdoYXNPd25Qcm9wZXJ0
eScsICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3Ry
aW5nJywgJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXQogUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5h
bWVzKEZ1bmN0aW9uKSBpcyBbJ2xlbmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddCi1QQVNTIGdl
dFNvcnRlZE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24ucHJvdG90eXBlKSBpcyBbJ2FwcGx5Jywg
J2NhbGwnLCAnY29uc3RydWN0b3InLCAnbGVuZ3RoJywgJ25hbWUnLCAndG9TdHJpbmcnXQorUEFT
UyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEZ1bmN0aW9uLnByb3RvdHlwZSkgaXMgWydhcHBs
eScsICdiaW5kJywgJ2NhbGwnLCAnY29uc3RydWN0b3InLCAnbGVuZ3RoJywgJ25hbWUnLCAndG9T
dHJpbmcnXQogUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEFycmF5KSBpcyBbJ2lzQXJy
YXknLCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10KIFBBU1MgZ2V0U29ydGVkT3duUHJv
cGVydHlOYW1lcyhBcnJheS5wcm90b3R5cGUpIGlzIFsnY29uY2F0JywgJ2NvbnN0cnVjdG9yJywg
J2V2ZXJ5JywgJ2ZpbHRlcicsICdmb3JFYWNoJywgJ2luZGV4T2YnLCAnam9pbicsICdsYXN0SW5k
ZXhPZicsICdsZW5ndGgnLCAnbWFwJywgJ3BvcCcsICdwdXNoJywgJ3JlZHVjZScsICdyZWR1Y2VS
aWdodCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NsaWNlJywgJ3NvbWUnLCAnc29ydCcsICdzcGxp
Y2UnLCAndG9Mb2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAndW5zaGlmdCddCiBQQVNTIGdldFNv
cnRlZE93blByb3BlcnR5TmFtZXMoU3RyaW5nKSBpcyBbJ2Zyb21DaGFyQ29kZScsICdsZW5ndGgn
LCAnbmFtZScsICdwcm90b3R5cGUnXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9m
dW5jdGlvbi1iaW5kLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24t
YmluZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkx
NmQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmlu
ZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNiBAQAorVGVzdCB0byBlbnN1cmUgY29ycmVjdCBi
ZWhhdmlvdXIgb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgZigpIGlzICdnbG9iYWwnCitQQVNTIG9iai5mKCkgaXMgJ2xvY2Fs
JworUEFTUyBnKCkgaXMgJ2dsb2JhbCcKK1BBU1MgaCgpIGlzICdsb2NhbCcKK1BBU1MgYWRkVHdv
VHdvKDMsIDQpIGlzIDExCitQQVNTIHJlY3QuY29sb3IgaXMgJ2JsdWUnCitQQVNTIHJlY3Quc2l6
ZSBpcyAxMAorUEFTUyByZWN0IGluc3RhbmNlb2YgUmVjdGFuZ2xlIGlzIHRydWUKK1BBU1MgcmVj
dCBpbnN0YW5jZW9mIEJsdWVSZWN0YW5nbGUgaXMgdHJ1ZQorUEFTUyBmdW4zKDMpIGlzIDYKK1BB
U1MgZnVuNSgpIGlzICdmaXJzdCcKK1BBU1MgZnVuNigpIGlzICdmaXJzdCcKK1BBU1Mgb2RkMiA9
PT0gb2RkMSBpcyB0cnVlCitQQVNTIG9kZDEoKSBpcyAnbG9jYWwnCitQQVNTIG9kZDIoKSBpcyAn
bG9jYWwnCitQQVNTIG9kZDNfcmVzdWx0IGlzICdsb2NhbCcKK1BBU1Mgb2RkMygpIGlzICdsb2Nh
bCcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmRjZWFiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvT2Jq
ZWN0LWdldE93blByb3BlcnR5TmFtZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10
ZXN0cy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy5qcwppbmRleCA0NzdmMDI0Li5iMDY1OTRl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9PYmplY3QtZ2V0
T3duUHJvcGVydHlOYW1lcy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0
cy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy5qcwpAQCAtNTEsNyArNTEsNyBAQCB2YXIgZXhw
ZWN0ZWRQcm9wZXJ0eU5hbWVzU2V0ID0gewogICAgICJPYmplY3QiOiAiWydjcmVhdGUnLCAnZGVm
aW5lUHJvcGVydGllcycsICdkZWZpbmVQcm9wZXJ0eScsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsICdnZXRQcm90b3R5cGVPZicsICdrZXlzJywgJ2xl
bmd0aCcsICduYW1lJywgJ3Byb3RvdHlwZSddIiwKICAgICAiT2JqZWN0LnByb3RvdHlwZSI6ICJb
J19fZGVmaW5lR2V0dGVyX18nLCAnX19kZWZpbmVTZXR0ZXJfXycsICdfX2xvb2t1cEdldHRlcl9f
JywgJ19fbG9va3VwU2V0dGVyX18nLCAnY29uc3RydWN0b3InLCAnaGFzT3duUHJvcGVydHknLCAn
aXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICd0b0xvY2FsZVN0cmluZycs
ICd0b1N0cmluZycsICd2YWx1ZU9mJ10iLAogICAgICJGdW5jdGlvbiI6ICJbJ2xlbmd0aCcsICdu
YW1lJywgJ3Byb3RvdHlwZSddIiwKLSAgICAiRnVuY3Rpb24ucHJvdG90eXBlIjogIlsnYXBwbHkn
LCAnY2FsbCcsICdjb25zdHJ1Y3RvcicsICdsZW5ndGgnLCAnbmFtZScsICd0b1N0cmluZyddIiwK
KyAgICAiRnVuY3Rpb24ucHJvdG90eXBlIjogIlsnYXBwbHknLCAnYmluZCcsICdjYWxsJywgJ2Nv
bnN0cnVjdG9yJywgJ2xlbmd0aCcsICduYW1lJywgJ3RvU3RyaW5nJ10iLAogICAgICJBcnJheSI6
ICJbJ2lzQXJyYXknLCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10iLAogICAgICJBcnJh
eS5wcm90b3R5cGUiOiAiWydjb25jYXQnLCAnY29uc3RydWN0b3InLCAnZXZlcnknLCAnZmlsdGVy
JywgJ2ZvckVhY2gnLCAnaW5kZXhPZicsICdqb2luJywgJ2xhc3RJbmRleE9mJywgJ2xlbmd0aCcs
ICdtYXAnLCAncG9wJywgJ3B1c2gnLCAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0JywgJ3JldmVyc2Un
LCAnc2hpZnQnLCAnc2xpY2UnLCAnc29tZScsICdzb3J0JywgJ3NwbGljZScsICd0b0xvY2FsZVN0
cmluZycsICd0b1N0cmluZycsICd1bnNoaWZ0J10iLAogICAgICJTdHJpbmciOiAiWydmcm9tQ2hh
ckNvZGUnLCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10iLApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1NjVjYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMKQEAgLTAsMCArMSw3OSBA
QAorZGVzY3JpcHRpb24oIlRlc3QgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3VyIG9mIEZ1bmN0
aW9uLnByb3RvdHlwZS5iaW5kIik7CisKKworLy8gVGhvc2UgYXJlIHVzZWQgZm9yIG1hbnkgdGVz
dHMuLi4KK3Byb3AgPSAiZ2xvYmFsIjsKK3ZhciBvYmogPSB7IHByb3A6ICJsb2NhbCIgfTsKK3Zh
ciBmID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnByb3A7IH0KK29iai5mID0gZjsKKworCisv
LyBTaW1wbGUgdXNlIHRvIGJpbmQgJ3RoaXMnCitzaG91bGRCZSgiZigpIiwgIidnbG9iYWwnIik7
CitzaG91bGRCZSgib2JqLmYoKSIsICInbG9jYWwnIik7CisKK3ZhciBnID0gb2JqLmY7CitzaG91
bGRCZSgiZygpIiwgIidnbG9iYWwnIik7CisKK3ZhciBoID0gZi5iaW5kKG9iaik7CitzaG91bGRC
ZSgiaCgpIiwgIidsb2NhbCciKTsKKworCisvLyBTaW1wbGUgdXNlIHRvIGN1cnJ5IHRoZSBwYXJh
bWV0ZXJzCit2YXIgYWRkZXIgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gYSArIGIg
KyBjICsgZDsgfTsKK3ZhciBhZGRUd29Ud28gPSBhZGRlci5iaW5kKG51bGwsIDIsIDIpOworCitz
aG91bGRCZSgiYWRkVHdvVHdvKDMsIDQpIiwgIjExIik7CisKKworLy8gQ29uc3RydWN0b3IKK3Zh
ciBSZWN0YW5nbGUgPSBmdW5jdGlvbihjb2xvciwgc2l6ZSkgeyB0aGlzLmNvbG9yID0gY29sb3I7
IHRoaXMuc2l6ZSA9IHNpemU7IH07Cit2YXIgQmx1ZVJlY3RhbmdsZSA9IFJlY3RhbmdsZS5iaW5k
KG51bGwsICJibHVlIik7CisKK3ZhciByZWN0ID0gbmV3IEJsdWVSZWN0YW5nbGUoMTApOworCitz
aG91bGRCZSgicmVjdC5jb2xvciIsICInYmx1ZSciKTsKK3Nob3VsZEJlKCJyZWN0LnNpemUiLCAi
MTAiKTsKK3Nob3VsZEJlVHJ1ZSgicmVjdCBpbnN0YW5jZW9mIFJlY3RhbmdsZSIpOworc2hvdWxk
QmVUcnVlKCJyZWN0IGluc3RhbmNlb2YgQmx1ZVJlY3RhbmdsZSIpOworCisKKy8vIEJpbmQgb3Zl
ciBiaW5kCit2YXIgZnVuMSA9IGZ1bmN0aW9uKGEsIGIsIGMpIHsgcmV0dXJuIGEgKyBiICsgYzsg
fTsKK3ZhciBmdW4yID0gZnVuMS5iaW5kKG51bGwsIDEpOwordmFyIGZ1bjMgPSBmdW4yLmJpbmQo
bnVsbCwgMik7CisKK3Nob3VsZEJlKCJmdW4zKDMpIiwgIjYiKTsKKworCisvLyBCaW5kIG92ZXIg
YmluZCBrZWVwaW5nIGNvbnRleHQKK3ZhciBmdW40ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlz
LnByb3A7IH07Cit2YXIgZnVuNSA9IGZ1bjQuYmluZCh7IHByb3A6ICJmaXJzdCIgfSk7Cit2YXIg
ZnVuNiA9IGZ1bjUuYmluZCh7IHByb3A6ICJzZWNvbmQiIH0pOworCitzaG91bGRCZSgiZnVuNSgp
IiwgIidmaXJzdCciKTsKK3Nob3VsZEJlKCJmdW42KCkiLCAiJ2ZpcnN0JyIpOyAgLy8gWW91IGNh
bid0IG92ZXJyaWRlIGJvdW5kZWQgJ3RoaXMnCisKKworLy8gVGVzdCBzb21lIG9kZCBjYXNlcyB0
byBwcmV2ZW50IG9wdGltaXphdGlvbnMgKGltcHJvcGVyIENhbGwgRnJhbWUKKy8vIHJld3JpdGlu
ZykgYnJlYWsgY29kZS4gVGhpcyB3YXMgZm91bmQgZHVyaW5nIGRldmVsb3BtZW50LCBzbyB3ZSBr
ZWVwCisvLyB0byBhdm9pZCBhIHJlZ3Jlc3Npb24uCit2YXIgb2RkMSA9IGYuYmluZChvYmopOwor
dmFyIG9kZDIgPSBvZGQxOworCitvZGQyKCk7CitzaG91bGRCZVRydWUoIm9kZDIgPT09IG9kZDEi
KTsKKworc2hvdWxkQmUoIm9kZDEoKSIsICInbG9jYWwnIik7CitzaG91bGRCZSgib2RkMigpIiwg
Iidsb2NhbCciKTsKKwordmFyIG9kZDMgPSBmLmJpbmQob2JqKTsKK29kZDMoKTsKK29kZDMoKTsK
K3ZhciBvZGQzX3Jlc3VsdCA9IG9kZDMoKTsKKworc2hvdWxkQmUoIm9kZDNfcmVzdWx0IiwgIids
b2NhbCciKTsKK3Nob3VsZEJlKCJvZGQzKCkiLCAiJ2xvY2FsJyIpOworCisKK3N1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Ci0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55161</attachid>
            <date>2010-05-05 15:32:43 -0700</date>
            <delta_ts>2010-05-05 15:32:43 -0700</delta_ts>
            <desc>Optimization for bind() used just for binding &apos;this&apos; (JIT case), v2</desc>
            <filename>0003-Enhance-JIT-performance-of-simplest-case-of-Function.patch</filename>
            <type>text/plain</type>
            <size>8436</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSBlNGRmMzVlMjE5ZWI5ZWE4OWY5MjkzYzJkNmFlZjYzZGQ5YWJiOWY5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogU3VuLCAyIE1heSAyMDEwIDE4OjA4OjE2IC0w
MzAwClN1YmplY3Q6IFtQQVRDSCAzLzRdIEVuaGFuY2UgSklUIHBlcmZvcm1hbmNlIG9mIHNpbXBs
ZXN0IGNhc2Ugb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQoKQogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzgyCgpTaW1pbGFyIGFwcHJvYWNoIHRvIG5vbi1KSVQg
Y2FzZSwgcmV3cml0ZSBib3RoICd0aGlzJyBhbmQgJ2NhbGxlZScgaW4KdGhlIGNhbGwgZnJhbWUg
YW5kIGp1bXAgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGNhbGwuCgpOb3RlIHRoYXQgdGhpcyBp
cyBvbmx5IHNhZmUgaWYgd2UgYXJlIHN1cmUgdGhhdCBib3RoIGFyZSBzdG9yZWQgaW4KdGVtcG9y
YXJ5IHJlZ2lzdGVycywgc28gdGhpcyBwYXRjaCBoYWQgdG8gYWRkIGEgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb24KYmVmb3JlIGNhbGxzIHRvIGVuc3VyZSB0aGF0LiBJIGVzdGltYXRlZCB0aGF0IFN1blNw
aWRlciBuZWVkZWQgdGhpcwpleHRyYSBieXRlY29kZSBiZWZvcmUgMTAlIG9mIHRoZSBjYWxscy4g
T1RPSCwgdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YKY2FsbCBuZWVkZWQuCi0tLQogSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCB8ICAgIDIgKysKIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwICAgICAgfCAgIDE3ICsrKysr
KysrKysrKysrKy0tCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgICAgICAg
ICAgICAgICAgICAgIHwgICAxNSArKysrKysrKysrKysrLS0KIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAgICAgICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggYWE1YzVm
OS4uMTBjNGMxMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0xMzk3LDYgKzEzOTcsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwg
UmVnaQogICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9jYWxsIHx8IG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCk7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNvdW50KCkpOwogICAgIEFTU0VSVCh0aGlz
UmVnaXN0ZXItPnJlZkNvdW50KCkpOworICAgIEFTU0VSVChmdW5jLT5pc1RlbXBvcmFyeSgpKTsK
KyAgICBBU1NFUlQodGhpc1JlZ2lzdGVyLT5pc1RlbXBvcmFyeSgpKTsKIAogICAgIFJlZ2lzdGVy
SUQqIG9yaWdpbmFsRnVuYyA9IGZ1bmM7CiAgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29r
cykgewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCBhYWYyZGQxLi5hM2E5ZmIwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcApAQCAtMzM0LDcgKzMzNCwxMyBAQCBSZWdpc3RlcklEKiBFdmFsRnVuY3Rp
b25DYWxsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
ZwogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gb3JpZ2luYWxGdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmM7CisgICAgaWYgKG9yaWdpbmFsRnVuYy0+aXNU
ZW1wb3JhcnkoKSkKKyAgICAgICAgZnVuYyA9IG9yaWdpbmFsRnVuYzsKKyAgICBlbHNlCisgICAg
ICAgIGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBv
cmlnaW5hbEZ1bmMuZ2V0KCkpOworCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3Rl
ciA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgbV9h
cmdzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CkBAIC0zNDQsOCAr
MzUwLDE1IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNh
bGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBpZiAoUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0g
Z2VuZXJhdG9yLnJlZ2lzdGVyRm9yKG1faWRlbnQpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jOworICAgICAgICBpZiAobG9jYWwtPmlzVGVtcG9yYXJ5KCkpCisgICAgICAgICAg
ICBmdW5jID0gbG9jYWw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZ1bmMgPSBnZW5lcmF0
b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBsb2NhbC5nZXQoKSk7CisKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0TG9h
ZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVsbCgpKTsKLSAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHRoaXNSZWdp
c3Rlci5nZXQoKSksIGxvY2FsLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIG1fYXJncywgZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICBSZWdpc3RlcklEKiB0
ZW1wRHN0ID0gbG9jYWwtPmlzVGVtcG9yYXJ5KCkgPyB0aGlzUmVnaXN0ZXIuZ2V0KCkgOiBmdW5j
LmdldCgpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgdGVtcERzdCksIGZ1bmMuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQo
KSwgbV9hcmdzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgfQog
CiAgICAgaW50IGluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggYTU5MjNmNS4uZWY0YTRmMiAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKQEAgLTc2LDYgKzc2LDcgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9i
YWxEYXRhKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9sYWJlbHMoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQorICAgICwgbV9j
YWxsU3RhcnRzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDog
MCkKICAgICAsIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5udW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIDogMCkKICAgICAsIG1fY2FsbFN0
cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5udW1iZXJP
ZkNhbGxMaW5rSW5mb3MoKSA6IDApCiAgICAgLCBtX2J5dGVjb2RlSW5kZXgoKHVuc2lnbmVkKS0x
KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCmluZGV4IGRiZDMxMWIuLjVlNmZiNDAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTg2NSw2ICs4
NjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9j
YWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKKyAgICAgICAgVmVjdG9yPExh
YmVsPiBtX2NhbGxTdGFydHM7CiAgICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlv
bkluZm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbz4gbV9tZXRo
b2RDYWxsQ29tcGlsYXRpb25JbmZvOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IGRhNjAzYmQu
LmZkOTc0OGMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiUmVzdWx0
VHlwZS5oIgpAQCAtNjEsMTQgKzYyLDE3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsSW5pdGlh
bGl6ZUNhbGxGcmFtZSgpCiAKIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2V0dXBBcmdzKEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwogICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAKKyAg
ICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHBhc3NpbmcgdGhlIGNhbGxlZSBpdHNlbGYgc2luY2Ug
d2UgaGF2ZSB0aGUgY2FsbGVlIG9mZnNldC4KICAgICBlbWl0UHV0SklUU3R1YkFyZyhyZWdUMSwg
cmVnVDAsIDApOwogICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQocmVnaXN0ZXJPZmZzZXQs
IDEpOwogICAgIGVtaXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoYXJnQ291bnQsIDIpOworICAgIGVt
aXRQdXRKSVRTdHViQXJnQ29uc3RhbnQoY2FsbGVlLCAzKTsKIH0KLSAgICAgICAgICAKKwogdm9p
ZCBKSVQ6OmNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCiB7CiAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwpAQCAt
MzEyLDYgKzMxNiw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlE
LCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgICAgIHdhc0V2YWwg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KTsKICAgICB9CiAKKyAgICAvLyBFbnRyeSBwb2ludCBmb3IgcmVzdGFydGluZyBhIGNhbGwsIHVz
ZWQgaW4gYm91bmQgZnVuY3Rpb24gb3B0aW1pemF0aW9uLgorICAgIG1fY2FsbFN0YXJ0c1ttX2J5
dGVjb2RlSW5kZXhdID0gbGFiZWwoKTsKKwogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJl
Z1QwKTsKIAogICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwpA
QCAtNDE4LDkgKzQyNSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OgogICAgIC8vIFRoaXMg
aGFuZGxlcyBob3N0IGZ1bmN0aW9ucwogICAgIGNhbGxMaW5rRmFpbE5vdE9iamVjdC5saW5rKHRo
aXMpOwogICAgIGNhbGxMaW5rRmFpbE5vdEpTRnVuY3Rpb24ubGluayh0aGlzKTsKKwogICAgIEpJ
VFN0dWJDYWxsKHRoaXMsIG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IGN0aV9vcF9jb25zdHJ1
Y3RfTm90SlNDb25zdHJ1Y3QgOiBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKS5jYWxsKCk7CiAK
LSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOzsKKyAgICBKdW1wIHJlc3RhcnRDYWxs
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7
CisgICAgcmVzdGFydENhbGwubGlua1RvKG1fY2FsbFN0YXJ0c1ttX2J5dGVjb2RlSW5kZXhdLCB0
aGlzKTsKKworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgc2FtcGxlQ29k
ZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggZWJk
MjZiYi4uOWNmNzI0YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQnl0
ZUFycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmpl
Y3QuaCIKQEAgLTE4ODcsNiArMTg4OCwxNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKQogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZUhvc3QpIHsKICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdz
WzFdLmludDMyKCk7CiAgICAgICAgIGludCBhcmdDb3VudCA9IHN0YWNrRnJhbWUuYXJnc1syXS5p
bnQzMigpOworCisgICAgICAgIC8vIEJvdW5kIGZ1bmN0aW9uIG9wdGltaXphdGlvbjogY2hhbmdl
ICd0aGlzJyBhbmQgcmVzdGFydCBjYWxsLgorICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbERhdGEu
bmF0aXZlLmJvdW5kRnVuY3Rpb24pKSB7CisgICAgICAgICAgICBKU0JvdW5kRnVuY3Rpb24qIGJv
dW5kRnVuYyA9IGFzQm91bmRGdW5jdGlvbihhc09iamVjdChmdW5jVmFsKSk7CisgICAgICAgICAg
ICBpbnQgY2FsbGVlT2Zmc2V0ID0gc3RhY2tGcmFtZS5hcmdzWzNdLmludDMyKCk7CisgICAgICAg
ICAgICBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbcmVnaXN0ZXJPZmZzZXQgLSBh
cmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZV0gPSBib3VuZEZ1bmMt
PmJvdW5kVGhpcygpOworICAgICAgICAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnJlZ2lzdGVy
cygpW2NhbGxlZU9mZnNldF0gPSBib3VuZEZ1bmMtPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIH0KKwogICAg
ICAgICBDYWxsRnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUocHJldmlv
dXNDYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQpOwogCi0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55852</attachid>
            <date>2010-05-12 08:37:45 -0700</date>
            <delta_ts>2010-05-12 08:37:45 -0700</delta_ts>
            <desc>Native implementation of Function.prototype.bind(), v6</desc>
            <filename>0001-Implement-ES5-Function.prototype.bind-function.patch</filename>
            <type>text/plain</type>
            <size>26430</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">RnJvbSAwZjFlMWQwZWI4ZThjMzk3MmMwN2EyY2MwNjhlZmI2NDE3ODYwYzIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KRGF0ZTogV2VkLCAxMiBNYXkgMjAxMCAxMTo1Mjo0MyAt
MDMwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxlbWVudCBFUzUgRnVuY3Rpb24ucHJvdG90eXBlLmJp
bmQgZnVuY3Rpb24KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjM4
MgoKLS0tCiBKYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDEgKwogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAg
ICAgICAgfCAgICAyICsKIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkgICAgICAg
ICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8gICAg
ICAgICAgICAgICAgICB8ICAgIDEgKwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogICAgICAgfCAgICA2ICsKIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaCAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcCAgICAgICB8ICAgMTggKysrKwogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwICAgICAgICAgfCAgMTA0ICsrKysrKysrKysrKysrKysr
KysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oICAgICAgICAgICB8
ICAgODIgKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcCAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oICAgICAgICAgICAgfCAgICAyICsKIC4uLi9qcy9PYmplY3QtZ2V0T3duUHJvcGVy
dHlOYW1lcy1leHBlY3RlZC50eHQgICAgIHwgICAgMiArLQogTGF5b3V0VGVzdHMvZmFzdC9qcy9m
dW5jdGlvbi1iaW5kLWV4cGVjdGVkLnR4dCAgICAgfCAgIDI2ICsrKysrCiBMYXlvdXRUZXN0cy9m
YXN0L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbCAgICAgICAgICAgICB8ICAgMTMgKysrCiAuLi4vanMv
c2NyaXB0LXRlc3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLmpzICB8ICAgIDIgKy0KIExh
eW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMgIHwgICA3OSAr
KysrKysrKysrKysrKysKIDE2IGZpbGVzIGNoYW5nZWQsIDM0MSBpbnNlcnRpb25zKCspLCAyIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0
L2pzL2Z1bmN0aW9uLWJpbmQtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0
VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1iaW5kLmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzCgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tayBiL0phdmFTY3JpcHRDb3JlL0FuZHJvaWQubWsK
aW5kZXggMWI1ZGEwMi4uNjRlZmM4ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQW5kcm9p
ZC5taworKysgYi9KYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCkBAIC0xMDMsNiArMTAzLDcgQEAg
TE9DQUxfU1JDX0ZJTEVTIDo9IFwKIAlydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcCBcCiAJ
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwIFwKIAlydW50aW1lL0pTQXJyYXkuY3BwIFwKKwlydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAogCXJ1bnRpbWUvSlNCeXRlQXJyYXkuY3BwIFwKIAly
dW50aW1lL0pTQ2VsbC5jcHAgXAogCXJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAgXApkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCA4ZWQyM2U1Li44YTZlMjhlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAt
NDQ4LDYgKzQ0OCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFs
dWVXcmFwcGVyLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBl
ci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAorCUph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggXAogCUphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBc
CiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaQppbmRleCAyZDFmMjBhLi4zYzk3OTdmIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cGkKQEAgLTIyNSw2ICsyMjUsOCBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNBcnJheS5jcHAnLAogICAgICAg
ICAgICAgJ3J1bnRpbWUvSlNBcnJheS5oJywKKyAgICAgICAgICAgICdydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAnLAorICAgICAgICAgICAgJ3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgnLAog
ICAgICAgICAgICAgJ3J1bnRpbWUvSlNCeXRlQXJyYXkuY3BwJywKICAgICAgICAgICAgICdydW50
aW1lL0pTQnl0ZUFycmF5LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNDZWxsLmNwcCcsCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8gYi9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KaW5kZXggMDBlZThlNi4uMzdiYTg5YSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCisrKyBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnBybwpAQCAtMTUxLDYgKzE1MSw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IHJ1bnRpbWUvSlNCeXRlQXJyYXkuY3BwIFwKICAgICBydW50aW1lL0pTQ2VsbC5jcHAgXAogICAg
IHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAgXAorICAgIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cCBcCiAgICAgcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgXApk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMWVkYjBhZi4uZTQ2YzJhNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
NDksNiArMjQ5LDcgQEAKIAkJODZFQUM0OUMwRjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4UGF0dGVy
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQUM0
OTQwRjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4UGF0dGVybi5oICovOyB9OwogCQk5MDVCMDJBRTBF
Mjg2NDBGMDA2REY4ODIgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNUIwMkFEMEUyODY0MEYwMDZERjg4
MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwICovOyB9OwogCQk5MEQzNDY5QzBFMjg1Mjgw
MDA5NDkyRUUgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQzNDY5QjBFMjg1MjgwMDA5NDkyRUUgLyogUmVm
Q291bnRlZExlYWtDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJOTFGMkFBQzExMTlBMkNGQzAwOTQ5MjRDIC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MUYy
QUFCNDExOUEyOEY5MDA5NDkyNEMgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJOTMw
NTJDMzQwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDUyQzMyMEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgKi87IH07CiAJCTkzMDUyQzM1MEZCNzkyMTkwMDQ4RkRDMyAvKiBQ
YXJzZXJBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMwNTJDMzMwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJOTMwNzU0QzEwOEIwRjY4MDAwQUIzMDU2IC8q
IHBjcmVfY29tcGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzA3NTRCRjA4QjBGNjgwMDBBQjMwNTYgLyogcGNyZV9jb21waWxlLmNwcCAqLzsg
fTsKQEAgLTgwNSw2ICs4MDYsOCBAQAogCQk4NkVBQzQ5NDBGOTNFOEQxMDA4RUM5NDggLyogUmVn
ZXhQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZ2V4UGF0dGVy
bi5oOyBwYXRoID0geWFyci9SZWdleFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZDb3VudGVkTGVha0Nv
dW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MEQzNDY5QjBFMjg1Mjgw
MDA5NDkyRUUgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZkNvdW50ZWRMZWFrQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5MUYyQUFCNDExOUEyOEY5MDA5NDkyNEMgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQm91bmRGdW5jdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkxRjJBQUI1MTE5QTI4RjkwMDk0OTI0
QyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNCb3VuZEZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDNGNTY3
MDk5MTE4RkEwMEFENzFCOCAvKiBPd25QdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT3duUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDNGNTY5MDk5
MTE5MDAwMEFENzFCOCAvKiBOb25jb3B5YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOb25jb3B5YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAz
RjVBNDA5OTExQTU4MDBBRDcxQjggLyogT3duQXJyYXlQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT3duQXJyYXlQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE1MTUsNiArMTUxOCw4IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50
aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5MUYy
QUFCNDExOUEyOEY5MDA5NDkyNEMgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKKwkJCQk5MUYy
QUFCNTExOUEyOEY5MDA5NDkyNEMgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJQkNGNjA1
MTEwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNF
RjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggKi8sCiAJCQkJQkMyNTdERTUwRTFGNTFDNTAwMTZCNkM5
IC8qIEFyZ3VtZW50cy5jcHAgKi8sCkBAIC0yNTg4LDYgKzI1OTMsNyBAQAogCQkJCUE3NTcwNkRF
MTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODYyNkJFQ0YxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82
NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MUYyQUFDMTExOUEyQ0ZDMDA5NDkyNEMgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oCmluZGV4IGRlMjRmNGEuLjZkZDMzYTUgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTMzLDYgKzMzLDcgQEAKICAgICBt
YWNybyhfX2xvb2t1cFNldHRlcl9fKSBcCiAgICAgbWFjcm8oYXBwbHkpIFwKICAgICBtYWNybyhh
cmd1bWVudHMpIFwKKyAgICBtYWNybyhiaW5kKSBcCiAgICAgbWFjcm8oY2FsbCkgXAogICAgIG1h
Y3JvKGNhbGxlZSkgXAogICAgIG1hY3JvKGNhbGxlcikgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAppbmRleCBhNzdiNWIyLi45ODcwMjgzIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcApAQCAtMjMsNiArMjMs
NyBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgorI2lu
Y2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTU3RyaW5nQnVpbGRlci5oIgpAQCAtMzcsNiAr
MzgsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEZ1bmN0aW9uUHJvdG90eXBlKTsKIHN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByb3RvRnVuY0JpbmQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUq
IGV4ZWMsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSW50
ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5udWxsSWRlbnRpZmllcikKQEAgLTUxLDYgKzUzLDcgQEAgdm9pZCBGdW5jdGlv
blByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBwcm90b3QKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMs
ICphcHBseUZ1bmN0aW9uLCBEb250RW51bSk7CiAgICAgKmNhbGxGdW5jdGlvbiA9IG5ldyAoZXhl
YykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsK
ICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVuY3Rp
b24sIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMsIG5ldyAoZXhlYykgTmF0aXZlRnVuY3Rpb25XcmFwcGVyKGV4ZWMsIHByb3RvdHlwZUZ1bmN0
aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgZnVuY3Rpb25Qcm90
b0Z1bmNCaW5kKSwgRG9udEVudW0pOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKQpAQCAtOTUsNiArOTgsOSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYQog
ICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cygmSlNCb3VuZEZ1
bmN0aW9uOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAo
KSB7XG4gICAgW2JvdW5kZWQgZnVuY3Rpb25dXG59Iik7CisKICAgICBpZiAodGhpc1ZhbHVlLmlu
aGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbih0aGlzVmFsdWUpOwogICAgICAgICBy
ZXR1cm4ganNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiZnVuY3Rpb24gIiwgZnVuY3Rpb24t
Pm5hbWUoZXhlYyksICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwpAQCAtMTQzLDQgKzE0
OSwxNiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlCiAgICAgcmV0dXJuIGNhbGwoZXhlYywgdGhp
c1ZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFyZ3MuYXQoMCksIGNhbGxBcmdzKTsKIH0KIAor
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQmluZChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB0aGlzVmFs
dWUuZ2V0Q2FsbERhdGEoY2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5v
bmUgfHwgYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOworCisgICAgQXJnTGlzdCBib3VuZEFyZ3M7CisgICAgYXJncy5nZXRTbGljZSgx
LCBib3VuZEFyZ3MpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQm91bmRGdW5jdGlvbihleGVj
LCBhc0Z1bmN0aW9uKHRoaXNWYWx1ZSksIGFyZ3MuYXQoMCksIGJvdW5kQXJncyk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTQ0ZTkKLS0tIC9kZXYv
bnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKQEAg
LTAsMCArMSwxMDQgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVu
Y3Rpb24uaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEpTQm91bmRGdW5jdGlvbik7CisKK2NvbnN0IENsYXNzSW5mbyBK
U0JvdW5kRnVuY3Rpb246OmluZm8gPSB7ICJGdW5jdGlvbiIsICZJbnRlcm5hbEZ1bmN0aW9uOjpp
bmZvLCAwLCAwIH07CisKK0pTQm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNGdW5jdGlvbiogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvdW5kRnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgSWRlbnRpZmllcihleGVjLCAiYm91bmRGdW5jdGlvbiIpKQorICAgICwgZChuZXcgQm91
bmREYXRhKHRhcmdldEZ1bmN0aW9uLCBib3VuZFRoaXMsIGFyZ3MpKQoreworICAgIGNvbnN0IHVu
c2lnbmVkIHRhcmdldExlbmd0aCA9IHRhcmdldEZ1bmN0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgaW50IGxlbmd0aCA9IHRh
cmdldExlbmd0aCAtIGFyZ3Muc2l6ZSgpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICBs
ZW5ndGggPSAwOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcihleGVjLCBsZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7
CisgICAgZC0+dGFyZ2V0Q2FsbFR5cGUgPSBkLT50YXJnZXRGdW5jdGlvbi0+Z2V0Q2FsbERhdGEo
ZC0+dGFyZ2V0Q2FsbERhdGEpOworICAgIC8vIEZJWE1FOiBEZWZpbmVPd25Qcm9wZXJ0eSBmb3Ig
ImNhbGxlciIgYW5kICJhcmd1bWVudHMiIHVzaW5nIFRocm93VHlwZUVycm9yIGFzIGdldC9zZXQu
Cit9CisKK0pTVmFsdWUgSlNCb3VuZEZ1bmN0aW9uOjpib3VuZENhbGwoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBjYWxsKGV4ZWMsIGQtPnRhcmdl
dEZ1bmN0aW9uLCBkLT50YXJnZXRDYWxsVHlwZSwgZC0+dGFyZ2V0Q2FsbERhdGEsIGQtPmJvdW5k
VGhpcywgYXJncyk7Cit9CisgICAgCitib29sIEpTQm91bmRGdW5jdGlvbjo6aGFzSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlKQoreworICAgIGlmICghZC0+
dGFyZ2V0RnVuY3Rpb24tPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJbnN0
YW5jZSgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisg
ICAgcmV0dXJuIGQtPnRhcmdldEZ1bmN0aW9uLT5oYXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgZC0+
dGFyZ2V0RnVuY3Rpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
KSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0Qm91bmRGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBmdW5jdGlvbiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAg
ICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuYyA9IHN0YXRpY19jYXN0PEpTQm91bmRGdW5jdGlv
bio+KGZ1bmN0aW9uKTsKKworICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGJvdW5kRnVuYy0+dGFy
Z2V0RnVuY3Rpb24oKTsKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgQ29u
c3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gdGFyZ2V0LT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0
cnVjdERhdGEpOworICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVOb25lKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgSlNWYWx1
ZSogYm91bmRBcmdzID0gYm91bmRGdW5jLT5ib3VuZEFyZ3MoKTsKKyAgICBzaXplX3QgYm91bmRB
cmdDb3VudCA9IGJvdW5kRnVuYy0+Ym91bmRBcmdDb3VudCgpOworCisgICAgaWYgKGFyZ3MuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIHRhcmdldCwgY29uc3RydWN0
VHlwZSwgY29uc3RydWN0RGF0YSwgQXJnTGlzdChib3VuZEFyZ3MsIGJvdW5kQXJnQ291bnQpKTsK
KworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGZpbmFsQXJnczsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJvdW5kQXJnQ291bnQ7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChi
b3VuZEFyZ3NbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkr
KykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChhcmdzLmF0KGkpKTsKKworICAgIHJldHVybiBj
b25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBmaW5h
bEFyZ3MpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQm91bmRGdW5jdGlvbjo6Z2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Qm91bmRGdW5jdGlvbjsKKyAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUhvc3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJv
dW5kRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZnVuY3Rpb24sIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmMg
PSBzdGF0aWNfY2FzdDxKU0JvdW5kRnVuY3Rpb24qPihmdW5jdGlvbik7CisKKyAgICBKU1ZhbHVl
KiBib3VuZEFyZ3MgPSBib3VuZEZ1bmMtPmJvdW5kQXJncygpOworICAgIHNpemVfdCBib3VuZEFy
Z0NvdW50ID0gYm91bmRGdW5jLT5ib3VuZEFyZ0NvdW50KCk7CisgICAgCisgICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYm91bmRGdW5jLT5ib3VuZENhbGwoZXhlYywgQXJn
TGlzdChib3VuZEFyZ3MsIGJvdW5kQXJnQ291bnQpKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGZpbmFsQXJnczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJvdW5kQXJnQ291bnQ7
IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFwcGVuZChib3VuZEFyZ3NbaV0pOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykKKyAgICAgICAgZmluYWxBcmdzLmFw
cGVuZChhcmdzLmF0KGkpKTsKKworICAgIHJldHVybiBib3VuZEZ1bmMtPmJvdW5kQ2FsbChleGVj
LCBmaW5hbEFyZ3MpOworfQorCitDYWxsVHlwZSBKU0JvdW5kRnVuY3Rpb246OmdldENhbGxEYXRh
KENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBj
YWxsQm91bmRGdW5jdGlvbjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit2b2lkIEpT
Qm91bmRGdW5jdGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQoreworICAg
IEpTT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKyAgICBtYXJrU3RhY2suYXBwZW5k
KGQtPnRhcmdldEZ1bmN0aW9uKTsKKyAgICBtYXJrU3RhY2suYXBwZW5kKGQtPmJvdW5kVGhpcyk7
CisgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhkLT5hcmdzLCBkLT5hcmdDb3VudCwgTWF5Q29u
dGFpbk51bGxWYWx1ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmggYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE5OTk2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Qm91bmRGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgSlNCb3VuZEZ1bmN0aW9u
X2gKKyNkZWZpbmUgSlNCb3VuZEZ1bmN0aW9uX2gKKworI2luY2x1ZGUgIkNhbGxEYXRhLmgiCisj
aW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNl
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SlNCb3VuZEZ1bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0JvdW5kRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNGdW5jdGlvbiosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKworICAgIEpTRnVu
Y3Rpb24qIHRhcmdldEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gZC0+dGFyZ2V0RnVuY3Rpb247
IH0KKyAgICBDYWxsRGF0YSYgdGFyZ2V0Q2FsbERhdGEoKSB7IHJldHVybiBkLT50YXJnZXRDYWxs
RGF0YTsgfQorICAgIENhbGxUeXBlIHRhcmdldENhbGxUeXBlKCkgeyByZXR1cm4gZC0+dGFyZ2V0
Q2FsbFR5cGU7IH0KKyAgICBKU1ZhbHVlIGJvdW5kVGhpcygpIGNvbnN0IHsgcmV0dXJuIGQtPmJv
dW5kVGhpczsgfQorICAgIEpTVmFsdWUqIGJvdW5kQXJncygpIGNvbnN0IHsgcmV0dXJuIGQtPmFy
Z3M7IH0KKyAgICBzaXplX3QgYm91bmRBcmdDb3VudCgpIGNvbnN0IHsgcmV0dXJuIGQtPmFyZ0Nv
dW50OyB9CisKKyAgICBKU1ZhbHVlIGJvdW5kQ2FsbChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0
Jik7CisgICAgCisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOworCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBw
cm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90bywgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuIHwgSW50
ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBi
b29sIGhhc0luc3RhbmNlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG8pOworCisg
ICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYp
OworICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKKworICAgIHZp
cnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CisKKyAgICBzdHJ1Y3QgQm91bmRE
YXRhIDogRmFzdEFsbG9jQmFzZSB7CisgICAgICAgIEJvdW5kRGF0YShKU0Z1bmN0aW9uKiB0YXJn
ZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCisgICAg
ICAgICAgICA6IHRhcmdldEZ1bmN0aW9uKHRhcmdldEZ1bmN0aW9uKQorICAgICAgICAgICAgLCBi
b3VuZFRoaXMoYm91bmRUaGlzKQorICAgICAgICAgICAgLCBhcmdzKG5ldyBKU1ZhbHVlW2FyZ3Mu
c2l6ZSgpXSkKKyAgICAgICAgICAgICwgYXJnQ291bnQoYXJncy5zaXplKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAg
ICAgICAgICAgICB0aGlzLT5hcmdzW2ldID0gYXJncy5hdChpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIH5Cb3VuZERhdGEoKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgW10gYXJnczsK
KyAgICAgICAgfQorCisgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uOworICAgICAg
ICBDYWxsRGF0YSB0YXJnZXRDYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgdGFyZ2V0Q2FsbFR5
cGU7CisgICAgICAgIEpTVmFsdWUgYm91bmRUaGlzOworICAgICAgICBKU1ZhbHVlKiBhcmdzOwor
ICAgICAgICBzaXplX3QgYXJnQ291bnQ7CisgICAgfTsKKworICAgIE93blB0cjxCb3VuZERhdGE+
IGQ7Cit9OworCitKU0JvdW5kRnVuY3Rpb24qIGFzQm91bmRGdW5jdGlvbihKU1ZhbHVlKTsKKwor
aW5saW5lIEpTQm91bmRGdW5jdGlvbiogYXNCb3VuZEZ1bmN0aW9uKEpTVmFsdWUgdmFsdWUpCit7
CisgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkpTQm91bmRGdW5jdGlvbjo6
aW5mbykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0JvdW5kRnVuY3Rpb24qPihhc09iamVj
dCh2YWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQm91bmRG
dW5jdGlvbl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4
IDdmZDQ5MWEuLmMxNjY5MjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2xvYmFsRXZhbEZ1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
SlNMb2NrLmgiCkBAIC0yMTcsNiArMjE4LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQo
SlNWYWx1ZSBwcm90b3R5cGUpCiAKICAgICBkKCktPmZ1bmN0aW9uU3RydWN0dXJlID0gSlNGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwogICAgIGQoKS0+
Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+Ym91bmRGdW5jdGlvblN0
cnVjdHVyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUpOwogICAgIGQoKS0+YXJndW1lbnRzU3RydWN0dXJlID0gQXJndW1lbnRzOjpjcmVh
dGVTdHJ1Y3R1cmUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwogICAgIGQoKS0+Y2FsbGJhY2tDb25z
dHJ1Y3RvclN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJl
ID0gSlNDYWxsYmFja09iamVjdDxKU09iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShkKCktPm9iamVj
dFByb3RvdHlwZSk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXgg
ZTM4ZGM3OS4uZjU3OGMzMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aApAQCAtMTM2LDYgKzEzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVmUHRy
PFN0cnVjdHVyZT4gYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVj
dHVyZT4gYXJyYXlTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBib29s
ZWFuT2JqZWN0U3RydWN0dXJlOworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gYm91bmRG
dW5jdGlvblN0cnVjdHVyZTsKICAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IGNhbGxiYWNr
Q29uc3RydWN0b3JTdHJ1Y3R1cmU7CiAgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBjYWxs
YmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gY2Fs
bGJhY2tPYmplY3RTdHJ1Y3R1cmU7CkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFN0cnVjdHVyZSogYXJndW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
ZCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcnJh
eVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+YXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gZCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVy
ZSogYm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+Ym91bmRGdW5j
dGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29uc3Ry
dWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBkKCktPmNhbGxiYWNrQ29uc3RydWN0b3JT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gZCgpLT5jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMt
ZXhwZWN0ZWQudHh0CmluZGV4IDQ5ODc4ZjIuLjRiZGM0NWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMtZXhwZWN0ZWQu
dHh0CkBAIC00Myw3ICs0Myw3IEBAIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhlbmNv
ZGVVUklDb21wb25lbnQpIGlzIFsnbGVuZ3RoJywgJ25hbWUnXQogUEFTUyBnZXRTb3J0ZWRPd25Q
cm9wZXJ0eU5hbWVzKE9iamVjdCkgaXMgWydjcmVhdGUnLCAnZGVmaW5lUHJvcGVydGllcycsICdk
ZWZpbmVQcm9wZXJ0eScsICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVy
dHlOYW1lcycsICdnZXRQcm90b3R5cGVPZicsICdrZXlzJywgJ2xlbmd0aCcsICduYW1lJywgJ3By
b3RvdHlwZSddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlw
ZSkgaXMgWydfX2RlZmluZUdldHRlcl9fJywgJ19fZGVmaW5lU2V0dGVyX18nLCAnX19sb29rdXBH
ZXR0ZXJfXycsICdfX2xvb2t1cFNldHRlcl9fJywgJ2NvbnN0cnVjdG9yJywgJ2hhc093blByb3Bl
cnR5JywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVT
dHJpbmcnLCAndG9TdHJpbmcnLCAndmFsdWVPZiddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5
TmFtZXMoRnVuY3Rpb24pIGlzIFsnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10KLVBBU1Mg
Z2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhGdW5jdGlvbi5wcm90b3R5cGUpIGlzIFsnYXBwbHkn
LCAnY2FsbCcsICdjb25zdHJ1Y3RvcicsICdsZW5ndGgnLCAnbmFtZScsICd0b1N0cmluZyddCitQ
QVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24ucHJvdG90eXBlKSBpcyBbJ2Fw
cGx5JywgJ2JpbmQnLCAnY2FsbCcsICdjb25zdHJ1Y3RvcicsICdsZW5ndGgnLCAnbmFtZScsICd0
b1N0cmluZyddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoQXJyYXkpIGlzIFsnaXNB
cnJheScsICdsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUnXQogUEFTUyBnZXRTb3J0ZWRPd25Q
cm9wZXJ0eU5hbWVzKEFycmF5LnByb3RvdHlwZSkgaXMgWydjb25jYXQnLCAnY29uc3RydWN0b3In
LCAnZXZlcnknLCAnZmlsdGVyJywgJ2ZvckVhY2gnLCAnaW5kZXhPZicsICdqb2luJywgJ2xhc3RJ
bmRleE9mJywgJ2xlbmd0aCcsICdtYXAnLCAncG9wJywgJ3B1c2gnLCAncmVkdWNlJywgJ3JlZHVj
ZVJpZ2h0JywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc2xpY2UnLCAnc29tZScsICdzb3J0JywgJ3Nw
bGljZScsICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICd1bnNoaWZ0J10KIFBBU1MgZ2V0
U29ydGVkT3duUHJvcGVydHlOYW1lcyhTdHJpbmcpIGlzIFsnZnJvbUNoYXJDb2RlJywgJ2xlbmd0
aCcsICduYW1lJywgJ3Byb3RvdHlwZSddCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pz
L2Z1bmN0aW9uLWJpbmQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlv
bi1iaW5kLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
OTE2ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1i
aW5kLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2IEBACitUZXN0IHRvIGVuc3VyZSBjb3JyZWN0
IGJlaGF2aW91ciBvZiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZAorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBmKCkgaXMgJ2dsb2JhbCcKK1BBU1Mgb2JqLmYoKSBpcyAnbG9j
YWwnCitQQVNTIGcoKSBpcyAnZ2xvYmFsJworUEFTUyBoKCkgaXMgJ2xvY2FsJworUEFTUyBhZGRU
d29Ud28oMywgNCkgaXMgMTEKK1BBU1MgcmVjdC5jb2xvciBpcyAnYmx1ZScKK1BBU1MgcmVjdC5z
aXplIGlzIDEwCitQQVNTIHJlY3QgaW5zdGFuY2VvZiBSZWN0YW5nbGUgaXMgdHJ1ZQorUEFTUyBy
ZWN0IGluc3RhbmNlb2YgQmx1ZVJlY3RhbmdsZSBpcyB0cnVlCitQQVNTIGZ1bjMoMykgaXMgNgor
UEFTUyBmdW41KCkgaXMgJ2ZpcnN0JworUEFTUyBmdW42KCkgaXMgJ2ZpcnN0JworUEFTUyBvZGQy
ID09PSBvZGQxIGlzIHRydWUKK1BBU1Mgb2RkMSgpIGlzICdsb2NhbCcKK1BBU1Mgb2RkMigpIGlz
ICdsb2NhbCcKK1BBU1Mgb2RkM19yZXN1bHQgaXMgJ2xvY2FsJworUEFTUyBvZGQzKCkgaXMgJ2xv
Y2FsJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1iaW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGNlYWJmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvanMvZnVuY3Rpb24tYmluZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9P
YmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0
LXRlc3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLmpzCmluZGV4IDQ3N2YwMjQuLmIwNjU5
NGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL09iamVjdC1n
ZXRPd25Qcm9wZXJ0eU5hbWVzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRl
c3RzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLmpzCkBAIC01MSw3ICs1MSw3IEBAIHZhciBl
eHBlY3RlZFByb3BlcnR5TmFtZXNTZXQgPSB7CiAgICAgIk9iamVjdCI6ICJbJ2NyZWF0ZScsICdk
ZWZpbmVQcm9wZXJ0aWVzJywgJ2RlZmluZVByb3BlcnR5JywgJ2dldE93blByb3BlcnR5RGVzY3Jp
cHRvcicsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgJ2dldFByb3RvdHlwZU9mJywgJ2tleXMnLCAn
bGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10iLAogICAgICJPYmplY3QucHJvdG90eXBlIjog
IlsnX19kZWZpbmVHZXR0ZXJfXycsICdfX2RlZmluZVNldHRlcl9fJywgJ19fbG9va3VwR2V0dGVy
X18nLCAnX19sb29rdXBTZXR0ZXJfXycsICdjb25zdHJ1Y3RvcicsICdoYXNPd25Qcm9wZXJ0eScs
ICdpc1Byb3RvdHlwZU9mJywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ3RvTG9jYWxlU3RyaW5n
JywgJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSIsCiAgICAgIkZ1bmN0aW9uIjogIlsnbGVuZ3RoJywg
J25hbWUnLCAncHJvdG90eXBlJ10iLAotICAgICJGdW5jdGlvbi5wcm90b3R5cGUiOiAiWydhcHBs
eScsICdjYWxsJywgJ2NvbnN0cnVjdG9yJywgJ2xlbmd0aCcsICduYW1lJywgJ3RvU3RyaW5nJ10i
LAorICAgICJGdW5jdGlvbi5wcm90b3R5cGUiOiAiWydhcHBseScsICdiaW5kJywgJ2NhbGwnLCAn
Y29uc3RydWN0b3InLCAnbGVuZ3RoJywgJ25hbWUnLCAndG9TdHJpbmcnXSIsCiAgICAgIkFycmF5
IjogIlsnaXNBcnJheScsICdsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUnXSIsCiAgICAgIkFy
cmF5LnByb3RvdHlwZSI6ICJbJ2NvbmNhdCcsICdjb25zdHJ1Y3RvcicsICdldmVyeScsICdmaWx0
ZXInLCAnZm9yRWFjaCcsICdpbmRleE9mJywgJ2pvaW4nLCAnbGFzdEluZGV4T2YnLCAnbGVuZ3Ro
JywgJ21hcCcsICdwb3AnLCAncHVzaCcsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAncmV2ZXJz
ZScsICdzaGlmdCcsICdzbGljZScsICdzb21lJywgJ3NvcnQnLCAnc3BsaWNlJywgJ3RvTG9jYWxl
U3RyaW5nJywgJ3RvU3RyaW5nJywgJ3Vuc2hpZnQnXSIsCiAgICAgIlN0cmluZyI6ICJbJ2Zyb21D
aGFyQ29kZScsICdsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5cGUnXSIsCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9mdW5jdGlvbi1iaW5kLmpzIGIvTGF5b3V0
VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTU2NWNjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcwpAQCAtMCwwICsxLDc5
IEBACitkZXNjcmlwdGlvbigiVGVzdCB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIgb2YgRnVu
Y3Rpb24ucHJvdG90eXBlLmJpbmQiKTsKKworCisvLyBUaG9zZSBhcmUgdXNlZCBmb3IgbWFueSB0
ZXN0cy4uLgorcHJvcCA9ICJnbG9iYWwiOwordmFyIG9iaiA9IHsgcHJvcDogImxvY2FsIiB9Owor
dmFyIGYgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMucHJvcDsgfQorb2JqLmYgPSBmOworCisK
Ky8vIFNpbXBsZSB1c2UgdG8gYmluZCAndGhpcycKK3Nob3VsZEJlKCJmKCkiLCAiJ2dsb2JhbCci
KTsKK3Nob3VsZEJlKCJvYmouZigpIiwgIidsb2NhbCciKTsKKwordmFyIGcgPSBvYmouZjsKK3No
b3VsZEJlKCJnKCkiLCAiJ2dsb2JhbCciKTsKKwordmFyIGggPSBmLmJpbmQob2JqKTsKK3Nob3Vs
ZEJlKCJoKCkiLCAiJ2xvY2FsJyIpOworCisKKy8vIFNpbXBsZSB1c2UgdG8gY3VycnkgdGhlIHBh
cmFtZXRlcnMKK3ZhciBhZGRlciA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBhICsg
YiArIGMgKyBkOyB9OwordmFyIGFkZFR3b1R3byA9IGFkZGVyLmJpbmQobnVsbCwgMiwgMik7CisK
K3Nob3VsZEJlKCJhZGRUd29Ud28oMywgNCkiLCAiMTEiKTsKKworCisvLyBDb25zdHJ1Y3Rvcgor
dmFyIFJlY3RhbmdsZSA9IGZ1bmN0aW9uKGNvbG9yLCBzaXplKSB7IHRoaXMuY29sb3IgPSBjb2xv
cjsgdGhpcy5zaXplID0gc2l6ZTsgfTsKK3ZhciBCbHVlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlLmJp
bmQobnVsbCwgImJsdWUiKTsKKwordmFyIHJlY3QgPSBuZXcgQmx1ZVJlY3RhbmdsZSgxMCk7CisK
K3Nob3VsZEJlKCJyZWN0LmNvbG9yIiwgIidibHVlJyIpOworc2hvdWxkQmUoInJlY3Quc2l6ZSIs
ICIxMCIpOworc2hvdWxkQmVUcnVlKCJyZWN0IGluc3RhbmNlb2YgUmVjdGFuZ2xlIik7CitzaG91
bGRCZVRydWUoInJlY3QgaW5zdGFuY2VvZiBCbHVlUmVjdGFuZ2xlIik7CisKKworLy8gQmluZCBv
dmVyIGJpbmQKK3ZhciBmdW4xID0gZnVuY3Rpb24oYSwgYiwgYykgeyByZXR1cm4gYSArIGIgKyBj
OyB9OwordmFyIGZ1bjIgPSBmdW4xLmJpbmQobnVsbCwgMSk7Cit2YXIgZnVuMyA9IGZ1bjIuYmlu
ZChudWxsLCAyKTsKKworc2hvdWxkQmUoImZ1bjMoMykiLCAiNiIpOworCisKKy8vIEJpbmQgb3Zl
ciBiaW5kIGtlZXBpbmcgY29udGV4dAordmFyIGZ1bjQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRo
aXMucHJvcDsgfTsKK3ZhciBmdW41ID0gZnVuNC5iaW5kKHsgcHJvcDogImZpcnN0IiB9KTsKK3Zh
ciBmdW42ID0gZnVuNS5iaW5kKHsgcHJvcDogInNlY29uZCIgfSk7CisKK3Nob3VsZEJlKCJmdW41
KCkiLCAiJ2ZpcnN0JyIpOworc2hvdWxkQmUoImZ1bjYoKSIsICInZmlyc3QnIik7ICAvLyBZb3Ug
Y2FuJ3Qgb3ZlcnJpZGUgYm91bmRlZCAndGhpcycKKworCisvLyBUZXN0IHNvbWUgb2RkIGNhc2Vz
IHRvIHByZXZlbnQgb3B0aW1pemF0aW9ucyAoaW1wcm9wZXIgQ2FsbCBGcmFtZQorLy8gcmV3cml0
aW5nKSBicmVhayBjb2RlLiBUaGlzIHdhcyBmb3VuZCBkdXJpbmcgZGV2ZWxvcG1lbnQsIHNvIHdl
IGtlZXAKKy8vIHRvIGF2b2lkIGEgcmVncmVzc2lvbi4KK3ZhciBvZGQxID0gZi5iaW5kKG9iaik7
Cit2YXIgb2RkMiA9IG9kZDE7CisKK29kZDIoKTsKK3Nob3VsZEJlVHJ1ZSgib2RkMiA9PT0gb2Rk
MSIpOworCitzaG91bGRCZSgib2RkMSgpIiwgIidsb2NhbCciKTsKK3Nob3VsZEJlKCJvZGQyKCki
LCAiJ2xvY2FsJyIpOworCit2YXIgb2RkMyA9IGYuYmluZChvYmopOworb2RkMygpOworb2RkMygp
OwordmFyIG9kZDNfcmVzdWx0ID0gb2RkMygpOworCitzaG91bGRCZSgib2RkM19yZXN1bHQiLCAi
J2xvY2FsJyIpOworc2hvdWxkQmUoIm9kZDMoKSIsICInbG9jYWwnIik7CisKKworc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKLS0gCjEuNy4xLjgyLmc3M2Q0MQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108382</attachid>
            <date>2011-09-22 12:20:57 -0700</date>
            <delta_ts>2011-09-22 14:04:56 -0700</delta_ts>
            <desc>New patch, reentrant implementation.</desc>
            <filename>26382.patch</filename>
            <type>text/plain</type>
            <size>79553</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAK
KzIwMTEtMDktMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHByb3ZpZGVzIGEg
YmFzaWMgZnVuY3Rpb25hbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgRnVuY3Rpb24uYmlu
ZC4gSXQgc2hvdWxkIChob3BlZnVsbHkhKSBiZSBmdWxseQorICAgICAgICBmdW5jdGlvbmFsbHkg
Y29ycmVjdCwgYW5kIHRoZSBib3VuZCBmdW5jdGlvbnMgY2FuIGJlCisgICAgICAgIGNhbGxlZCB0
byBxdWlja2x5IChzaW5jZSB0aGV5IGFyZSBhIHN1YmNsYXNzIG9mCisgICAgICAgIEpTRnVuY3Rp
b24sIG5vdCBJbnRlcm5hbEZ1bmN0aW9uKSwgYnV0IHdlJ2xsIHByb2JhYmx5CisgICAgICAgIHdh
bnQgdG8gZm9sbG93IHVwIHdpdGggc29tZSBvcHRpbWl6YXRpb24gd29yayB0byBrZWVwCisgICAg
ICAgIGJvdW5kIGNhbGxzIGluIEpJVCBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
SlNWQUxVRTMyXzY0b25seS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuSlNWQUxVRTY0
b25seS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xv
YmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1
bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpOYXRp
dmVFeGVjdXRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGVydGllcyk6
CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jQmluZCk6CisgICAgICAgICogcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmJvdW5kRnVuY3Rpb25DYWxsKToKKyAgICAgICAg
KEpTQzo6Ym91bmRGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5j
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpoYXNJbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVu
Y3Rpb246OnRhcmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpi
b3VuZFRoaXMpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OmJvdW5kQXJncyk6Cisg
ICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChKU0M6OmNyZWF0ZURlc2NyaXB0b3JGb3JUaHJvd2luZ1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Ym91bmRGdW5jdGlvblN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRV
cFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisKIDIwMTEtMDktMjIgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZ2V0X3Njb3BlZF92YXIgaW4gdGhlIERG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLkpTVkFMVUUzMl82
NG9ubHkuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5KU1ZBTFVFMzJfNjRvbmx5LmV4cAkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0b25seS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEgKzEgQEAKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGExNWdldEhvc3RGdW5jdGlv
bkVQRnhQTlNfOUV4ZWNTdGF0ZUVFCitfX1pOM0pTQzEwSlNGdW5jdGlvbjZjcmVhdGVFUE5TXzlF
eGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmplY3RFaVJLTlNfMTBJZGVudGlmaWVyRVBGeFMyX0VT
OV8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5KU1ZBTFVFNjRv
bmx5LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuSlNWQUxVRTY0b25seS5leHAJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLkpTVkFMVUU2NG9ubHkuZXhwCSh3b3JraW5nIGNvcHkpCkBA
IC0xICsxIEBACi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMTVnZXRIb3N0RnVuY3Rpb25FUEZQdlBO
U185RXhlY1N0YXRlRUUKK19fWk4zSlNDMTBKU0Z1bmN0aW9uNmNyZWF0ZUVQTlNfOUV4ZWNTdGF0
ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVpUktOU18xMElkZW50aWZpZXJFUEZQdlMyX0VTQV8KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTU3
NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAgX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU185
RXhlY1N0YXRlRQogX19aTjNKU0MxMElkZW50aWZpZXI0ZnJvbUVQTlNfOUV4ZWNTdGF0ZUVpCiBf
X1pOM0pTQzEwSWRlbnRpZmllcjRmcm9tRVBOU185RXhlY1N0YXRlRWoKIF9fWk4zSlNDMTBJZGVu
dGlmaWVyOHRvVUludDMyRVJLTlNfN1VTdHJpbmdFUmIKLV9fWk4zSlNDMTBKU0Z1bmN0aW9uMTRm
aW5pc2hDcmVhdGlvbkVQTlNfOUV4ZWNTdGF0ZUVpUktOU18xMElkZW50aWZpZXJFUE5TXzE0RXhl
Y3V0YWJsZUJhc2VFCiBfX1pOM0pTQzEwSlNGdW5jdGlvbjRuYW1lRVBOU185RXhlY1N0YXRlRQog
X19aTjNKU0MxMEpTRnVuY3Rpb242c19pbmZvRQogX19aTjNKU0MxMEpTRnVuY3Rpb25DMUVQTlNf
OUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVQTlNfOVN0cnVjdHVyZUUKQEAgLTIyOSw2
ICsyMjgsNyBAQCBfX1pOM0pTQzI0RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQzFFUk5TCiBfX1pO
M0pTQzI0VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yNnNfaW5mb0UKIF9fWk4zSlNDMjRjcmVhdGVT
dGFja092ZXJmbG93RXJyb3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzI1ZXZhbHVhdGVJbkds
b2JhbENhbGxGcmFtZUVSS05TXzdVU3RyaW5nRVJOU183SlNWYWx1ZUVQTlNfMTRKU0dsb2JhbE9i
amVjdEUKK19fWk4zSlNDMjljYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvckVQTlNfOUV4ZWNT
dGF0ZUUKIF9fWk4zSlNDMzBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb25FTlNfN0pTVmFs
dWVFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25FUE5TXzEy
SlNHbG9iYWxEYXRhRQogX19aTjNKU0M0MWNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRW5h
YmxlZENoZWNrRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xvYmFsT2JqZWN0RVJLTlNfN0FyZ0xp
c3RFUktOU18xMElkZW50aWZpZXJFUktOU183VVN0cmluZ0VpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFk
ZEZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogbmFtZSwgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcihnbG9iYWxFeGVjKCksIG5hbWUpOwotICAgICAgICBwdXRE
aXJlY3QoZ2xvYmFsRGF0YSwgaWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4
ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgYXJndW1lbnRzLCBpZGVudGlmaWVyLCBm
dW5jdGlvbikpOworICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgaWRlbnRpZmllciwgSlNG
dW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgYXJndW1lbnRzLCBpZGVudGlmaWVy
LCBmdW5jdGlvbikpOwogICAgIH0KIH07CiBDT01QSUxFX0FTU0VSVCghSXNJbnRlZ2VyPEdsb2Jh
bE9iamVjdD46OnZhbHVlLCBXVEZfSXNJbnRlZ2VyX0dsb2JhbE9iamVjdF9mYWxzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDYgKzM2MSw4IEBACiAJCTg2RUNBM0VBMTMyREVGMUMwMDJC
MkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4
NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3
IC8qIERGR1Njb3JlQm9hcmQuaCAqLzsgfTsKIAkJODZGMzg4NTkxMjExMzBDQTAwN0E3Q0UzIC8q
IEF0b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RjM4ODU4MTIxMTMwQ0EwMDdBN0NFMyAvKiBBdG9taWNTdHJpbmdIYXNoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODZGQTlF
OTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcg
LyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLzsgfTsKKwkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3
IC8qIEpTQm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5o
ICovOyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0Uz
QjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTkwMjEz
RTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0UzQzEyM0E0MEMyMDBENDIyRjMg
LyogTWVtb3J5U3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkwNUIwMkFFMEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVh
a0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAg
Ki87IH07CkBAIC0xMTE1LDYgKzExMTcsOCBAQAogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcg
LyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlLmg7
IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVD
QTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVCb2Fy
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkYzODg1ODEyMTEzMENBMDA3QTdD
RTMgLyogQXRvbWljU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBdG9taWNTdHJpbmdIYXNoLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZ0hhc2guaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpT
Qm91bmRGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0JvdW5kRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkZBOUU5
MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQm91bmRGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MDIxM0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlTdGF0aXN0aWNzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0MxMjNBNDBDMjAwRDQyMkYz
IC8qIE1lbW9yeVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVtb3J5U3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDVCMDJB
RDBFMjg2NDBGMDA2REY4ODIgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDY2LDYgKzIwNzAsOCBAQAogCQkJCTE0REE4
MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBKU0FjdGl2YXRpb24uaCAqLywKIAkJCQk5M0FERkNFNjBD
Q0JEN0FDMDBEMzBCMDggLyogSlNBcnJheS5jcHAgKi8sCiAJCQkJOTM4NzcyRTUwMzhCRkUxOTAw
ODYzNUNFIC8qIEpTQXJyYXkuaCAqLywKKwkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyog
SlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKKwkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyog
SlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJQTc5MUVGMjcwRjExRTA3OTAwQUUxRjY4IC8qIEpT
Qnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBNzkxRUYyNjBGMTFFMDc5MDBBRTFGNjggLyogSlNCeXRl
QXJyYXkuaCAqLywKIAkJCQlCQzdGOEZCQTBFMTlEMUVGMDA4NjMyQzAgLyogSlNDZWxsLmNwcCAq
LywKQEAgLTI4MTEsNiArMjgxNyw3IEBACiAJCQkJQTc4MUUzNTkxNDE5NzBDNzAwMDk0RDkwIC8q
IFN0b3JhZ2VCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA4Mjc3QTE0MjE2OEQ3MDA5
MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NTZCMDE0
MjdGQjkxMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4
NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTMzMzQsNiArMzM0MSw3IEBACiAJCQkJQzIyQzUzMTMxM0ZBRjZFRjAwQjdEQzBEIC8q
IHN0cnRvZC5jYyBpbiBTb3VyY2VzICovLAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAv
KiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5
NTAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NkZB
OUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1
NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4MjYsMTEgKzM4MjYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRo
dW5rczo6Y3RpU3R1YgogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCi1OYXRp
dmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKK05hdGl2ZUV4ZWN1dGFibGUqIEpJ
VFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKICAgICBz
dGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9o
b3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4o
KSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1
bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihj
dGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBERkc6
Ok5vSW50cmluc2ljKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxE
YXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNU
SU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkp
LCBjb25zdHJ1Y3RvciwgREZHOjpOb0ludHJpbnNpYykpOwogICAgIHJldHVybiBlbnRyeS5maXJz
dC0+c2Vjb25kLmdldCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFsRGF0YSosIFRo
dW5rR2VuZXJhdG9yKTsKIAotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25T
dHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKKyAgICAgICAgTmF0aXZlRXhlY3V0
YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0
RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciwgREZHOjpJbnRyaW5zaWMpOwogCiAgICAgICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVi
cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICAgICBtYWNybyhfX2xvb2t1cFNldHRlcl9fKSBcCiAgICAgbWFjcm8oYXBwbHkpIFwKICAg
ICBtYWNybyhhcmd1bWVudHMpIFwKKyAgICBtYWNybyhiaW5kKSBcCiAgICAgbWFjcm8oY2FsbCkg
XAogICAgIG1hY3JvKGNhbGxlZSkgXAogICAgIG1hY3JvKGNhbGxlcikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAkocmV2aXNpb24gOTU3
NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgQ29uc3RydWN0RGF0YV9oCiAK
ICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiQ2FsbERhdGEuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTQ1LDExICs0Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb25z
dHJ1Y3RUeXBlSlMKICAgICB9OwogCi0gICAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSlNDX0hP
U1RfQ0FMTCAqTmF0aXZlQ29uc3RydWN0b3IpKEV4ZWNTdGF0ZSopOwotCiAgICAgdW5pb24gQ29u
c3RydWN0RGF0YSB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBOYXRpdmVDb25zdHJ1
Y3RvciBmdW5jdGlvbjsKKyAgICAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uOwogICAg
ICAgICB9IG5hdGl2ZTsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwyNSAr
MjI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgCiAgICAgcHJpdmF0ZToKLSNpZiBF
TkFCTEUoSklUKQotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
KQotICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm5h
dGl2ZUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIE5VTV9QQVJBTUVURVJTX0lTX0hPU1QpCi0g
ICAgICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICAgICAsIG1fY29uc3Ry
dWN0b3IoY29uc3RydWN0b3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotI2Vsc2UKICAgICAgICAg
TmF0aXZlRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgICAgIDogRXhl
Y3V0YWJsZUJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5uYXRpdmVFeGVjdXRhYmxlU3RydWN0
dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19JU19IT1NUKQogICAgICAgICAgICAgLCBtX2Z1bmN0
aW9uKGZ1bmN0aW9uKQogICAgICAgICAgICAgLCBtX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKQog
ICAgICAgICB7CiAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG1f
ZnVuY3Rpb247Ci0gICAgICAgIC8vIFByb2JhYmx5IHNob3VsZCBiZSBhIE5hdGl2ZUNvbnN0cnVj
dG9yLCBidXQgdGhpcyB3aWxsIGN1cnJlbnRseSByZXF1aXJlIHJld3JpdGluZyB0aGUgSklUCi0g
ICAgICAgIC8vIHRyYW1wb2xpbmUuIEl0IG1heSBiZSBlYXNpZXIgdG8gbWFrZSBOYXRpdmVGdW5j
dGlvbiBiZSBwYXNzZWQgJ3RoaXMnIGFzIGEgcGFydCBvZiB0aGUgQXJnTGlzdC4KICAgICAgICAg
TmF0aXZlRnVuY3Rpb24gbV9jb25zdHJ1Y3RvcjsKICAgICAgICAgCiAgICAgICAgIERGRzo6SW50
cmluc2ljIG1faW50cmluc2ljOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gOTU3NDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1
ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1N0cmluZ0J1
aWxkZXIuaCIKQEAgLTM2LDYgKzM3LDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChGdW5j
dGlvblByb3RvdAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Q
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRl
Kik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVu
Y0JpbmQoRXhlY1N0YXRlKik7CiAKIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlw
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICA6IEludGVybmFsRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCkBAIC00OCwxNiAr
NTAsMTkgQEAgdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oRQogICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsKIH0KIAotdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0
aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5j
dGlvbioqIGFwcGx5RnVuY3Rpb24pCit2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlv
blByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbikK
IHsKLSAgICBKU0Z1bmN0aW9uKiB0b1N0cmluZ0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b1N0cmluZywgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk7CisgICAgSlNGdW5j
dGlvbiogdG9TdHJpbmdGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgZnVuY3Rpb25Qcm90b0Z1
bmNUb1N0cmluZyk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIHRvU3RyaW5nRnVuY3Rpb24s
IERvbnRFbnVtKTsKIAotICAgICphcHBseUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CisgICAgKmFwcGx5RnVuY3Rpb24g
PSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCAyLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYXBwbHksIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmFwcGx5LCAqYXBwbHlGdW5jdGlvbiwgRG9udEVudW0pOwogCi0gICAgKmNhbGxGdW5jdGlvbiA9
IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJl
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsK
KyAgICAqY2FsbEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCk7
CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOworCisgICAg
SlNGdW5jdGlvbiogYmluZEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJpbmQsIGZ1bmN0aW9uUHJvdG9GdW5j
QmluZCk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgYmluZEZ1bmN0aW9uLCBEb250RW51bSk7CiB9
CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxGdW5jdGlvblByb3Rv
dHlwZShFeGVjU3RhdGUqKQpAQCAtMTUzLDQgKzE1OCw0NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4
ZWMsIHRoaXNWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBleGVjLT5hcmd1bWVudCgwKSwgY2Fs
bEFyZ3MpKTsKIH0KIAorLy8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgKHRoaXNB
cmcgWywgYXJnMSBbLCBhcmcyLCAuLi5dXSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25Qcm90b0Z1bmNCaW5kKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworCisg
ICAgLy8gTGV0IFRhcmdldCBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICBKU1ZhbHVlIHRhcmdldCA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKworICAgIC8vIElmIElzQ2FsbGFibGUoVGFyZ2V0KSBp
cyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgIENhbGxEYXRhIGNhbGxE
YXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodGFyZ2V0LCBjYWxsRGF0
YSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgLy8gUHJpbWl0aXZlIHZhbHVlcyBhcmUgbm90IGNh
bGxhYmxlLgorICAgIEFTU0VSVCh0YXJnZXQuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIHRh
cmdldE9iamVjdCA9IGFzT2JqZWN0KHRhcmdldCk7CisKKyAgICAvLyBMZXQgQSBiZSBhIG5ldyAo
cG9zc2libHkgZW1wdHkpIGludGVybmFsIGxpc3Qgb2YgYWxsIG9mIHRoZSBhcmd1bWVudCB2YWx1
ZXMgcHJvdmlkZWQgYWZ0ZXIgdGhpc0FyZyAoYXJnMSwgYXJnMiBldGMpLCBpbiBvcmRlci4KKyAg
ICBzaXplX3QgbnVtQm91bmRBcmdzID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSA/IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAtIDEgOiAwOworICAgIEpTQXJyYXkqIGJvdW5kQXJncyA9IEpTQXJy
YXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmUoKSwgbnVtQm91bmRBcmdzLCBDcmVhdGVDb21wYWN0KTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUJvdW5kQXJnczsgKytpKQorICAgICAgICBib3VuZEFyZ3MtPnVuY2hlY2tlZFNl
dEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwgZXhlYy0+YXJndW1lbnQoaSArIDEpKTsKKyAg
ICBib3VuZEFyZ3MtPnNldExlbmd0aChudW1Cb3VuZEFyZ3MpOworCisgICAgLy8gSWYgdGhlIFtb
Q2xhc3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBUYXJnZXQgaXMgIkZ1bmN0aW9uIiwgdGhlbiAu
Li4KKyAgICAvLyBFbHNlIHNldCB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIDAuCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBpZiAodGFyZ2V0T2JqZWN0LT5pbmhlcml0cygm
SlNGdW5jdGlvbjo6c19pbmZvKSkgeworICAgICAgICBBU1NFUlQodGFyZ2V0LmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS5pc051bWJlcigpKTsKKyAgICAgICAgLy8gYS4g
TGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0aCBv
ZiBBLgorICAgICAgICAvLyBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBl
aXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMgbGFyZ2VyLgorICAgICAgICB1bnNpZ25lZCB0YXJn
ZXRMZW5ndGggPSAodW5zaWduZWQpdGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICAgICAgaWYgKHRhcmdldExlbmd0
aCA+IG51bUJvdW5kQXJncykKKyAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldExlbmd0aCAtIG51
bUJvdW5kQXJnczsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIG5hbWUoZXhlYywgdGFyZ2V0Lmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkudG9TdHJpbmcoZXhlYykpOworCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgZXhlYy0+YXJndW1lbnQoMCksIGJvdW5kQXJncywg
bGVuZ3RoLCBuYW1lKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lv
biA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxsRnVuY3Rpb24s
IEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBhZGRGdW5jdGlvblBy
b3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0Z1bmN0aW9uKiogY2FsbEZ1
bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChK
U0JvdW5kRnVuY3Rpb24pOworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVu
Y3Rpb25DYWxsKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5k
RnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0JvdW5kRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7
CisKKyAgICBBU1NFUlQoaXNKU0FycmF5KCZleGVjLT5nbG9iYWxEYXRhKCksIGJvdW5kRnVuY3Rp
b24tPmJvdW5kQXJncygpKSk7IC8vIEN1cnJlbnRseSB0aGlzIGlzIHRydWUhCisgICAgSlNBcnJh
eSogYm91bmRBcmdzID0gYXNBcnJheShib3VuZEZ1bmN0aW9uLT5ib3VuZEFyZ3MoKSk7CisKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJn
cy0+Z2V0SW5kZXgoaSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1
bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkp
OworCisgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uID0gYm91bmRGdW5jdGlvbi0+dGFyZ2V0
RnVuY3Rpb24oKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldENhbGxEYXRhKHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNh
bGxUeXBlICE9IENhbGxUeXBlTm9uZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
KGV4ZWMsIHRhcmdldEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJvdW5kRnVuY3Rpb24t
PmJvdW5kVGhpcygpLCBhcmdzKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Ym91bmRGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNCb3VuZEZ1
bmN0aW9uKiBib3VuZEZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oZXhl
Yy0+Y2FsbGVlKCkpOworCisgICAgQVNTRVJUKGlzSlNBcnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBib3VuZEZ1bmN0aW9uLT5ib3VuZEFyZ3MoKSkpOyAvLyBDdXJyZW50bHkgdGhpcyBpcyB0cnVl
IQorICAgIEpTQXJyYXkqIGJvdW5kQXJncyA9IGFzQXJyYXkoYm91bmRGdW5jdGlvbi0+Ym91bmRB
cmdzKCkpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQorICAgICAgICBhcmdzLmFw
cGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMt
PmFyZ3VtZW50KGkpKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IGJvdW5kRnVu
Y3Rpb24tPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRh
OworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEodGFy
Z2V0RnVuY3Rpb24sIGNvbnN0cnVjdERhdGEpOworICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9
IENvbnN0cnVjdFR5cGVOb25lKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVj
dChleGVjLCB0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJn
cykpOworfQorCitKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRhcmdl
dEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNWYWx1ZSBib3VuZEFyZ3MsIGludCBsZW5n
dGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCit7CisgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1
Y3REYXRhOworICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IEpTQzo6Z2V0Q29uc3Ry
dWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CisgICAgYm9vbCBjYW5Db25z
dHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGVOb25lOworCisgICAgTmF0aXZl
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rp
b24oYm91bmRGdW5jdGlvbkNhbGwsIGNhbkNvbnN0cnVjdCA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1
Y3QgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CisgICAgSlNCb3VuZEZ1bmN0aW9u
KiBmdW5jdGlvbiA9IG5ldyAoYWxsb2NhdGVDZWxsPEpTQm91bmRGdW5jdGlvbj4oKmV4ZWMtPmhl
YXAoKSkpIEpTQm91bmRGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
Ym91bmRGdW5jdGlvblN0cnVjdHVyZSgpLCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3Vu
ZEFyZ3MpOworCisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGV4ZWN1dGFibGUs
IGxlbmd0aCwgbmFtZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitib29sIEpTQm91bmRG
dW5jdGlvbjo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKU1Zh
bHVlIHByb3RvKQoreworICAgIC8vIEZJWE1FOiBvdXIgaW5zdGFuY2VvZiBpbXBsZW1lbnRhdGlv
biB3aWxsIGhhdmUgYWxyZWFkeSAoaW5jb3JyZWN0bHkpIHBlcmZvcm1lZAorICAgIC8vIGEgW1tH
ZXRdXSBvZiAucHJvdG90eXBlIGZyb20gdGhlIGJvdW5kIGZ1bmN0aW9uIG9iamVjdCwgd2hpY2gg
aXMgaW5jb3JyZWN0IQorICAgIHByb3RvID0gbV90YXJnZXRGdW5jdGlvbi0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworCisgICAgcmV0dXJuIEpTT2JqZWN0Ojpo
YXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgcHJvdG8pOworfQorCitib29sIEpTQm91bmRGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvcik7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoanNOdWxsKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZUNhbGxlckFjY2Vzc0Vycm9yKTsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bGwoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0JvdW5kRnVuY3Rpb246OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgeworICAgICAgICBjcmVhdGVE
ZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9wZXJ0eShleGVjLCBkZXNjcmlwdG9yLCBTdHJpY3RNb2Rl
QXJndW1lbnRzQWNjZXNzRXJyb3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7
CisgICAgICAgIGNyZWF0ZURlc2NyaXB0b3JGb3JUaHJvd2luZ1Byb3BlcnR5KGV4ZWMsIGRlc2Ny
aXB0b3IsIFN0cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJvcik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTQm91bmRGdW5jdGlvbjo6
SlNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNW
YWx1ZSBib3VuZFRoaXMsIEpTVmFsdWUgYm91bmRBcmdzKQorICAgIDogQmFzZShleGVjLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24oZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCB0YXJnZXRGdW5jdGlvbikKKyAgICAsIG1fYm91bmRUaGlzKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgYm91bmRUaGlzKQorICAgICwgbV9ib3VuZEFyZ3MoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBib3VuZEFyZ3MpCit7Cit9CisKK3ZvaWQgSlNCb3VuZEZ1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZXhlYywgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0JvdW5kRnVuY3Rpb25faAorI2RlZmlu
ZSBKU0JvdW5kRnVuY3Rpb25faAorCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ2Fs
bChFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlv
bkNvbnN0cnVjdChFeGVjU3RhdGUqKTsKKworY2xhc3MgSlNCb3VuZEZ1bmN0aW9uIDogcHVibGlj
IEpTRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOworCisg
ICAgc3RhdGljIEpTQm91bmRGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNWYWx1
ZSBib3VuZEFyZ3MsIGludCwgY29uc3QgSWRlbnRpZmllciYpOworCisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBK
U1ZhbHVlIHByb3RvKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbigpIHsgcmV0dXJu
IG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICBKU1ZhbHVlIGJvdW5kVGhpcygpIHsgcmV0
dXJuIG1fYm91bmRUaGlzLmdldCgpOyB9CisgICAgSlNWYWx1ZSBib3VuZEFyZ3MoKSB7IHJldHVy
biBtX2JvdW5kQXJncy5nZXQoKTsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9i
amVjdCk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7IAorICAgIH0KKworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0hhc0luc3RhbmNlIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CisKK3ByaXZhdGU6CisgICAgSlNCb3VuZEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5k
VGhpcywgSlNWYWx1ZSBib3VuZEFyZ3MpOworICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiwgTmF0aXZlRXhlY3V0YWJsZSosIGludCwgY29uc3QgSWRlbnRpZmllciYpOwor
CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOworICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX2JvdW5kVGhpczsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
bV9ib3VuZEFyZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRnVu
Y3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKQEAgLTU2LDYgKzU3LDIyIEBAIGJvb2wgSlNGdW5jdGlvbjo6aXNIb3N0RnVu
Y3Rpb25Ob25JbmxpbmUKICAgICByZXR1cm4gaXNIb3N0RnVuY3Rpb24oKTsKIH0KIAorSlNGdW5j
dGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZl
RnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9y
KQoreworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleGVjLT5nbG9iYWxEYXRh
KCkuZ2V0SG9zdEZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uLCBuYXRpdmVDb25zdHJ1Y3Rvcik7Cisg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPigq
ZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgLy8gQ2FuJ3QgZG8gdGhpcyBkdXJpbmcgaW5p
dGlhbGl6YXRpb24gYmVjYXVzZSBnZXRIb3N0RnVuY3Rpb24gbWlnaHQgZG8gYSBHQyBhbGxvY2F0
aW9uLgorICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRhYmxlLCBsZW5n
dGgsIG5hbWUpOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworSlNGdW5jdGlvbiogSlNGdW5j
dGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRXhlY3V0YWJsZSog
bmF0aXZlRXhlY3V0YWJsZSkKK3sKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoYWxs
b2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKKyAgICBmdW5j
dGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYywgbmF0aXZlRXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1l
KTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVlB0
clN0ZWFsaW5nSGFja1R5cGUpCiAgICAgOiBCYXNlKFZQdHJTdGVhbGluZ0hhY2spCiB7CkBAIC03
NSw3ICs5Miw3IEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCAKIHsK
IH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKQordm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwpAQCAtODgsNiArMTA1LDkgQEAgdm9pZCBK
U0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdAogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKKworICAgIC8vIFN3aXRjaGluZyB0aGUgc3RydWN0dXJlIGhlcmUgaXMgb25seSBzYWZlIGlm
IHdlIGN1cnJlbnRseSBoYXZlIHRoZSBmdW5jdGlvbiBzdHJ1Y3R1cmUhCisgICAgQVNTRVJUKHN0
cnVjdHVyZSgpID09IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0
dXJlKCkpOwogICAgIHNldFN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHNjb3BlQ2hhaW5O
b2RlLT5nbG9iYWxPYmplY3QtPm5hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgcHV0RGly
ZWN0T2Zmc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVj
dC0+ZnVuY3Rpb25OYW1lT2Zmc2V0KCksIGV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgpKTsKIH0KQEAg
LTk3LDEwICsxMTcsMTAgQEAgSlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24oKQogICAgIEFTU0VSVCh2
cHRyKCkgPT0gSlNHbG9iYWxEYXRhOjpqc0Z1bmN0aW9uVlB0cik7CiB9CiAKLXN0YXRpYyBjb25z
dCBjaGFyKiBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IgPSAiQ2Fubm90IGFjY2VzcyBjYWxs
ZXIgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiI7Ci1zdGF0aWMgY29uc3QgY2hh
ciogU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vycm9yID0gIkNhbm5vdCBhY2Nlc3MgYXJndW1l
bnRzIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24iOworY29uc3QgY2hhciogU3Ry
aWN0TW9kZUNhbGxlckFjY2Vzc0Vycm9yID0gIkNhbm5vdCBhY2Nlc3MgY2FsbGVyIHByb3BlcnR5
IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24iOworY29uc3QgY2hhciogU3RyaWN0TW9kZUFyZ3Vt
ZW50c0FjY2Vzc0Vycm9yID0gIkNhbm5vdCBhY2Nlc3MgYXJndW1lbnRzIHByb3BlcnR5IG9mIGEg
c3RyaWN0IG1vZGUgZnVuY3Rpb24iOwogCi1zdGF0aWMgdm9pZCBjcmVhdGVEZXNjcmlwdG9yRm9y
VGhyb3dpbmdQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgY29uc3QgY2hhciogbWVzc2FnZSkKK3ZvaWQgY3JlYXRlRGVzY3JpcHRvckZvclRo
cm93aW5nUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgSlNWYWx1ZSB0aHJvd2VyID0gY3Jl
YXRlVHlwZUVycm9yRnVuY3Rpb24oZXhlYywgbWVzc2FnZSk7CiAgICAgZGVzY3JpcHRvci5zZXRB
Y2Nlc3NvckRlc2NyaXB0b3IodGhyb3dlciwgdGhyb3dlciwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgR2V0dGVyIHwgU2V0dGVyKTsKQEAgLTE5Niw3ICsyMTYsNyBAQCBib29sIEpTRnVuY3Rpb246
OmdldE93blByb3BlcnR5U2xvdChFeGVjCiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKGpzRXhlY3V0YWJsZSgp
LT5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIkNh
bid0IGFjY2VzcyBhcmd1bWVudHMgb2JqZWN0IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24iKTsK
KyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nl
c3NFcnJvcik7CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVsbCgpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMzggKzQx
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAorICAgIGV4dGVy
biBjb25zdCBjaGFyKiBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3I7CisgICAgZXh0ZXJuIGNv
bnN0IGNoYXIqIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvcjsKKworICAgIHZvaWQgY3Jl
YXRlRGVzY3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworCiAgICAgY2xh
c3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVyYXRvcjsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKIAotICAgICAgICBKU0Z1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7Ci0gICAgICAgIEpTRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgU2NvcGVDaGFpbk5vZGUqKTsK
LSAgICAgICAgCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKIAotICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGlu
dCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1
bmN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5nbG9iYWxP
YmplY3QoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9
PSBnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSA9IChFeGVjdXRhYmxlQmFzZSopZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhv
c3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbik7Ci0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5j
dGlvbiA9IG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0Z1
bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIC8vIENh
bid0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0SG9zdEZ1bmN0aW9u
IG1pZ2h0IGRvIGEgR0MgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hD
cmVhdGlvbihleGVjLCBsZW5ndGgsIG5hbWUsIGV4ZWN1dGFibGUpOwotICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRp
dmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpOwotCi0gICAgICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVj
LT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihleGVjLCBsZW5ndGgsIG5hbWUsIChF
eGVjdXRhYmxlQmFzZSopbmF0aXZlRXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb247Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBOYXRp
dmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yKTsKKyAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUpOwogCiAgICAgICAg
IHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogICAgICAgICB7
CkBAIC0xNDAsMTcgKzEyMywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVy
ZUZsYWdzOwogCi0gICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgaW50IGxl
bmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY3V0YWJsZUJhc2UqKTsKKyAgICAgICAg
SlNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAg
ICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uRXhlY3V0YWJsZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSosIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KTsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1
dGFibGUqLCBTY29wZUNoYWluTm9kZSopOwogCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZXhwbGljaXQgSlNGdW5jdGlvbihWUHRyU3RlYWxpbmdI
YWNrVHlwZSk7CiAKICAgICAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpIGNvbnN0
OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk1
NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk1LDE4ICszOTUsMTggQEAgSlNHbG9iYWxEYXRhKiYgSlNHbG9i
YWxEYXRhOjpzaGFyZWRJbnN0YQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLU5hdGl2ZUV4ZWN1dGFi
bGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9u
KQorTmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewotICAgIHJl
dHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlvbik7CisgICAgcmV0
dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKHRoaXMsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rv
cik7CiB9CiBOYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5jdGlvbihO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBERkc6Oklu
dHJpbnNpYyBpbnRyaW5zaWMpCiB7CiAgICAgcmV0dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25T
dHViKHRoaXMsIGZ1bmN0aW9uLCBnZW5lcmF0b3IsIGludHJpbnNpYyk7CiB9CiAjZWxzZQotTmF0
aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rp
b24gZnVuY3Rpb24pCitOYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERhdGE6OmdldEhvc3RGdW5j
dGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Ip
CiB7Ci0gICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqdGhpcywgZnVuY3Rpb24s
IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKKyAgICByZXR1cm4gTmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKCp0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShy
ZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5h
dGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMpOwogI2VuZGlmCi0g
ICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbik7
CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlv
biwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwogCiAgICAgICAgIFRpbWVvdXRDaGVja2Vy
IHRpbWVvdXRDaGVja2VyOwogICAgICAgICBUZXJtaW5hdG9yIHRlcm1pbmF0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkVy
cm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC0xODcsMTEgKzE4OCwxMiBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUo
ZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBi
ZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KICAgICBtX2Z1bmN0aW9uU3Ry
dWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpKTsKKyAgICBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9uYW1lZEZ1bmN0
aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblN0cnVjdHVy
ZS5nZXQoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUsIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBtX2Z1bmN0aW9uTmFtZU9mZnNldCkpOwogICAg
IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1
bmN0aW9uID0gMDsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gMDsKLSAgICBtX2Z1
bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgbV9mdW5j
dGlvblN0cnVjdHVyZS5nZXQoKSwgJmNhbGxGdW5jdGlvbiwgJmFwcGx5RnVuY3Rpb24pOworICAg
IG1fZnVuY3Rpb25Qcm90b3R5cGUtPmFkZEZ1bmN0aW9uUHJvcGVydGllcyhleGVjLCB0aGlzLCAm
Y2FsbEZ1bmN0aW9uLCAmYXBwbHlGdW5jdGlvbik7CiAgICAgbV9jYWxsRnVuY3Rpb24uc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgY2FsbEZ1bmN0aW9uKTsKICAgICBtX2FwcGx5RnVuY3Rp
b24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYXBwbHlGdW5jdGlvbik7CiAgICAgbV9v
YmplY3RQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgT2JqZWN0UHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSkpKTsKQEAgLTI4MCw3ICsyODIsNyBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJU
eXBlRXJyb3IiKSwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihleGVjLCAiVVJJRXJyb3IiKSwgbV9VUklFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51
bSk7CiAKLSAgICBtX2V2YWxGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwg
MSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIGdsb2JhbEZ1bmNFdmFsKSk7CisgICAgbV9l
dmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5j
RXZhbCkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250
RW51bSk7CiAKICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewpAQCAt
MzQ5LDYgKzM1MSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFYK
ICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1
cmUpOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJm1fZXJyb3JTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJm1fZnVuY3Rpb25TdHJ1Y3R1cmUpOworICAgIHZpc2l0
SWZOZWVkZWQodmlzaXRvciwgJm1fYm91bmRGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgdmlzaXRJ
Zk5lZWRlZCh2aXNpdG9yLCAmbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlKTsKICAgICB2aXNpdElm
TmVlZGVkKHZpc2l0b3IsICZtX251bWJlck9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRJZk5l
ZWRlZCh2aXNpdG9yLCAmbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0
dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Vycm9yU3RydWN0dXJlOwog
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Z1bmN0aW9uU3RydWN0dXJlOworICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmU7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZTsK
ICAgICAgICAgc2l6ZV90IG1fZnVuY3Rpb25OYW1lT2Zmc2V0OwogICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX251bWJlck9iamVjdFN0cnVjdHVyZTsKQEAgLTIyOCw2ICsyMjksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBudWxsUHJvdG90eXBlT2JqZWN0
U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJl
LmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX2Vycm9yU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogZnVuY3Rp
b25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9
CisgICAgICAgIFN0cnVjdHVyZSogYm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUq
IG5hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25hbWVkRnVuY3Rpb25T
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTmFtZU9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25OYW1lT2Zmc2V0OyB9CiAgICAgICAgIFN0cnVjdHVyZSog
bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcAkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsMTAgQEAgdm9pZCBzZXRVcFN0
YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdGhpc09iai0+Z2xvYmFsT2JqZWN0KCk7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICAgICAgaWYgKGVudHJ5LT5nZW5lcmF0b3IoKSB8fCBlbnRyeS0+aW50cmluc2ljKCkgIT0gREZH
OjpOb0ludHJpbnNpYykKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBl
bnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCku
Z2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9yKCksIGVu
dHJ5LT5pbnRyaW5zaWMoKSkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVy
dHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlv
bigpLCBlbnRyeS0+Z2VuZXJhdG9yKCksIGVudHJ5LT5pbnRyaW5zaWMoKSkpOwogICAgICAgICBl
bHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRy
eS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7Cisg
ICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QsIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlv
bigpKTsKIAogICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsIGZ1bmN0aW9uLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAgbG9j
YXRpb24gPSB0aGlzT2JqLT5nZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTc0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDExLTA5
LTIyICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9qcy9mdW5jdGlvbi1iaW5kLmh0
bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5n
U3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9u
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rp
b25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25H
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVsb2FkRnVuY3Rpb25HZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKToK
KyAgICAgICAgICAgIC0gRnVuY3Rpb246OmNyZWF0ZSBubyBsb25nZXIgcmVxdWlyZXMgZnVuY3Rp
b25TdHJ1Y3R1cmUoKSB0byBiZSBwYXNzZWQuCiAyMDExLTA5LTIyICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njg2MzgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgRnJh
bWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIAogSlNWYWx1ZSBvYmplY3RUb1N0
cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5j
VG9TdHJpbmcpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3Ry
aW5nKTsKIH0KIAogU3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShy
ZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIEpTRE9NV2lu
ZG93Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpCiB0ZW1wbGF0ZTxOYXRpdmVGdW5jdGlvbiBuYXRp
dmVGdW5jdGlvbiwgaW50IGxlbmd0aD4KIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
U3RydWN0dXJlKCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7CisgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBK
U1ZhbHVlIGNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDk1NzQwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTcgKzQwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0
eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CisgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIHByb3Bl
cnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKIH0KIAogc3RhdGljIEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9w
ZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CisgICAgcmV0dXJu
IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAs
IHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKTsKIH0KIAog
c3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
cHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdvKTsKKyAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMSwg
cHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdvKTsKIH0KIAogYm9vbCBK
U0hpc3Rvcnk6OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2
aXNpb24gOTU3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJl
cGxhY2UpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5j
dGlvblJlcGxhY2UpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljUmVsb2Fk
RnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBl
RnVuY3Rpb25SZWxvYWQpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90
b3R5cGVGdW5jdGlvblJlbG9hZCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0
aWNBc3NpZ25GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Q
cm90b3R5cGVGdW5jdGlvbkFzc2lnbik7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDEsIHByb3BlcnR5TmFtZSwganNMb2Nh
dGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsKIH0KIAogYm9vbCBKU0xvY2F0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3
NDEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0
MyBAQAorMjAxMS0wOS0yMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjM4MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIG5vdyBwYXNzIEZ1bmN0
aW9uLmJpbmQgdGVzdHMuCisKKyAgICAgICAgKiBmYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0
eU5hbWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL2Jhc2ljLXN0cmljdC1tb2Rl
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL2Z1bmN0aW9uLWJpbmQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2Z1bmN0aW9uLWJpbmQuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9tb3ppbGxhL3N0cmljdC8xNS4zLjQuNS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qczogQWRkZWQu
CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMi4zLjMtNC0zOC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMC0xLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0w
LTItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMu
NC41LTEzLmItMS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3Jp
cHQvMTUuMy40LjUtMTMuYi0yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVz
dGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItNC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi01LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xNS0xLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xNS0yLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0x
Ni0xLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4z
LjQuNS0yLTEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0
LzE1LjMuNC41LTItMi1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFz
Y3JpcHQvMTUuMy40LjUtMi0zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdC8xNS4zLjQuNS0yLTQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNl
bnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0
ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi02LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTctZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItOC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi05LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS04LTEtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTgt
Mi1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40
LjUtOS0xLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8x
NS4zLjQuNS05LTItZXhwZWN0ZWQudHh0OgorCiAyMDExLTA5LTIyICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njg2NDUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blBy
b3BlcnR5TmFtZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvT2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvT2JqZWN0LWdldE93blByb3BlcnR5TmFtZXMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIFBBU1MgZ2V0U29ydGVk
T3duUHJvcGVydHlOYW1lcyhlbmNvZGVVUkkKIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1l
cyhPYmplY3QpIGlzIFsnY3JlYXRlJywgJ2RlZmluZVByb3BlcnRpZXMnLCAnZGVmaW5lUHJvcGVy
dHknLCAnZnJlZXplJywgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsICdnZXRPd25Qcm9wZXJ0
eU5hbWVzJywgJ2dldFByb3RvdHlwZU9mJywgJ2lzRXh0ZW5zaWJsZScsICdpc0Zyb3plbicsICdp
c1NlYWxlZCcsICdrZXlzJywgJ2xlbmd0aCcsICduYW1lJywgJ3ByZXZlbnRFeHRlbnNpb25zJywg
J3Byb3RvdHlwZScsICdzZWFsJ10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhPYmpl
Y3QucHJvdG90eXBlKSBpcyBbJ19fZGVmaW5lR2V0dGVyX18nLCAnX19kZWZpbmVTZXR0ZXJfXycs
ICdfX2xvb2t1cEdldHRlcl9fJywgJ19fbG9va3VwU2V0dGVyX18nLCAnY29uc3RydWN0b3InLCAn
aGFzT3duUHJvcGVydHknLCAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScs
ICd0b0xvY2FsZVN0cmluZycsICd0b1N0cmluZycsICd2YWx1ZU9mJ10KIFBBU1MgZ2V0U29ydGVk
T3duUHJvcGVydHlOYW1lcyhGdW5jdGlvbikgaXMgWydsZW5ndGgnLCAnbmFtZScsICdwcm90b3R5
cGUnXQotUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEZ1bmN0aW9uLnByb3RvdHlwZSkg
aXMgWydhcHBseScsICdjYWxsJywgJ2NvbnN0cnVjdG9yJywgJ2xlbmd0aCcsICduYW1lJywgJ3Rv
U3RyaW5nJ10KK0ZBSUwgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1lcyhGdW5jdGlvbi5wcm90b3R5
cGUpIHNob3VsZCBiZSBhcHBseSxjYWxsLGNvbnN0cnVjdG9yLGxlbmd0aCxuYW1lLHRvU3RyaW5n
LiBXYXMgYXBwbHksYmluZCxjYWxsLGNvbnN0cnVjdG9yLGxlbmd0aCxuYW1lLHRvU3RyaW5nLgog
UEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKEFycmF5KSBpcyBbJ2lzQXJyYXknLCAnbGVu
Z3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10KIFBBU1MgZ2V0U29ydGVkT3duUHJvcGVydHlOYW1l
cyhBcnJheS5wcm90b3R5cGUpIGlzIFsnY29uY2F0JywgJ2NvbnN0cnVjdG9yJywgJ2V2ZXJ5Jywg
J2ZpbHRlcicsICdmb3JFYWNoJywgJ2luZGV4T2YnLCAnam9pbicsICdsYXN0SW5kZXhPZicsICds
ZW5ndGgnLCAnbWFwJywgJ3BvcCcsICdwdXNoJywgJ3JlZHVjZScsICdyZWR1Y2VSaWdodCcsICdy
ZXZlcnNlJywgJ3NoaWZ0JywgJ3NsaWNlJywgJ3NvbWUnLCAnc29ydCcsICdzcGxpY2UnLCAndG9M
b2NhbGVTdHJpbmcnLCAndG9TdHJpbmcnLCAndW5zaGlmdCddCiBQQVNTIGdldFNvcnRlZE93blBy
b3BlcnR5TmFtZXMoU3RyaW5nKSBpcyBbJ2Zyb21DaGFyQ29kZScsICdsZW5ndGgnLCAnbmFtZScs
ICdwcm90b3R5cGUnXQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9iYXNpYy1zdHJpY3QtbW9k
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9iYXNpYy1z
dHJpY3QtbW9kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9iYXNpYy1zdHJpY3QtbW9kZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDEzICs1NiwxMyBAQCBQQVNTIChmdW5jdGlvbiAoKXsndXNlIHN0cmljdCc7IHdpdGgoMSl7
CiBQQVNTIChmdW5jdGlvbigpeyhmdW5jdGlvbiAoKXsndXNlIHN0cmljdCc7IHdpdGgoMSl7fTt9
KX0pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogJ3dpdGgnIHN0YXRlbWVudHMgYXJlIG5v
dCB2YWxpZCBpbiBzdHJpY3QgbW9kZS4KIFBBU1MgKGZ1bmN0aW9uICgpeyd1c2Ugc3RyaWN0Jzsg
YXJndW1lbnRzLmNhbGxlZTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBVbmFibGUg
dG8gYWNjZXNzIGNhbGxlZSBvZiBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9u
ICgpeyd1c2Ugc3RyaWN0JzsgYXJndW1lbnRzLmNhbGxlcjsgfSkoKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBVbmFibGUgdG8gYWNjZXNzIGNhbGxlciBvZiBzdHJpY3QgbW9kZSBmdW5jdGlv
bi4KLVBBU1MgKGZ1bmN0aW9uIGYoKXsndXNlIHN0cmljdCc7IGYuYXJndW1lbnRzOyB9KSgpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbid0IGFjY2VzcyBhcmd1bWVudHMgb2JqZWN0IG9m
IGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCitQQVNTIChmdW5jdGlvbiBmKCl7J3VzZSBzdHJpY3Qn
OyBmLmFyZ3VtZW50czsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgYWNj
ZXNzIGFyZ3VtZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLgogUEFTUyAo
ZnVuY3Rpb24gZigpeyd1c2Ugc3RyaWN0JzsgZi5jYWxsZXI7IH0pKCkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBjYWxsZXIgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9k
ZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9uIGYoKXsndXNlIHN0cmljdCc7IGYuYXJndW1lbnRz
PTU7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBhcmd1bWVu
dHMgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9uIGYo
KXsndXNlIHN0cmljdCc7IGYuY2FsbGVyPTU7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQ2Fubm90IGFjY2VzcyBjYWxsZXIgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlv
bi4KIFBBU1MgKGZ1bmN0aW9uIChhcmcpeyd1c2Ugc3RyaWN0JzsgYXJndW1lbnRzLmNhbGxlZTsg
fSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBVbmFibGUgdG8gYWNjZXNzIGNhbGxlZSBv
ZiBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9uIChhcmcpeyd1c2Ugc3RyaWN0
JzsgYXJndW1lbnRzLmNhbGxlcjsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBVbmFi
bGUgdG8gYWNjZXNzIGNhbGxlciBvZiBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KLVBBU1MgKGZ1bmN0
aW9uIGYoYXJnKXsndXNlIHN0cmljdCc7IGYuYXJndW1lbnRzOyB9KSgpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IENhbid0IGFjY2VzcyBhcmd1bWVudHMgb2JqZWN0IG9mIGEgc3RyaWN0IG1v
ZGUgZnVuY3Rpb24uCitQQVNTIChmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3QnOyBmLmFyZ3Vt
ZW50czsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgYWNjZXNzIGFyZ3Vt
ZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLgogUEFTUyAoZnVuY3Rpb24g
Zihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5jYWxsZXI7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogQ2Fubm90IGFjY2VzcyBjYWxsZXIgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5j
dGlvbi4KIFBBU1MgKGZ1bmN0aW9uIGYoYXJnKXsndXNlIHN0cmljdCc7IGYuYXJndW1lbnRzPTU7
IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBhcmd1bWVudHMg
cHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9uIGYoYXJn
KXsndXNlIHN0cmljdCc7IGYuY2FsbGVyPTU7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQ2Fubm90IGFjY2VzcyBjYWxsZXIgcHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlv
bi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1iaW5kLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3RzIEZ1bmN0aW9u
LmJpbmQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlc3VsdCBpcyAi
W29iamVjdCBET01XaW5kb3ddIC0+IHg6MSwgeToyIgorUEFTUyByZXN1bHQgaXMgIltvYmplY3Qg
T2JqZWN0XSAtPiB4OjEsIHk6MiIKK1BBU1MgcmVzdWx0IGlzICInYScgLT4geDonYicsIHk6MSIK
K1BBU1MgcmVzdWx0IGlzICJbb2JqZWN0IE9iamVjdF0gLT4geDonYicsIHk6MSIKK1BBU1MgZiBp
bnN0YW5jZW9mIEYgaXMgdHJ1ZQorUEFTUyBmIGluc3RhbmNlb2YgRyBpcyB0cnVlCitQQVNTIGcg
aW5zdGFuY2VvZiBGIGlzIHRydWUKK1BBU1MgZyBpbnN0YW5jZW9mIEcgaXMgdHJ1ZQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9mdW5jdGlvbi1iaW5kLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmlu
ZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL21v
emlsbGEvc3RyaWN0LzE1LjMuNC41LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL21vemlsbGEvc3RyaWN0LzE1LjMuNC41LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL21vemlsbGEvc3RyaWN0LzE1LjMuNC41
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDE3IEBACi1DT05TT0xFIE1F
U1NBR0U6IGxpbmUgMTI6IFR5cGVFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGEgZnVuY3Rpb24g
KGV2YWx1YXRpbmcgJ3N0cmljdC5iaW5kKHRydWUpJykKLUZBSUwgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBl
IHVuZGVmaW5lZCkuCitQQVNTIHRydWUgPT09IHRydWUKK1BBU1MgNDIgPT09IDQyCitQQVNTICA9
PT0gCitQQVNTIG51bGwgPT09IG51bGwKK1BBU1MgdW5kZWZpbmVkID09PSB1bmRlZmluZWQKK1BB
U1MgW29iamVjdCBPYmplY3RdID09PSBbb2JqZWN0IE9iamVjdF0KK1BBU1MgdHJ1ZSA9PT0gdHJ1
ZQorUEFTUyB0cnVlID09PSB0cnVlCitQQVNTIHRydWUgPT09IHRydWUKK1BBU1MgW29iamVjdCBE
T01XaW5kb3ddID09PSBbb2JqZWN0IERPTVdpbmRvd10KK1BBU1MgW29iamVjdCBET01XaW5kb3dd
ID09PSBbb2JqZWN0IERPTVdpbmRvd10KK1BBU1MgW29iamVjdCBPYmplY3RdID09PSBbb2JqZWN0
IE9iamVjdF0KKyBQQVNTRUQhIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1
bmN0aW9uLWJpbmQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQt
dGVzdHMvZnVuY3Rpb24tYmluZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjggQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBGdW5jdGlvbi5iaW5kLiIpOworCit2YXIgcmVzdWx0
OworCitmdW5jdGlvbiBGKHgsIHkpCit7CisgICAgcmVzdWx0ID0gdGhpcyArICIgLT4geDoiICsg
eCArICIsIHk6IiArIHk7Cit9CisKK0cgPSBGLmJpbmQoIidhJyIsICInYiciKTsKKworRigxLDIp
Oworc2hvdWxkQmUoInJlc3VsdCIsICciW29iamVjdCBET01XaW5kb3ddIC0+IHg6MSwgeToyIicp
OwordmFyIGYgPSBuZXcgRigxLDIpOworc2hvdWxkQmUoInJlc3VsdCIsICciW29iamVjdCBPYmpl
Y3RdIC0+IHg6MSwgeToyIicpOworRygxLDIpOworc2hvdWxkQmUoInJlc3VsdCIsICciXCdhXCcg
LT4geDpcJ2JcJywgeToxIicpOwordmFyIGcgPSBuZXcgRygxLDIpOworc2hvdWxkQmUoInJlc3Vs
dCIsICciW29iamVjdCBPYmplY3RdIC0+IHg6XCdiXCcsIHk6MSInKTsKKworLy8gT2JqZWN0cyBm
ICYgZyBhcmUgYm90aCBhY3R1YWxseSBpbnN0YW5jZXMgb2YgRiwgRydzIEhhc0luc3RhbmNlIG1l
dGhvZAorLy8gYWN0dWFsbHkgaXMgY2hlY2tpbmcgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4g
aW5zdGFuY2Ugb2YgRiEKK3Nob3VsZEJlVHJ1ZSgnZiBpbnN0YW5jZW9mIEYnKTsKK3Nob3VsZEJl
VHJ1ZSgnZiBpbnN0YW5jZW9mIEcnKTsKK3Nob3VsZEJlVHJ1ZSgnZyBpbnN0YW5jZW9mIEYnKTsK
K3Nob3VsZEJlVHJ1ZSgnZyBpbnN0YW5jZW9mIEcnKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4y
LjMuMy00LTM4LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4yLjMuMy00LTM4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3
NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4yLjMuMy00LTM4
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAgT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiAKIFBBU1MgRVM1SGFybmVzcy5wcmVjb25k
aXRpb25QYXNzZWQgaXMgdHJ1ZQotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJl
IHRydWUuIFdhcyBmYWxzZS4KK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5
b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMC0xLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4z
LjQuNS0wLTEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2ll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTAtMS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTQsNyArNCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEEKIAogCiBQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKLUZB
SUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4p
LiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MudGVz
dFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1Qg
Q09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMu
NC41LTAtMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2Vu
dGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDAp
CisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0wLTItZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxk
IGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZp
bmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQogRkFJTCBF
UzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdh
cyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIApJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMi0xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0
MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItMS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91
bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRl
ZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5
cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1
SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQ
YXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENP
TVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQu
NS0yLTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRl
ci9KYXZhc2NyaXB0LzE1LjMuNC41LTItMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQor
KysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi0yLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBi
ZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5l
ZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBi
b29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJu
ZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3Nl
ZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExF
VEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTIt
My1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0ph
dmFzY3JpcHQvMTUuMy40LjUtMi0zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBM
YXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRy
dWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4K
LUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xl
YW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3Mu
cHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlz
IHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJ
bmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi00LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC8xNS4zLjQuNS0yLTQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91
dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAo
b2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJ
TCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbiku
IFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVj
b25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1
ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4
OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTUtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0
LzE1LjMuNC41LTItNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVz
dHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi01LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAog
Ci1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0
eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVT
NUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2Fz
IHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRp
dGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExh
eW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMi02LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9p
ZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTYtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZB
SUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUg
Ym9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFy
bmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5k
ZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9u
UGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0
VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi03LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQu
NS0yLTctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVz
dGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBF
UzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29s
ZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNz
LnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmlu
ZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNz
ZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTgtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTIt
OC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2Vu
dGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi04LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhh
cm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4p
LiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVz
dFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAo
b2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBp
cyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2ll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItOS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi05LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdC8xNS4zLjQuNS0yLTktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0z
LDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVz
cy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdh
cyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFz
c2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0
eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRy
dWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0
Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOC0xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS04LTEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZh
c2NyaXB0LzE1LjMuNC41LTgtMS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCAr
Myw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnBy
ZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVu
ZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQg
c2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUg
dW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQor
UEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50
ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS04LTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTgtMi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3Jp
cHQvMTUuMy40LjUtOC0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDgg
QEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29u
ZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZp
bmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91
bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRl
ZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNT
IEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9K
YXZhc2NyaXB0LzE1LjMuNC41LTktMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOS0xLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8x
NS4zLjQuNS05LTEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAog
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRp
b25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQg
KG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBi
ZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5l
ZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1
SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFz
Y3JpcHQvMTUuMy40LjUtOS0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS05LTItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMu
NC41LTktMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBh
c3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2Yg
dHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRy
dWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4K
K1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJu
ZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC8xNS4zLjQuNS0xMy5iLTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItMS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMTMuYi0xLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAK
IE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0
aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVk
IChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQg
YmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmlu
ZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVT
NUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZh
c2NyaXB0LzE1LjMuNC41LTEzLmItMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi0yLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC8xNS4zLjQuNS0xMy5iLTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMs
OCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVj
b25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRl
ZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNo
b3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVu
ZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BB
U1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVy
L0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi0zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZh
c2NyaXB0LzE1LjMuNC41LTEzLmItMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMs
OCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNz
LnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2Fz
IHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNz
ZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5
cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1
ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItNC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVy
L0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi00LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhh
cm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4p
LiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVz
dFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAo
b2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBp
cyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2ll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItNS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTMu
Yi01LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwg
RVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9v
bGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVz
cy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZp
bmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFz
c2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTUtMS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUt
MTUtMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0
Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTUtMS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBF
UzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29s
ZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNz
LnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmlu
ZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNz
ZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xNS0yLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0x
NS0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xNS0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVT
NUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xl
YW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3Mu
dGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5l
ZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3Nl
ZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3Rz
L2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTE2LTEtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTE2
LTEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNl
bnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTE2LTEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1
SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVh
bikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50
ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVk
IChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2Vk
IGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQo=
</data>
<flag name="review"
          id="105329"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="105334"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108399</attachid>
            <date>2011-09-22 14:04:56 -0700</date>
            <delta_ts>2011-09-23 03:21:30 -0700</delta_ts>
            <desc>Build fixes, GC fixes, added more test cases, fix for recursive hasInstance</desc>
            <filename>26382.2.patch</filename>
            <type>text/plain</type>
            <size>87964</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAK
KzIwMTEtMDktMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHByb3ZpZGVzIGEg
YmFzaWMgZnVuY3Rpb25hbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgRnVuY3Rpb24uYmlu
ZC4gSXQgc2hvdWxkIChob3BlZnVsbHkhKSBiZSBmdWxseQorICAgICAgICBmdW5jdGlvbmFsbHkg
Y29ycmVjdCwgYW5kIHRoZSBib3VuZCBmdW5jdGlvbnMgY2FuIGJlCisgICAgICAgIGNhbGxlZCB0
byBxdWlja2x5IChzaW5jZSB0aGV5IGFyZSBhIHN1YmNsYXNzIG9mCisgICAgICAgIEpTRnVuY3Rp
b24sIG5vdCBJbnRlcm5hbEZ1bmN0aW9uKSwgYnV0IHdlJ2xsIHByb2JhYmx5CisgICAgICAgIHdh
bnQgdG8gZm9sbG93IHVwIHdpdGggc29tZSBvcHRpbWl6YXRpb24gd29yayB0byBrZWVwCisgICAg
ICAgIGJvdW5kIGNhbGxzIGluIEpJVCBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
SlNWQUxVRTMyXzY0b25seS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuSlNWQUxVRTY0
b25seS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAg
ICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xv
YmFsT2JqZWN0OjphZGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAqIHJ1
bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpOYXRp
dmVFeGVjdXRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGVydGllcyk6
CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jQmluZCk6CisgICAgICAgICogcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmJvdW5kRnVuY3Rpb25DYWxsKToKKyAgICAgICAg
KEpTQzo6Ym91bmRGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5j
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpoYXNJbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVu
Y3Rpb246OnRhcmdldEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpi
b3VuZFRoaXMpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OmJvdW5kQXJncyk6Cisg
ICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChKU0M6OmNyZWF0ZURlc2NyaXB0b3JGb3JUaHJvd2luZ1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Ym91bmRGdW5jdGlvblN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRV
cFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisKIDIwMTEtMDktMjIgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZ2V0X3Njb3BlZF92YXIgaW4gdGhlIERG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTU3NDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRp
bWUvSlNCeXRlQXJyYXkuY3BwCiAgICAgcnVudGltZS9KU0NlbGwuY3BwCiAgICAgcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAorICAgIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAogICAgIHJ1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCiAgICAg
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcs
NiArMzQ3LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5KU1ZBTFVFMzJfNjRvbmx5LmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0b25s
eS5leHAJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLkpTVkFMVUUzMl82NG9ubHkuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi1f
X1pOM0pTQzEySlNHbG9iYWxEYXRhMTVnZXRIb3N0RnVuY3Rpb25FUEZ4UE5TXzlFeGVjU3RhdGVF
RQorX19aTjNKU0MxMEpTRnVuY3Rpb242Y3JlYXRlRVBOU185RXhlY1N0YXRlRVBOU18xNEpTR2xv
YmFsT2JqZWN0RWlSS05TXzEwSWRlbnRpZmllckVQRnhTMl9FUzlfCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuSlNWQUxVRTY0b25seS5leHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLkpTVkFMVUU2NG9ubHkuZXhw
CShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5KU1ZBTFVFNjRvbmx5LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotX19aTjNKU0Mx
MkpTR2xvYmFsRGF0YTE1Z2V0SG9zdEZ1bmN0aW9uRVBGUHZQTlNfOUV4ZWNTdGF0ZUVFCitfX1pO
M0pTQzEwSlNGdW5jdGlvbjZjcmVhdGVFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNHbG9iYWxPYmpl
Y3RFaVJLTlNfMTBJZGVudGlmaWVyRVBGUHZTMl9FU0FfCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw2IEBAIF9fWk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlND
MTBJZGVudGlmaWVyNGZyb21FUE5TXzlFeGVjU3RhdGVFaQogX19aTjNKU0MxMElkZW50aWZpZXI0
ZnJvbUVQTlNfOUV4ZWNTdGF0ZUVqCiBfX1pOM0pTQzEwSWRlbnRpZmllcjh0b1VJbnQzMkVSS05T
XzdVU3RyaW5nRVJiCi1fX1pOM0pTQzEwSlNGdW5jdGlvbjE0ZmluaXNoQ3JlYXRpb25FUE5TXzlF
eGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBOU18xNEV4ZWN1dGFibGVCYXNlRQogX19aTjNK
U0MxMEpTRnVuY3Rpb240bmFtZUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTBKU0Z1bmN0aW9u
NnNfaW5mb0UKIF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNH
bG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCkBAIC0yMjksNiArMjI4LDcgQEAgX19aTjNKU0My
NER5bmFtaWNHbG9iYWxPYmplY3RTY29wZUMxRVJOUwogX19aTjNKU0MyNFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcjZzX2luZm9FCiBfX1pOM0pTQzI0Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yRVBO
U185RXhlY1N0YXRlRQogX19aTjNKU0MyNWV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWVFUktOU183
VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9iYWxPYmplY3RFCitfX1pOM0pTQzI5Y2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzMwaXNU
ZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MzNWNyZWF0
ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk4z
SlNDNDFjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVja0VQTlNfOUV4ZWNT
dGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVSS05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVy
RVJLTlNfN1VTdHJpbmdFaQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAKICAgICAgICAg
ICAgICdydW50aW1lL0pTQnl0ZUFycmF5LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNDZWxs
LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNGdW5jdGlvbi5oJywKKyAgICAgICAgICAgICdy
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oJywKICAgICAgICAgICAgICdydW50aW1lL0pTR2xvYmFs
RGF0YS5oJywKICAgICAgICAgICAgICdydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgnLAogICAgICAg
ICAgICAgJ3J1bnRpbWUvSlNMb2NrLmgnLApAQCAtNTE2LDYgKzUxNyw3IEBACiAgICAgICAgICAg
ICAncnVudGltZS9KU0J5dGVBcnJheS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNDZWxs
LmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9KU0Z1bmN0aW9uLmNwcCcsCisgICAgICAgICAg
ICAncnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwJywKICAgICAgICAgICAgICdydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
JywKICAgICAgICAgICAgICdydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCcsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHJldmlzaW9uIDk1
NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNC
eXRlQXJyYXkuY3BwIFwKICAgICBydW50aW1lL0pTQ2VsbC5jcHAgXAogICAgIHJ1bnRpbWUvSlNG
dW5jdGlvbi5jcHAgXAorICAgIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBcCiAgICAgcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwIFwKICAgICBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBc
CiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBhZGRGdW5jdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IGNoYXIqIG5h
bWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1bWVudHMpCiAgICAgewog
ICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCBuYW1lKTsKLSAgICAg
ICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGlkZW50aWZpZXIsIEpTRnVuY3Rpb246OmNyZWF0ZShn
bG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIGFyZ3VtZW50cywgaWRlbnRp
ZmllciwgZnVuY3Rpb24pKTsKKyAgICAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGlkZW50aWZp
ZXIsIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGFyZ3VtZW50cywgaWRl
bnRpZmllciwgZnVuY3Rpb24pKTsKICAgICB9CiB9OwogQ09NUElMRV9BU1NFUlQoIUlzSW50ZWdl
cjxHbG9iYWxPYmplY3Q+Ojp2YWx1ZSwgV1RGX0lzSW50ZWdlcl9HbG9iYWxPYmplY3RfZmFsc2Up
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU0JvdW5kRnVuY3Rp
b24uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXEpTQm91bmRGdW5jdGlvbi5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTR2xvYmFsRGF0YS5jcHAiCiAJ
CQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw2ICszNjEsOCBAQAog
CQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8q
IERGR05vZGUuaCAqLzsgfTsKIAkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3Jl
Qm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi87IH07CiAJCTg2RjM4
ODU5MTIxMTMwQ0EwMDdBN0NFMyAvKiBBdG9taWNTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMg
LyogQXRvbWljU3RyaW5nSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZG
QTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi87IH07CisJCTg2
RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RkE5RTkwMTQyQkJCMkUwMDE3NzNC
NyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLzsgfTsKIAkJOTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYz
IC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3Rp
Y3MuY3BwICovOyB9OwogCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlz
dGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAy
MTNFM0MxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MDVCMDJBRTBFMjg2NDBGMDA2
REY4ODIgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwNUIwMkFEMEUyODY0MEYwMDZERjg4MiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwICovOyB9OwpAQCAtMTExNSw2ICsxMTE3LDggQEAKIAkJODZF
Q0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHTm9kZS5oOyBwYXRoID0gZGZnL0RGR05vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2NvcmVCb2FyZC5oOyBw
YXRoID0gZGZnL0RGR1Njb3JlQm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZGMzg4NTgxMjExMzBDQTAwN0E3Q0UzIC8qIEF0b21pY1N0cmluZ0hhc2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXRvbWljU3RyaW5nSGFzaC5oOyBwYXRoID0gdGV4dC9B
dG9taWNTdHJpbmdIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RkE5RThG
MTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNCb3VuZEZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0JvdW5kRnVuY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8q
IE1lbW9yeVN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWVtb3J5U3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkw
MjEzRTNDMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTA1QjAyQUQwRTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZDb3Vu
dGVkTGVha0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA2Niw2
ICsyMDcwLDggQEAKIAkJCQkxNERBODE4RTBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9u
LmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdBQzAwRDMwQjA4IC8qIEpTQXJyYXkuY3BwICovLAog
CQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVDRSAvKiBKU0FycmF5LmggKi8sCisJCQkJODZGQTlF
OEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlF
OTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCUE3OTFFRjI3
MEYxMUUwNzkwMEFFMUY2OCAvKiBKU0J5dGVBcnJheS5jcHAgKi8sCiAJCQkJQTc5MUVGMjYwRjEx
RTA3OTAwQUUxRjY4IC8qIEpTQnl0ZUFycmF5LmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAw
ODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yODExLDYgKzI4MTcsNyBAQAogCQkJCUE3ODFF
MzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUEwODI3N0ExNDIxNjhENzAwOTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTcwNDU2QjAxNDI3RkI5MTAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMzM0LDYgKzMzNDEsNyBAQAogCQkJCUMyMkM1
MzEzMTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLywKIAkJCQkxQTA4
Mjc3OTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDg2LDE1ICsyMDg2LDggQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIH0KICAgICBBU1NFUlQodHlw
ZUluZm8udHlwZSgpICE9IFVuc3BlY2lmaWVkVHlwZSk7CiAKLSAgICBpZiAoIXR5cGVJbmZvLm92
ZXJyaWRlc0hhc0luc3RhbmNlKCkpIHsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKLQot
ICAgICAgICBpZiAoIXByb3RvLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Io
Y2FsbEZyYW1lLCBjcmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLCAiaW5zdGFuY2VvZiBjYWxsZWQg
b24gYW4gb2JqZWN0IHdpdGggYW4gaW52YWxpZCBwcm90b3R5cGUgcHJvcGVydHkuIikpOwotICAg
ICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYg
KCF0eXBlSW5mby5vdmVycmlkZXNIYXNJbnN0YW5jZSgpICYmICF2YWx1ZS5pc09iamVjdCgpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZVZhbCktPmhhc0luc3RhbmNl
KGNhbGxGcmFtZSwgdmFsdWUsIHByb3RvKSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9F
TkQoKTsKQEAgLTM4MjYsMTEgKzM4MTksMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRo
dW5rczo6Y3RpU3R1YgogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCi1OYXRp
dmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKK05hdGl2ZUV4ZWN1dGFibGUqIEpJ
VFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKICAgICBz
dGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9o
b3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4o
KSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1
bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihj
dGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBERkc6
Ok5vSW50cmluc2ljKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxE
YXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNU
SU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkp
LCBjb25zdHJ1Y3RvciwgREZHOjpOb0ludHJpbnNpYykpOwogICAgIHJldHVybiBlbnRyeS5maXJz
dC0+c2Vjb25kLmdldCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFsRGF0YSosIFRo
dW5rR2VuZXJhdG9yKTsKIAotICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25T
dHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKKyAgICAgICAgTmF0aXZlRXhlY3V0
YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0
RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
ciwgREZHOjpJbnRyaW5zaWMpOwogCiAgICAgICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVi
cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICAgICBtYWNybyhfX2xvb2t1cFNldHRlcl9fKSBcCiAgICAgbWFjcm8oYXBwbHkpIFwKICAg
ICBtYWNybyhhcmd1bWVudHMpIFwKKyAgICBtYWNybyhiaW5kKSBcCiAgICAgbWFjcm8oY2FsbCkg
XAogICAgIG1hY3JvKGNhbGxlZSkgXAogICAgIG1hY3JvKGNhbGxlcikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAkocmV2aXNpb24gOTU3
NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgQ29uc3RydWN0RGF0YV9oCiAK
ICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiQ2FsbERhdGEuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTQ1LDExICs0Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBDb25z
dHJ1Y3RUeXBlSlMKICAgICB9OwogCi0gICAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSlNDX0hP
U1RfQ0FMTCAqTmF0aXZlQ29uc3RydWN0b3IpKEV4ZWNTdGF0ZSopOwotCiAgICAgdW5pb24gQ29u
c3RydWN0RGF0YSB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBOYXRpdmVDb25zdHJ1
Y3RvciBmdW5jdGlvbjsKKyAgICAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uOwogICAg
ICAgICB9IG5hdGl2ZTsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTU3NDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsy
MDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfk5hdGl2ZUV4ZWN1dGFibGUoKTsKIAog
ICAgICAgICBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247IH0K
KyAgICAgICAgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IoKSB7IHJldHVybiBtX2NvbnN0cnVj
dG9yOyB9CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90bywgVHlwZUluZm8oTGVhZlR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
IH0KICAgICAgICAgCkBAIC0yMjgsMjUgKzIyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogIAogICAgIHByaXZhdGU6Ci0jaWYgRU5BQkxFKEpJVCkKICAgICAgICAgTmF0aXZlRXhlY3V0
YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2Uo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5uYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBO
VU1fUEFSQU1FVEVSU19JU19IT1NUKQogICAgICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9u
KQogICAgICAgICAgICAgLCBtX2NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKQogICAgICAgICB7CiAg
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3Ry
dWN0b3IpCi0gICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEubmF0aXZlRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgTlVNX1BBUkFNRVRFUlNfSVNfSE9T
VCkKLSAgICAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgICAgICwgbV9j
b25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikKLSAgICAgICAgewotICAgICAgICB9Ci0jZW5kaWYKIAog
ICAgICAgICBOYXRpdmVGdW5jdGlvbiBtX2Z1bmN0aW9uOwotICAgICAgICAvLyBQcm9iYWJseSBz
aG91bGQgYmUgYSBOYXRpdmVDb25zdHJ1Y3RvciwgYnV0IHRoaXMgd2lsbCBjdXJyZW50bHkgcmVx
dWlyZSByZXdyaXRpbmcgdGhlIEpJVAotICAgICAgICAvLyB0cmFtcG9saW5lLiBJdCBtYXkgYmUg
ZWFzaWVyIHRvIG1ha2UgTmF0aXZlRnVuY3Rpb24gYmUgcGFzc2VkICd0aGlzJyBhcyBhIHBhcnQg
b2YgdGhlIEFyZ0xpc3QuCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG1fY29uc3RydWN0b3I7CiAg
ICAgICAgIAogICAgICAgICBERkc6OkludHJpbnNpYyBtX2ludHJpbnNpYzsKQEAgLTYzOCw2ICs2
MjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRp
dmVFeGVjdXRhYmxlKj4obV9leGVjdXRhYmxlLmdldCgpKS0+ZnVuY3Rpb24oKTsKICAgICB9CiAK
KyAgICBpbmxpbmUgTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlvbjo6bmF0aXZlQ29uc3RydWN0b3Io
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uKCkpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KG1fZXhlY3V0YWJsZS5nZXQoKSktPmNv
bnN0cnVjdG9yKCk7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgaXNIb3N0RnVuY3Rpb24oSlNW
YWx1ZSB2YWx1ZSwgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24pCiAgICAgewogICAgICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihnZXRKU0Z1
bmN0aW9uKHZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTU3RyaW5nQnVpbGRl
ci5oIgpAQCAtMzYsNiArMzcsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEZ1bmN0aW9u
UHJvdG90CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3Rv
RnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQmlu
ZChFeGVjU3RhdGUqKTsKIAogRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDog
SW50ZXJuYWxGdW5jdGlvbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKQEAgLTQ4LDE2ICs1MCwx
OSBAQCB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFCiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVu
dW0pOwogfQogCi12b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9u
KiogYXBwbHlGdW5jdGlvbikKK3ZvaWQgRnVuY3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJv
cGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
RnVuY3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKQogewot
ICAgIEpTRnVuY3Rpb24qIHRvU3RyaW5nRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKTsKKyAgICBKU0Z1bmN0aW9u
KiB0b1N0cmluZ0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1Rv
U3RyaW5nKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgdG9TdHJpbmdGdW5jdGlvbiwgRG9u
dEVudW0pOwogCi0gICAgKmFwcGx5RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKKyAgICAqYXBwbHlGdW5jdGlvbiA9IEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIDIsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CiAgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXBw
bHksICphcHBseUZ1bmN0aW9uLCBEb250RW51bSk7CiAKLSAgICAqY2FsbEZ1bmN0aW9uID0gSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDEs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsLCBmdW5jdGlvblByb3RvRnVuY0NhbGwpOworICAg
ICpjYWxsRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCAx
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jYWxsLCAqY2FsbEZ1bmN0aW9uLCBEb250RW51bSk7CisKKyAgICBKU0Z1
bmN0aW9uKiBiaW5kRnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYmluZCwgZnVuY3Rpb25Qcm90b0Z1bmNCaW5k
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5iaW5kLCBiaW5kRnVuY3Rpb24sIERvbnRFbnVtKTsKIH0KIAog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEZ1bmN0aW9uUHJvdG90eXBl
KEV4ZWNTdGF0ZSopCkBAIC0xNTMsNCArMTU4LDQ1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Qcm8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywg
dGhpc1ZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGV4ZWMtPmFyZ3VtZW50KDApLCBjYWxsQXJn
cykpOwogfQogCisvLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAodGhpc0FyZyBb
LCBhcmcxIFssIGFyZzIsIC4uLl1dKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblByb3RvRnVuY0JpbmQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICAv
LyBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVlLgorICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOworCisgICAgLy8gSWYgSXNDYWxsYWJsZShUYXJnZXQpIGlzIGZh
bHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCisgICAgQ2FsbERhdGEgY2FsbERhdGE7
CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0YXJnZXQsIGNhbGxEYXRhKTsK
KyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKKyAgICAvLyBQcmltaXRpdmUgdmFsdWVzIGFyZSBub3QgY2FsbGFi
bGUuCisgICAgQVNTRVJUKHRhcmdldC5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogdGFyZ2V0
T2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKKworICAgIC8vIExldCBBIGJlIGEgbmV3IChwb3Nz
aWJseSBlbXB0eSkgaW50ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlIGFyZ3VtZW50IHZhbHVlcyBw
cm92aWRlZCBhZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0YyksIGluIG9yZGVyLgorICAgIHNp
emVfdCBudW1Cb3VuZEFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPiAxID8gZXhlYy0+YXJn
dW1lbnRDb3VudCgpIC0gMSA6IDA7CisgICAgSlNBcnJheSogYm91bmRBcmdzID0gSlNBcnJheTo6
Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgp
LCBudW1Cb3VuZEFyZ3MsIENyZWF0ZUNvbXBhY3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtQm91bmRBcmdzOyArK2kpCisgICAgICAgIGJvdW5kQXJncy0+dW5jaGVja2VkU2V0SW5k
ZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpLCBleGVjLT5hcmd1bWVudChpICsgMSkpOworICAgIGJv
dW5kQXJncy0+c2V0TGVuZ3RoKG51bUJvdW5kQXJncyk7CisKKyAgICAvLyBJZiB0aGUgW1tDbGFz
c11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0aGVuIC4uLgor
ICAgIC8vIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4KKyAgICB1
bnNpZ25lZCBsZW5ndGggPSAwOworICAgIGlmICh0YXJnZXRPYmplY3QtPmluaGVyaXRzKCZKU0Z1
bmN0aW9uOjpzX2luZm8pKSB7CisgICAgICAgIEFTU0VSVCh0YXJnZXQuZ2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLmlzTnVtYmVyKCkpOworICAgICAgICAvLyBhLiBMZXQg
TCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEu
CisgICAgICAgIC8vIGIuIFNldCB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIGVpdGhl
ciAwIG9yIEwsIHdoaWNoZXZlciBpcyBsYXJnZXIuCisgICAgICAgIHVuc2lnbmVkIHRhcmdldExl
bmd0aCA9ICh1bnNpZ25lZCl0YXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgICAgICBpZiAodGFyZ2V0TGVuZ3RoID4g
bnVtQm91bmRBcmdzKQorICAgICAgICAgICAgbGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gbnVtQm91
bmRBcmdzOworICAgIH0KKworICAgIElkZW50aWZpZXIgbmFtZShleGVjLCB0YXJnZXQuZ2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS50b1N0cmluZyhleGVjKSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSwgYm91bmRBcmdzLCBsZW5n
dGgsIG5hbWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHJldmlzaW9uIDk1
NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBwcm90b3R5cGU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgYWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNG
dW5jdGlvbioqIGFwcGx5RnVuY3Rpb24pOworICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVy
dGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTRnVuY3Rpb24qKiBjYWxsRnVuY3Rp
b24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91
bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQm91
bmRGdW5jdGlvbik7CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlv
bkNhbGwoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5j
dGlvbiA9IHN0YXRpY19jYXN0PEpTQm91bmRGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKwor
ICAgIEFTU0VSVChpc0pTQXJyYXkoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYm91bmRGdW5jdGlvbi0+
Ym91bmRBcmdzKCkpKTsgLy8gQ3VycmVudGx5IHRoaXMgaXMgdHJ1ZSEKKyAgICBKU0FycmF5KiBi
b3VuZEFyZ3MgPSBhc0FycmF5KGJvdW5kRnVuY3Rpb24tPmJvdW5kQXJncygpKTsKKworICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJv
dW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5n
ZXRJbmRleChpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgKytpKQorICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVudChpKSk7CisK
KyAgICBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24gPSBib3VuZEZ1bmN0aW9uLT50YXJnZXRGdW5j
dGlvbigpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEodGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5
cGUgIT0gQ2FsbFR5cGVOb25lKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhl
YywgdGFyZ2V0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYm91bmRGdW5jdGlvbi0+Ym91
bmRUaGlzKCksIGFyZ3MpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3Vu
ZEZ1bmN0aW9uQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0JvdW5kRnVuY3Rp
b24qIGJvdW5kRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0JvdW5kRnVuY3Rpb24qPihleGVjLT5j
YWxsZWUoKSk7CisKKyAgICBBU1NFUlQoaXNKU0FycmF5KCZleGVjLT5nbG9iYWxEYXRhKCksIGJv
dW5kRnVuY3Rpb24tPmJvdW5kQXJncygpKSk7IC8vIEN1cnJlbnRseSB0aGlzIGlzIHRydWUhCisg
ICAgSlNBcnJheSogYm91bmRBcmdzID0gYXNBcnJheShib3VuZEZ1bmN0aW9uLT5ib3VuZEFyZ3Mo
KSk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5k
KGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJn
dW1lbnQoaSkpOworCisgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uID0gYm91bmRGdW5jdGlv
bi0+dGFyZ2V0RnVuY3Rpb24oKTsKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7Cisg
ICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YSh0YXJnZXRG
dW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgIT0gQ29u
c3RydWN0VHlwZU5vbmUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0KGV4
ZWMsIHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKSk7
Cit9CisKK0pTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVu
Y3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU1ZhbHVlIGJvdW5kQXJncywgaW50IGxlbmd0aCwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSkKK3sKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CisgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3RE
YXRhKHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3REYXRhKTsKKyAgICBib29sIGNhbkNvbnN0cnVj
dCA9IGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZU5vbmU7CisKKyAgICBOYXRpdmVFeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihi
b3VuZEZ1bmN0aW9uQ2FsbCwgY2FuQ29uc3RydWN0ID8gYm91bmRGdW5jdGlvbkNvbnN0cnVjdCA6
IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKKyAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1
bmN0aW9uID0gbmV3IChhbGxvY2F0ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPigqZXhlYy0+aGVhcCgp
KSkgSlNCb3VuZEZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5ib3Vu
ZEZ1bmN0aW9uU3RydWN0dXJlKCksIHRhcmdldEZ1bmN0aW9uLCBib3VuZFRoaXMsIGJvdW5kQXJn
cyk7CisKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZXhlY3V0YWJsZSwgbGVu
Z3RoLCBuYW1lKTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK2Jvb2wgSlNCb3VuZEZ1bmN0
aW9uOjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUp
Cit7CisgICAgLy8gRklYTUU6IG91ciBpbnN0YW5jZW9mIGltcGxlbWVudGF0aW9uIHdpbGwgaGF2
ZSBhbHJlYWR5IChpbmNvcnJlY3RseSkgcGVyZm9ybWVkCisgICAgLy8gYSBbW0dldF1dIG9mIC5w
cm90b3R5cGUgZnJvbSB0aGUgYm91bmQgZnVuY3Rpb24gb2JqZWN0LCB3aGljaCBpcyBpbmNvcnJl
Y3QhCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjU2
CisgICAgSlNWYWx1ZSBwcm90byA9IG1fdGFyZ2V0RnVuY3Rpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICByZXR1cm4gbV90YXJnZXRGdW5jdGlvbi0+
aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUsIHByb3RvKTsKK30KKworYm9vbCBKU0JvdW5kRnVuY3Rp
b246OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlQXJndW1lbnRzQWNjZXNzRXJyb3IpOworICAgICAgICBz
bG90LnNldFZhbHVlKGpzTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7Cisg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJvcik7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdWxsKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNCb3VuZEZ1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKKyAgICAgICAgY3JlYXRl
RGVzY3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoZXhlYywgZGVzY3JpcHRvciwgU3RyaWN0TW9k
ZUFyZ3VtZW50c0FjY2Vzc0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikg
eworICAgICAgICBjcmVhdGVEZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9wZXJ0eShleGVjLCBkZXNj
cmlwdG9yLCBTdHJpY3RNb2RlQ2FsbGVyQWNjZXNzRXJyb3IpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCitKU0JvdW5kRnVuY3Rpb246
OkpTQm91bmRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpT
VmFsdWUgYm91bmRUaGlzLCBKU1ZhbHVlIGJvdW5kQXJncykKKyAgICA6IEJhc2UoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhcmdldEZ1bmN0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgdGFyZ2V0RnVuY3Rpb24pCisgICAgLCBtX2JvdW5kVGhpcyhleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGJvdW5kVGhpcykKKyAgICAsIG1fYm91bmRBcmdzKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgYm91bmRBcmdzKQoreworfQorCit2b2lkIEpTQm91bmRGdW5jdGlv
bjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CisgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKK30KKwordm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzLCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFn
cyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0
U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisK
KyAgICB2aXNpdG9yLmFwcGVuZCgmbV90YXJnZXRGdW5jdGlvbik7CisgICAgdmlzaXRvci5hcHBl
bmQoJm1fYm91bmRUaGlzKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9ib3VuZEFyZ3MpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0JvdW5kRnVuY3Rpb25faAorI2RlZmluZSBKU0JvdW5kRnVuY3Rpb25faAorCisjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ2FsbChFeGVjU3RhdGUqKTsKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNvbnN0cnVjdChFeGVjU3RhdGUqKTsKKwor
Y2xhc3MgSlNCb3VuZEZ1bmN0aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgorICAg
IHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOworCisgICAgc3RhdGljIEpTQm91bmRGdW5jdGlvbiog
Y3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0
aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNWYWx1ZSBib3VuZEFyZ3MsIGludCwgY29uc3QgSWRl
bnRpZmllciYpOworCisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSW5zdGFuY2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKKworICAgIEpTT2Jq
ZWN0KiB0YXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCk7IH0K
KyAgICBKU1ZhbHVlIGJvdW5kVGhpcygpIHsgcmV0dXJuIG1fYm91bmRUaGlzLmdldCgpOyB9Cisg
ICAgSlNWYWx1ZSBib3VuZEFyZ3MoKSB7IHJldHVybiBtX2JvdW5kQXJncy5nZXQoKTsgfQorCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7IAorICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0hhc0luc3RhbmNlIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIEpTQm91
bmRGdW5jdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2Jq
ZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTVmFsdWUgYm91bmRBcmdz
KTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIE5hdGl2ZUV4ZWN1
dGFibGUqLCBpbnQsIGNvbnN0IElkZW50aWZpZXImKTsKKworICAgIFdyaXRlQmFycmllcjxKU09i
amVjdD4gbV90YXJnZXRGdW5jdGlvbjsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9ib3Vu
ZFRoaXM7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fYm91bmRBcmdzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0Z1bmN0aW9uX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiA5NTc0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC01Niw2ICs1
NywyMiBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lCiAgICAgcmV0
dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludCBsZW5n
dGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9u
LCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvcikKK3sKKyAgICBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihuYXRp
dmVGdW5jdGlvbiwgbmF0aXZlQ29uc3RydWN0b3IpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkp
OworICAgIC8vIENhbid0IGRvIHRoaXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0
SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxsb2NhdGlvbi4KKyAgICBmdW5jdGlvbi0+Zmlu
aXNoQ3JlYXRpb24oZXhlYywgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKKyAgICByZXR1cm4g
ZnVuY3Rpb247Cit9CisKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUpCit7Cisg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPigq
ZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4
ZWMsIG5hdGl2ZUV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
OworfQorCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZQdHJTdGVhbGluZ0hhY2tUeXBlKQogICAg
IDogQmFzZShWUHRyU3RlYWxpbmdIYWNrKQogewpAQCAtNzUsNyArOTIsNyBAQCBKU0Z1bmN0aW9u
OjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgCiB7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKK3ZvaWQgSlNGdW5jdGlvbjo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKQEAgLTg4LDYgKzEwNSw5IEBAIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXQKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRh
KCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisKKyAgICAvLyBTd2l0Y2hpbmcg
dGhlIHN0cnVjdHVyZSBoZXJlIGlzIG9ubHkgc2FmZSBpZiB3ZSBjdXJyZW50bHkgaGF2ZSB0aGUg
ZnVuY3Rpb24gc3RydWN0dXJlIQorICAgIEFTU0VSVChzdHJ1Y3R1cmUoKSA9PSBzY29wZUNoYWlu
Tm9kZS0+Z2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICBzZXRTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LT5uYW1l
ZEZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgIHB1dERpcmVjdE9mZnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QtPmZ1bmN0aW9uTmFtZU9mZnNldCgp
LCBleGVjdXRhYmxlLT5uYW1lVmFsdWUoKSk7CiB9CkBAIC05NywxMCArMTE3LDEwIEBAIEpTRnVu
Y3Rpb246On5KU0Z1bmN0aW9uKCkKICAgICBBU1NFUlQodnB0cigpID09IEpTR2xvYmFsRGF0YTo6
anNGdW5jdGlvblZQdHIpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogU3RyaWN0TW9kZUNhbGxl
ckFjY2Vzc0Vycm9yID0gIkNhbm5vdCBhY2Nlc3MgY2FsbGVyIHByb3BlcnR5IG9mIGEgc3RyaWN0
IG1vZGUgZnVuY3Rpb24iOwotc3RhdGljIGNvbnN0IGNoYXIqIFN0cmljdE1vZGVBcmd1bWVudHNB
Y2Nlc3NFcnJvciA9ICJDYW5ub3QgYWNjZXNzIGFyZ3VtZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmlj
dCBtb2RlIGZ1bmN0aW9uIjsKK2NvbnN0IGNoYXIqIFN0cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJv
ciA9ICJDYW5ub3QgYWNjZXNzIGNhbGxlciBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0
aW9uIjsKK2NvbnN0IGNoYXIqIFN0cmljdE1vZGVBcmd1bWVudHNBY2Nlc3NFcnJvciA9ICJDYW5u
b3QgYWNjZXNzIGFyZ3VtZW50cyBwcm9wZXJ0eSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uIjsK
IAotc3RhdGljIHZvaWQgY3JlYXRlRGVzY3JpcHRvckZvclRocm93aW5nUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCit2b2lkIGNyZWF0ZURlc2NyaXB0b3JGb3JUaHJvd2luZ1Byb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBjb25zdCBjaGFyKiBtZXNz
YWdlKQogewogICAgIEpTVmFsdWUgdGhyb3dlciA9IGNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKGV4
ZWMsIG1lc3NhZ2UpOwogICAgIGRlc2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKHRocm93
ZXIsIHRocm93ZXIsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IEdldHRlciB8IFNldHRlcik7CkBA
IC0xOTYsNyArMjE2LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
YwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKSB7CiAgICAgICAgIGlmIChqc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJDYW4ndCBhY2Nlc3MgYXJndW1lbnRzIG9i
amVjdCBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uIik7CisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlQXJndW1lbnRzQWNjZXNzRXJyb3IpOwogICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZShqc051bGwoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtMzExLDggKzMzMSwxMCBAQCBib29sIEpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0CiAvLyBFQ01BIDEzLjIuMiBbW0NvbnN0cnVjdF1dCiBDb25zdHJ1Y3RUeXBlIEpT
RnVuY3Rpb246OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
IHsKLSAgICBpZiAoaXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIENvbnN0cnVjdFR5
cGVOb25lOworICAgIGlmIChpc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gbmF0aXZlQ29uc3RydWN0b3IoKTsKKyAgICAgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVIb3N0OworICAgIH0KICAgICBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZSA9IGpzRXhlY3V0YWJsZSgpOwogICAgIGNvbnN0cnVjdERhdGEuanMuc2NvcGVD
aGFpbiA9IHNjb3BlKCk7CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVKUzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDk1NzQwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwzOCArNDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSopOwogCisgICAgZXh0ZXJuIGNvbnN0IGNoYXIqIFN0cmljdE1vZGVDYWxsZXJBY2Nlc3NFcnJv
cjsKKyAgICBleHRlcm4gY29uc3QgY2hhciogU3RyaWN0TW9kZUFyZ3VtZW50c0FjY2Vzc0Vycm9y
OworCisgICAgdm9pZCBjcmVhdGVEZXNjcmlwdG9yRm9yVGhyb3dpbmdQcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgY29uc3QgY2hhciogbWVz
c2FnZSk7CisKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpK
SVRDb2RlR2VuZXJhdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwogCi0g
ICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
KTsKLSAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBT
Y29wZUNoYWluTm9kZSopOwotICAgICAgICAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZl
RnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpID09IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gKEV4ZWN1dGFibGVCYXNlKilleGVjLT5n
bG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uKTsKLSAgICAgICAgICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4
ZWMtPmhlYXAoKSkpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgLy8gQ2FuJ3QgZG8gdGhpcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmVjYXVz
ZSBnZXRIb3N0RnVuY3Rpb24gbWlnaHQgZG8gYSBHQyBhbGxvY2F0aW9uLgotICAgICAgICAgICAg
ZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGxlbmd0aCwgbmFtZSwgZXhlY3V0YWJsZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0
aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpID09IGdsb2JhbE9iamVjdCk7
Ci0KLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChhbGxvY2F0ZUNlbGw8
SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKGV4ZWMs
IGxlbmd0aCwgbmFtZSwgKEV4ZWN1dGFibGVCYXNlKiluYXRpdmVFeGVjdXRhYmxlKTsKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbjsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gbmF0
aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IpOworICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50IGxlbmd0
aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0
YWJsZSk7CiAKICAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4pCiAgICAgICAgIHsKQEAgLTEyMyw2ICsxMDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCk7CisgICAg
ICAgIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yKCk7CiAKICAgICAgICAgdmlydHVh
bCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwogICAgICAg
ICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CkBAIC0xNDAsMjIgKzEy
NCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0IHN0
YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCi0gICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgaW50IGxlbmd0aCwgY29uc3QgSWRl
bnRpZmllciYgbmFtZSwgRXhlY3V0YWJsZUJhc2UqKTsKKyAgICAgICAgSlNGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgICAgICBKU0Z1bmN0aW9u
KEV4ZWNTdGF0ZSosIEZ1bmN0aW9uRXhlY3V0YWJsZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIE5hdGl2ZUV4ZWN1
dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKTsKICAgICAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBTY29wZUNo
YWluTm9kZSopOwogCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKICAgICBwcml2YXRlOgogICAg
ICAgICBleHBsaWNpdCBKU0Z1bmN0aW9uKFZQdHJTdGVhbGluZ0hhY2tUeXBlKTsKIAogICAgICAg
ICBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSBtb2RlID0gRXhjbHVkZURvbnRFbnVt
UHJvcGVydGllcyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKLQogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBhcmd1bWVudHNHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBzdGF0
aWMgSlNWYWx1ZSBjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5NSwxOCArMzk1LDE4IEBAIEpTR2xvYmFsRGF0YSomIEpTR2xvYmFsRGF0YTo6c2hhcmVk
SW5zdGEKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1OYXRpdmVFeGVjdXRhYmxlKiBKU0dsb2JhbERh
dGE6OmdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbikKK05hdGl2ZUV4ZWN1
dGFibGUqIEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0
aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKLSAgICByZXR1cm4gaml0U3R1YnMt
Pmhvc3RGdW5jdGlvblN0dWIodGhpcywgZnVuY3Rpb24pOworICAgIHJldHVybiBqaXRTdHVicy0+
aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwogfQogTmF0aXZl
RXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24g
ZnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgREZHOjpJbnRyaW5zaWMgaW50cmlu
c2ljKQogewogICAgIHJldHVybiBqaXRTdHVicy0+aG9zdEZ1bmN0aW9uU3R1Yih0aGlzLCBmdW5j
dGlvbiwgZ2VuZXJhdG9yLCBpbnRyaW5zaWMpOwogfQogI2Vsc2UKLU5hdGl2ZUV4ZWN1dGFibGUq
IEpTR2xvYmFsRGF0YTo6Z2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKQor
TmF0aXZlRXhlY3V0YWJsZSogSlNHbG9iYWxEYXRhOjpnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogewotICAgIHJldHVy
biBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKnRoaXMsIGZ1bmN0aW9uLCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3Rvcik7CisgICAgcmV0dXJuIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgq
dGhpcywgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTU3NDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwg
VGh1bmtHZW5lcmF0b3IsIERGRzo6SW50cmluc2ljKTsKICNlbmRpZgotICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24pOworICAgICAgICBOYXRp
dmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIE5hdGl2ZUZ1bmN0
aW9uIGNvbnN0cnVjdG9yKTsKIAogICAgICAgICBUaW1lb3V0Q2hlY2tlciB0aW1lb3V0Q2hlY2tl
cjsKICAgICAgICAgVGVybWluYXRvciB0ZXJtaW5hdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gOTU3NDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJFcnJvclByb3RvdHlwZS5o
IgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJGdW5jdGlvblBy
b3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgpAQCAtMTg3LDExICsxODgsMTIgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1
bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2Jq
ZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCiAgICAgbV9mdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9i
b3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQm91
bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5hbWVPZmZzZXQpKTsKICAgICBtX2ludGVybmFsRnVu
Y3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlvbiA9IDA7CiAg
ICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IDA7Ci0gICAgbV9mdW5jdGlvblByb3RvdHlw
ZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KCksICZjYWxsRnVuY3Rpb24sICZhcHBseUZ1bmN0aW9uKTsKKyAgICBtX2Z1bmN0aW9uUHJv
dG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgJmNhbGxGdW5jdGlvbiwg
JmFwcGx5RnVuY3Rpb24pOwogICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIGNhbGxGdW5jdGlvbik7CiAgICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGFwcGx5RnVuY3Rpb24pOwogICAgIG1fb2JqZWN0UHJvdG90eXBl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywganNOdWxsKCkpKSk7CkBAIC0yODAsNyArMjgyLDcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiVHlwZUVycm9yIiksIG1f
dHlwZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlVSSUVy
cm9yIiksIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogCi0gICAgbV9l
dmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOworICAgIG1fZXZhbEZ1bmN0aW9uLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlz
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwpKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ldmFsLCBtX2V2YWxGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOwogCiAgICAg
R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKQEAgLTM0OSw2ICszNTEsNyBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKFNsb3RWCiAgICAgdmlzaXRJZk5l
ZWRlZCh2aXNpdG9yLCAmbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNp
dElmTmVlZGVkKHZpc2l0b3IsICZtX2Vycm9yU3RydWN0dXJlKTsKICAgICB2aXNpdElmTmVlZGVk
KHZpc2l0b3IsICZtX2Z1bmN0aW9uU3RydWN0dXJlKTsKKyAgICB2aXNpdElmTmVlZGVkKHZpc2l0
b3IsICZtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRv
ciwgJm1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9y
LCAmbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwg
Jm1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gOTU3NDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZTsKICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9lcnJvclN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9mdW5jdGlvblN0cnVjdHVyZTsKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgICAgIHNpemVf
dCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9udW1iZXJPYmplY3RTdHJ1Y3R1cmU7CkBAIC0yMjgsNiArMjI5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFN0cnVjdHVyZSogbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAg
ICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvclN0
cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1
Y3R1cmUqIGJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kRnVu
Y3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBuYW1lZEZ1bmN0aW9u
U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLmdldCgp
OyB9CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbk5hbWVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2Z1bmN0aW9uTmFtZU9mZnNldDsgfQogICAgICAgICBTdHJ1Y3R1cmUqIG51bWJlck9iamVjdFN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9u
IDk1NzQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDEwIEBAIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNs
b3QoRXhlY1N0YXRlKiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRo
aXNPYmotPmdsb2JhbE9iamVjdCgpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIGlmIChlbnRy
eS0+Z2VuZXJhdG9yKCkgfHwgZW50cnktPmludHJpbnNpYygpICE9IERGRzo6Tm9JbnRyaW5zaWMp
Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9u
TGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlv
bihlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnktPmdlbmVyYXRvcigpLCBlbnRyeS0+aW50cmluc2lj
KCkpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZXhlYy0+
Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnktPmdl
bmVyYXRvcigpLCBlbnRyeS0+aW50cmluc2ljKCkpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0g
ICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVu
Z3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgZnVu
Y3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBlbnRyeS0+ZnVu
Y3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7CiAKICAgICAg
ICAgdGhpc09iai0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBm
dW5jdGlvbiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIGxvY2F0aW9uID0gdGhpc09i
ai0+Z2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMS0wOS0yMiAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEZ1
bmN0aW9uLnByb3RvdHlwZS5iaW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjM4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IGZhc3QvanMvZnVuY3Rpb24tYmluZC5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0
VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9u
R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcik6CisgICAgICAgICAgICAt
IEZ1bmN0aW9uOjpjcmVhdGUgbm8gbG9uZ2VyIHJlcXVpcmVzIGZ1bmN0aW9uU3RydWN0dXJlKCkg
dG8gYmUgcGFzc2VkLgogMjAxMS0wOS0yMiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjM4
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDk1NzQwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDcgKzMwOCw3IEBAIEZyYW1lKiB0b0R5bmFtaWNG
cmFtZShFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKKyAg
ICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7CiB9CiAKIFN0
cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gOTU3NDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaQogdGVtcGxhdGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGlu
dCBsZW5ndGg+CiBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBs
ZW5ndGgsIHByb3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOworICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHBy
b3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBjaGlsZEZy
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiA5NTc0MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3
ICs0MCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hp
bmdTdGF0aWNCYWNrRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3Rv
cnlQcm90b3R5cGVGdW5jdGlvbkJhY2spOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlz
dG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hp
bmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hp
c3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
IG5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwg
anNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDEsIHByb3BlcnR5TmFtZSwg
anNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CiB9CiAKIGJvb2wgSlNIaXN0b3J5OjpnZXRP
d25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDk1NzQwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
cHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlKTsKKyAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlKTsK
IH0KIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0
dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2Fk
KTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25S
ZWxvYWQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rp
b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rp
b25Bc3NpZ24pOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVG
dW5jdGlvbkFzc2lnbik7CiB9CiAKIGJvb2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90
RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NzQxKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDkt
MjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYzODIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBub3cgcGFzcyBGdW5jdGlvbi5iaW5kIHRlc3Rz
LgorCisgICAgICAgICogZmFzdC9qcy9PYmplY3QtZ2V0T3duUHJvcGVydHlOYW1lcy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9iYXNpYy1zdHJpY3QtbW9kZS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC9qcy9mdW5jdGlvbi1iaW5kLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9qcy9mdW5jdGlvbi1iaW5kLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvanMvbW96aWxsYS9zdHJpY3QvMTUuMy40LjUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQuanM6IEFkZGVkLgorICAgICAgICAqIGll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjIuMy4zLTQtMzgtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTAtMS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMC0yLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTEtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEz
LmItMi1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMTMuYi0zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC8xNS4zLjQuNS0xMy5iLTQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRl
ci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItNS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0
ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTUtMS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTUtMi1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTYtMS1leHBlY3RlZC50
eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi0xLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTIt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41
LTItMy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMi00LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC8xNS4zLjQuNS0yLTUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZh
c2NyaXB0LzE1LjMuNC41LTItNi1leHBlY3RlZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVy
L0phdmFzY3JpcHQvMTUuMy40LjUtMi03LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTgtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItOS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOC0xLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS04LTItZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTktMS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOS0yLWV4
cGVjdGVkLnR4dDoKKwogMjAxMS0wOS0yMiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjQ1
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL09iamVjdC1nZXRP
d25Qcm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL09iamVjdC1nZXRPd25Qcm9wZXJ0eU5hbWVzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFt
ZXMoZW5jb2RlVVJJCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoT2JqZWN0KSBpcyBb
J2NyZWF0ZScsICdkZWZpbmVQcm9wZXJ0aWVzJywgJ2RlZmluZVByb3BlcnR5JywgJ2ZyZWV6ZScs
ICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCAnZ2V0T3duUHJvcGVydHlOYW1lcycsICdnZXRQ
cm90b3R5cGVPZicsICdpc0V4dGVuc2libGUnLCAnaXNGcm96ZW4nLCAnaXNTZWFsZWQnLCAna2V5
cycsICdsZW5ndGgnLCAnbmFtZScsICdwcmV2ZW50RXh0ZW5zaW9ucycsICdwcm90b3R5cGUnLCAn
c2VhbCddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkg
aXMgWydfX2RlZmluZUdldHRlcl9fJywgJ19fZGVmaW5lU2V0dGVyX18nLCAnX19sb29rdXBHZXR0
ZXJfXycsICdfX2xvb2t1cFNldHRlcl9fJywgJ2NvbnN0cnVjdG9yJywgJ2hhc093blByb3BlcnR5
JywgJ2lzUHJvdG90eXBlT2YnLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAndG9Mb2NhbGVTdHJp
bmcnLCAndG9TdHJpbmcnLCAndmFsdWVPZiddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFt
ZXMoRnVuY3Rpb24pIGlzIFsnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10KLVBBU1MgZ2V0
U29ydGVkT3duUHJvcGVydHlOYW1lcyhGdW5jdGlvbi5wcm90b3R5cGUpIGlzIFsnYXBwbHknLCAn
Y2FsbCcsICdjb25zdHJ1Y3RvcicsICdsZW5ndGgnLCAnbmFtZScsICd0b1N0cmluZyddCitGQUlM
IGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24ucHJvdG90eXBlKSBzaG91bGQgYmUg
YXBwbHksY2FsbCxjb25zdHJ1Y3RvcixsZW5ndGgsbmFtZSx0b1N0cmluZy4gV2FzIGFwcGx5LGJp
bmQsY2FsbCxjb25zdHJ1Y3RvcixsZW5ndGgsbmFtZSx0b1N0cmluZy4KIFBBU1MgZ2V0U29ydGVk
T3duUHJvcGVydHlOYW1lcyhBcnJheSkgaXMgWydpc0FycmF5JywgJ2xlbmd0aCcsICduYW1lJywg
J3Byb3RvdHlwZSddCiBQQVNTIGdldFNvcnRlZE93blByb3BlcnR5TmFtZXMoQXJyYXkucHJvdG90
eXBlKSBpcyBbJ2NvbmNhdCcsICdjb25zdHJ1Y3RvcicsICdldmVyeScsICdmaWx0ZXInLCAnZm9y
RWFjaCcsICdpbmRleE9mJywgJ2pvaW4nLCAnbGFzdEluZGV4T2YnLCAnbGVuZ3RoJywgJ21hcCcs
ICdwb3AnLCAncHVzaCcsICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnLCAncmV2ZXJzZScsICdzaGlm
dCcsICdzbGljZScsICdzb21lJywgJ3NvcnQnLCAnc3BsaWNlJywgJ3RvTG9jYWxlU3RyaW5nJywg
J3RvU3RyaW5nJywgJ3Vuc2hpZnQnXQogUEFTUyBnZXRTb3J0ZWRPd25Qcm9wZXJ0eU5hbWVzKFN0
cmluZykgaXMgWydmcm9tQ2hhckNvZGUnLCAnbGVuZ3RoJywgJ25hbWUnLCAncHJvdG90eXBlJ10K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMtc3RyaWN0LW1vZGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMtc3RyaWN0LW1vZGUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMt
c3RyaWN0LW1vZGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMyArNTYsMTMg
QEAgUEFTUyAoZnVuY3Rpb24gKCl7J3VzZSBzdHJpY3QnOyB3aXRoKDEpewogUEFTUyAoZnVuY3Rp
b24oKXsoZnVuY3Rpb24gKCl7J3VzZSBzdHJpY3QnOyB3aXRoKDEpe307fSl9KSB0aHJldyBleGNl
cHRpb24gU3ludGF4RXJyb3I6ICd3aXRoJyBzdGF0ZW1lbnRzIGFyZSBub3QgdmFsaWQgaW4gc3Ry
aWN0IG1vZGUuCiBQQVNTIChmdW5jdGlvbiAoKXsndXNlIHN0cmljdCc7IGFyZ3VtZW50cy5jYWxs
ZWU7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVW5hYmxlIHRvIGFjY2VzcyBjYWxs
ZWUgb2Ygc3RyaWN0IG1vZGUgZnVuY3Rpb24uCiBQQVNTIChmdW5jdGlvbiAoKXsndXNlIHN0cmlj
dCc7IGFyZ3VtZW50cy5jYWxsZXI7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVW5h
YmxlIHRvIGFjY2VzcyBjYWxsZXIgb2Ygc3RyaWN0IG1vZGUgZnVuY3Rpb24uCi1QQVNTIChmdW5j
dGlvbiBmKCl7J3VzZSBzdHJpY3QnOyBmLmFyZ3VtZW50czsgfSkoKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBDYW4ndCBhY2Nlc3MgYXJndW1lbnRzIG9iamVjdCBvZiBhIHN0cmljdCBtb2Rl
IGZ1bmN0aW9uLgorUEFTUyAoZnVuY3Rpb24gZigpeyd1c2Ugc3RyaWN0JzsgZi5hcmd1bWVudHM7
IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBhcmd1bWVudHMg
cHJvcGVydHkgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9uIGYoKXsn
dXNlIHN0cmljdCc7IGYuY2FsbGVyOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENh
bm5vdCBhY2Nlc3MgY2FsbGVyIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCiBQ
QVNTIChmdW5jdGlvbiBmKCl7J3VzZSBzdHJpY3QnOyBmLmFyZ3VtZW50cz01OyB9KSgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nlc3MgYXJndW1lbnRzIHByb3BlcnR5IG9m
IGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCiBQQVNTIChmdW5jdGlvbiBmKCl7J3VzZSBzdHJpY3Qn
OyBmLmNhbGxlcj01OyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nl
c3MgY2FsbGVyIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCiBQQVNTIChmdW5j
dGlvbiAoYXJnKXsndXNlIHN0cmljdCc7IGFyZ3VtZW50cy5jYWxsZWU7IH0pKCkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogVW5hYmxlIHRvIGFjY2VzcyBjYWxsZWUgb2Ygc3RyaWN0IG1vZGUg
ZnVuY3Rpb24uCiBQQVNTIChmdW5jdGlvbiAoYXJnKXsndXNlIHN0cmljdCc7IGFyZ3VtZW50cy5j
YWxsZXI7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVW5hYmxlIHRvIGFjY2VzcyBj
YWxsZXIgb2Ygc3RyaWN0IG1vZGUgZnVuY3Rpb24uCi1QQVNTIChmdW5jdGlvbiBmKGFyZyl7J3Vz
ZSBzdHJpY3QnOyBmLmFyZ3VtZW50czsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBD
YW4ndCBhY2Nlc3MgYXJndW1lbnRzIG9iamVjdCBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLgor
UEFTUyAoZnVuY3Rpb24gZihhcmcpeyd1c2Ugc3RyaWN0JzsgZi5hcmd1bWVudHM7IH0pKCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IGFjY2VzcyBhcmd1bWVudHMgcHJvcGVydHkg
b2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbi4KIFBBU1MgKGZ1bmN0aW9uIGYoYXJnKXsndXNlIHN0
cmljdCc7IGYuY2FsbGVyOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBh
Y2Nlc3MgY2FsbGVyIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCiBQQVNTIChm
dW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3QnOyBmLmFyZ3VtZW50cz01OyB9KSgpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nlc3MgYXJndW1lbnRzIHByb3BlcnR5IG9mIGEg
c3RyaWN0IG1vZGUgZnVuY3Rpb24uCiBQQVNTIChmdW5jdGlvbiBmKGFyZyl7J3VzZSBzdHJpY3Qn
OyBmLmNhbGxlcj01OyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCBhY2Nl
c3MgY2FsbGVyIHByb3BlcnR5IG9mIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24uCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWJpbmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYmluZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWJpbmQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACitUZXN0cyBGdW5jdGlvbi5iaW5kLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZXN1bHQgaXMgIltvYmplY3QgRE9NV2lu
ZG93XSAtPiB4OjEsIHk6MiIKK1BBU1MgcmVzdWx0IGlzICInYScgLT4geDonYicsIHk6MSIKK1BB
U1MgcmVzdWx0IGlzICInYScgLT4geDonYicsIHk6J2MnIgorUEFTUyByZXN1bHQgaXMgIltvYmpl
Y3QgT2JqZWN0XSAtPiB4OjEsIHk6MiIKK1BBU1MgcmVzdWx0IGlzICJbb2JqZWN0IE9iamVjdF0g
LT4geDonYicsIHk6MSIKK1BBU1MgcmVzdWx0IGlzICJbb2JqZWN0IE9iamVjdF0gLT4geDonYics
IHk6J2MnIgorUEFTUyBmIGluc3RhbmNlb2YgRiBpcyB0cnVlCitQQVNTIGYgaW5zdGFuY2VvZiBH
IGlzIHRydWUKK1BBU1MgZiBpbnN0YW5jZW9mIEggaXMgdHJ1ZQorUEFTUyBnIGluc3RhbmNlb2Yg
RiBpcyB0cnVlCitQQVNTIGcgaW5zdGFuY2VvZiBHIGlzIHRydWUKK1BBU1MgZyBpbnN0YW5jZW9m
IEggaXMgdHJ1ZQorUEFTUyBoIGluc3RhbmNlb2YgRiBpcyB0cnVlCitQQVNTIGggaW5zdGFuY2Vv
ZiBHIGlzIHRydWUKK1BBU1MgaCBpbnN0YW5jZW9mIEggaXMgdHJ1ZQorUEFTUyAicHJvdG90eXBl
IiBpbiBGIGlzIHRydWUKK1BBU1MgInByb3RvdHlwZSIgaW4gRyBpcyBmYWxzZQorUEFTUyAicHJv
dG90eXBlIiBpbiBIIGlzIGZhbHNlCitQQVNTIEZ1bmN0aW9uLmJpbmQuY2FsbCh1bmRlZmluZWQp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIGFiY0F0KDEpIGlz
ICJiIgorUEFTUyBuZXcgYWJjQXQoMSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogJ2Z1bmN0
aW9uIGNoYXJBdCgpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9JyBpcyBub3QgYSBjb25zdHJ1Y3Rv
ciAoZXZhbHVhdGluZyAnbmV3IGFiY0F0KDEpJykuCitGQUlMIGJvdW5kRnVuY3Rpb25Qcm90b3R5
cGVBY2Nlc3NlZCBzaG91bGQgYmUgZmFsc2UuIFdhcyB0cnVlLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvZnVuY3Rpb24tYmluZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
ZnVuY3Rpb24tYmluZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9m
dW5jdGlvbi1iaW5kLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZnVuY3Rpb24tYmluZC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL21vemlsbGEvc3RyaWN0
LzE1LjMuNC41LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L21vemlsbGEvc3RyaWN0LzE1LjMuNC41LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL21vemlsbGEvc3RyaWN0LzE1LjMuNC41LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDE3IEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUg
MTI6IFR5cGVFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcg
J3N0cmljdC5iaW5kKHRydWUpJykKLUZBSUwgc3VjY2Vzc2Z1bGx5UGFyc2VkIHNob3VsZCBiZSB0
cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCku
CitQQVNTIHRydWUgPT09IHRydWUKK1BBU1MgNDIgPT09IDQyCitQQVNTICA9PT0gCitQQVNTIG51
bGwgPT09IG51bGwKK1BBU1MgdW5kZWZpbmVkID09PSB1bmRlZmluZWQKK1BBU1MgW29iamVjdCBP
YmplY3RdID09PSBbb2JqZWN0IE9iamVjdF0KK1BBU1MgdHJ1ZSA9PT0gdHJ1ZQorUEFTUyB0cnVl
ID09PSB0cnVlCitQQVNTIHRydWUgPT09IHRydWUKK1BBU1MgW29iamVjdCBET01XaW5kb3ddID09
PSBbb2JqZWN0IERPTVdpbmRvd10KK1BBU1MgW29iamVjdCBET01XaW5kb3ddID09PSBbb2JqZWN0
IERPTVdpbmRvd10KK1BBU1MgW29iamVjdCBPYmplY3RdID09PSBbb2JqZWN0IE9iamVjdF0KKyBQ
QVNTRUQhIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2Z1bmN0aW9uLWJpbmQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvZnVuY3Rp
b24tYmluZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRl
c3RzL2Z1bmN0aW9uLWJpbmQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKK2Rlc2Ny
aXB0aW9uKCJUZXN0cyBGdW5jdGlvbi5iaW5kLiIpOworCit2YXIgcmVzdWx0OworCitmdW5jdGlv
biBGKHgsIHkpCit7CisgICAgcmVzdWx0ID0gdGhpcyArICIgLT4geDoiICsgeCArICIsIHk6IiAr
IHk7Cit9CisKK0cgPSBGLmJpbmQoIidhJyIsICInYiciKTsKK0ggPSBHLmJpbmQoIidDYW5ub3Qg
cmViaW5kIHRoaXMhJyIsICInYyciKTsKKworRigxLDIpOworc2hvdWxkQmUoInJlc3VsdCIsICci
W29iamVjdCBET01XaW5kb3ddIC0+IHg6MSwgeToyIicpOworRygxLDIpOworc2hvdWxkQmUoInJl
c3VsdCIsICciXCdhXCcgLT4geDpcJ2JcJywgeToxIicpOworSCgxLDIpOworc2hvdWxkQmUoInJl
c3VsdCIsICciXCdhXCcgLT4geDpcJ2JcJywgeTpcJ2NcJyInKTsKKwordmFyIGYgPSBuZXcgRigx
LDIpOworc2hvdWxkQmUoInJlc3VsdCIsICciW29iamVjdCBPYmplY3RdIC0+IHg6MSwgeToyIicp
OwordmFyIGcgPSBuZXcgRygxLDIpOworc2hvdWxkQmUoInJlc3VsdCIsICciW29iamVjdCBPYmpl
Y3RdIC0+IHg6XCdiXCcsIHk6MSInKTsKK3ZhciBoID0gbmV3IEgoMSwyKTsKK3Nob3VsZEJlKCJy
ZXN1bHQiLCAnIltvYmplY3QgT2JqZWN0XSAtPiB4OlwnYlwnLCB5OlwnY1wnIicpOworCisvLyBP
YmplY3RzIGYgJiBnICYgaCBhcmUgYWxsIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBGLCBHJ3MgSGFz
SW5zdGFuY2UgbWV0aG9kCisvLyBhY3R1YWxseSBpcyBjaGVja2luZyB3aGV0aGVyIHRoZSBhcmd1
bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBGLCBhbmQgSCdzCisvLyBIYXNJbnN0YW5jZSBjYWxscyBH
J3Mgd2hpY2ggY2FsbHMgRidzIQorc2hvdWxkQmVUcnVlKCdmIGluc3RhbmNlb2YgRicpOworc2hv
dWxkQmVUcnVlKCdmIGluc3RhbmNlb2YgRycpOworc2hvdWxkQmVUcnVlKCdmIGluc3RhbmNlb2Yg
SCcpOworc2hvdWxkQmVUcnVlKCdnIGluc3RhbmNlb2YgRicpOworc2hvdWxkQmVUcnVlKCdnIGlu
c3RhbmNlb2YgRycpOworc2hvdWxkQmVUcnVlKCdnIGluc3RhbmNlb2YgSCcpOworc2hvdWxkQmVU
cnVlKCdoIGluc3RhbmNlb2YgRicpOworc2hvdWxkQmVUcnVlKCdoIGluc3RhbmNlb2YgRycpOwor
c2hvdWxkQmVUcnVlKCdoIGluc3RhbmNlb2YgSCcpOworCisvLyBCb3VuZCBmdW5jdGlvbnMgZG9u
J3QgaGF2ZSBhICdwcm90b3R5cGUnIHByb3BlcnR5Lgorc2hvdWxkQmVUcnVlKCcicHJvdG90eXBl
IiBpbiBGJyk7CitzaG91bGRCZUZhbHNlKCcicHJvdG90eXBlIiBpbiBHJyk7CitzaG91bGRCZUZh
bHNlKCcicHJvdG90eXBlIiBpbiBIJyk7CisKKy8vIFRoZSBvYmplY3QgcGFzc2VkIHRvIGJpbmQg
YXMgJ3RoaXMnIG11c3QgYmUgY2FsbGFibGUuCitzaG91bGRUaHJvdygnRnVuY3Rpb24uYmluZC5j
YWxsKHVuZGVmaW5lZCknKTsKKy8vIE9iamVjdHMgdGhhdCBhbGxvdyBjYWxsIGJ1dCBub3QgY29u
c3RydWN0IGNhbiBiZSBib3VuZCwgYnV0IHNob3VsZCB0aHJvdyBpZiB1c2VkIHdpdGggbmV3Lgor
dmFyIGFiY0F0ID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQXQuYmluZCgiYWJjIik7CitzaG91bGRC
ZSgnYWJjQXQoMSknLCAnImIiJyk7CitzaG91bGRUaHJvdygnbmV3IGFiY0F0KDEpJyk7CisKKy8v
IFRoaXMgZXhwb3NlcyBhIGJ1ZyBpbiBvdXIgaW1wbGVtZW50YXRpb24gb2YgaW5zdGFuY2VvZi4g
VGhlIHByb3RvdHlwZSBwcm9wZXJ0eSBzaG91bGQgbm90CisvLyBiZSBhY2Nlc3NlZCB1bnRpbCBh
ZnRlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBkZWZhdWx0IEhhc0luc3RhbmNlIGlzIGJlaW5n
IGV4ZWN1dGVkLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4
NjU2Cit2YXIgYm91bmRGdW5jdGlvblByb3RvdHlwZUFjY2Vzc2VkID0gZmFsc2U7CitQID0gRi5i
aW5kKDEsMik7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoUCwgJ3Byb3RvdHlwZScsIHsgZ2V0OmZ1
bmN0aW9uKCl7IGJvdW5kRnVuY3Rpb25Qcm90b3R5cGVBY2Nlc3NlZCA9IHRydWU7IH0gfSk7Citm
IGluc3RhbmNlb2YgUDsKK3Nob3VsZEJlRmFsc2UoJ2JvdW5kRnVuY3Rpb25Qcm90b3R5cGVBY2Nl
c3NlZCcpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRl
c3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjIuMy4zLTQtMzgtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjIuMy4z
LTQtMzgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVz
dGNlbnRlci9KYXZhc2NyaXB0LzE1LjIuMy4zLTQtMzgtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBCiAKIAogUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCi1GQUlM
IEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyBF
UzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC8xNS4zLjQuNS0wLTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTAtMS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMC0xLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAgT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiAKIFBBU1MgRVM1SGFybmVz
cy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQg
c2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUg
dW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMC0yLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0w
LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNl
bnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTAtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVI
YXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFu
KS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnBy
ZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCiBGQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91
bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRl
ZmluZWQpLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRU
ZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTEtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41
LTItMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0
Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi0xLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVT
NUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xl
YW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3Mu
dGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5l
ZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3Nl
ZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3Rz
L2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItMi1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi0y
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50
ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFy
bmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbiku
IFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0
UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChv
ZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlz
IHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0
ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi0zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9K
YXZhc2NyaXB0LzE1LjMuNC41LTItMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMs
OCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNz
LnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2Fz
IHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNz
ZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5
cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1
ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFz
Y3JpcHQvMTUuMy40LjUtMi00LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICsz
LDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJl
Y29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5k
ZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBz
aG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1
bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQ
QVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRl
ci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi01LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC8xNS4zLjQuNS0yLTUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBA
QAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25k
aXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmlu
ZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3Vs
ZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVm
aW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1Mg
RVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0ph
dmFzY3JpcHQvMTUuMy40LjUtMi02LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTYtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1
LjMuNC41LTItNi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlv
blBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAo
b2YgdHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJl
IHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVk
KS4KK1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVI
YXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC8xNS4zLjQuNS0yLTctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItNy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40
LjUtMi03LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFz
c2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0
eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1
ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgor
UEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5l
c3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
IFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0
LzE1LjMuNC41LTItOC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0
ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMi04LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
OTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0y
LTgtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQg
c2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUg
dW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChv
ZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNT
IEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50
ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMi05LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0yLTktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0
MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTItOS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91
bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRl
ZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5
cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1
SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQ
YXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENP
TVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQu
NS04LTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRl
ci9KYXZhc2NyaXB0LzE1LjMuNC41LTgtMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQor
KysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOC0xLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBi
ZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5l
ZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBi
b29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJu
ZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3Nl
ZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExF
VEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTgt
Mi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0ph
dmFzY3JpcHQvMTUuMy40LjUtOC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBM
YXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS04LTItZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRy
dWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4K
LUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xl
YW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3Mu
cHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlz
IHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJ
bmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOS0xLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC8xNS4zLjQuNS05LTEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExheW91
dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTktMS1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAo
b2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgotRkFJ
TCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbiku
IFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVzcy5wcmVj
b25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1
ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4
OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS05LTItZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0
LzE1LjMuNC41LTktMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQorKysgTGF5b3V0VGVz
dHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtOS0yLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAog
Ci1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0
eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVT
NUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2Fz
IHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRp
dGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExh
eW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItMS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQv
MTUuMy40LjUtMTMuYi0xLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3NDApCisrKyBMYXlvdXRU
ZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTEtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgc2hvdWxkIGJlIHRydWUg
KG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KLUZB
SUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4p
LiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIEVTNUhhcm5lc3MucHJl
Y29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50ZXN0UGFzc2VkIGlzIHRy
dWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRl
eDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi0yLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC8xNS4zLjQuNS0xMy5iLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NTc0MCkKKysrIExh
eW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTEzLmItMi1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBzaG91bGQgYmUg
dHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQp
LgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9v
bGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BBU1MgRVM1SGFybmVz
cy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNzLnRlc3RQYXNzZWQg
aXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5i
LTMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9K
YXZhc2NyaXB0LzE1LjMuNC41LTEzLmItMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDk1NzQwKQor
KysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi0zLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIHNob3Vs
ZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVm
aW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlw
ZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBFUzVI
YXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5lc3MudGVzdFBh
c3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09N
UExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41
LTEzLmItNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2Vu
dGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTMuYi00LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTU3
NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5i
LTQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQg
c2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUg
dW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlIChv
ZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNT
IEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVzcy50
ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUu
My40LjUtMTMuYi01LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pZXRl
c3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xMy5iLTUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41
LTEzLmItNS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBh
c3NlZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2Yg
dHlwZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRy
dWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4K
K1BBU1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJu
ZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC8xNS4zLjQuNS0xNS0xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9p
ZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQuNS0xNS0xLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gOTU3NDApCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS4zLjQu
NS0xNS0xLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDggQEAKIE9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1GQUlMIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFz
c2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0
eXBlIHVuZGVmaW5lZCkuCi1GQUlMIEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1
ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgor
UEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCitQQVNTIEVTNUhhcm5l
c3MudGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
IFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0
LzE1LjMuNC41LTE1LTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41LTE1LTItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA5NTc0MCkKKysrIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjMuNC41
LTE1LTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsOCBAQAogT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLUZBSUwgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNz
ZWQgc2hvdWxkIGJlIHRydWUgKG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5
cGUgdW5kZWZpbmVkKS4KLUZBSUwgRVM1SGFybmVzcy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVl
IChvZiB0eXBlIGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQ
QVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKK1BBU1MgRVM1SGFybmVz
cy50ZXN0UGFzc2VkIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAog
VEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQv
MTUuMy40LjUtMTYtMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0
ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUtMTYtMS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDk1NzQwKQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuMy40LjUt
MTYtMS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw4IEBACiBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCiAKIAotRkFJTCBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3Nl
ZCBzaG91bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIHVuZGVmaW5lZCAob2YgdHlw
ZSB1bmRlZmluZWQpLgotRkFJTCBFUzVIYXJuZXNzLnRlc3RQYXNzZWQgc2hvdWxkIGJlIHRydWUg
KG9mIHR5cGUgYm9vbGVhbikuIFdhcyB1bmRlZmluZWQgKG9mIHR5cGUgdW5kZWZpbmVkKS4KK1BB
U1MgRVM1SGFybmVzcy5wcmVjb25kaXRpb25QYXNzZWQgaXMgdHJ1ZQorUEFTUyBFUzVIYXJuZXNz
LnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCg==
</data>
<flag name="review"
          id="105350"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>