<?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>32563</bug_id>
          
          <creation_ts>2009-12-15 09:13:46 -0800</creation_ts>
          <short_desc>[V8] Generate toV8 conversion helpers, a la JSC bindings.</short_desc>
          <delta_ts>2010-02-04 00:40:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>33677</dependson>
          <blocked>32630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>antonm</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171898</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-12-15 09:13:46 -0800</bug_when>
    <thetext>This is going to be sooo pretty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180322</commentid>
    <comment_count>1</comment_count>
      <attachid>46481</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-13 12:05:17 -0800</bug_when>
    <thetext>Created attachment 46481
Generate toNative() converter (toV8() will be done in a later patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180353</commentid>
    <comment_count>2</comment_count>
      <attachid>46481</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-13 12:45:08 -0800</bug_when>
    <thetext>Comment on attachment 46481
Generate toNative() converter (toV8() will be done in a later patch)

Going native on V8 bindings, eh? :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180400</commentid>
    <comment_count>3</comment_count>
      <attachid>46481</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-13 14:11:23 -0800</bug_when>
    <thetext>Comment on attachment 46481
Generate toNative() converter (toV8() will be done in a later patch)

http://trac.webkit.org/changeset/53204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183811</commentid>
    <comment_count>4</comment_count>
      <attachid>47228</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-22 14:44:32 -0800</bug_when>
    <thetext>Created attachment 47228
First attempt at generating toV8()

This very well may not be the right answer, but it&apos;s one way to generate toV8() converters.  This patch is primarily just generating the converters and making the generated bindings use them.  The custom bindings still use the old converters.

The biggest sticking point of this idea is that it moves a lot of the special cases that currently live in V8DOMWrapper.cpp into CodeGeneratorV8.pm.  I could see a case against that :)

Input appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183821</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-22 15:07:30 -0800</bug_when>
    <thetext>Attachment 47228 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/206131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183822</commentid>
    <comment_count>6</comment_count>
      <attachid>47228</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-22 15:10:51 -0800</bug_when>
    <thetext>Comment on attachment 47228
First attempt at generating toV8()

Ewww.  Obsoleting while I look into what happened here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184298</commentid>
    <comment_count>7</comment_count>
      <attachid>47352</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-25 09:43:17 -0800</bug_when>
    <thetext>Created attachment 47352
Attempt #1.1 at generating toV8()

I think (and hope) that I&apos;ve accounted for the differences between compiler nits now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184321</commentid>
    <comment_count>8</comment_count>
      <attachid>47352</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-25 10:08:50 -0800</bug_when>
    <thetext>Comment on attachment 47352
Attempt #1.1 at generating toV8()

After discussion with dglazkov, we agree that this is almost certainly not the right answer, so obsoleting this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185152</commentid>
    <comment_count>9</comment_count>
      <attachid>47550</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-27 11:02:03 -0800</bug_when>
    <thetext>Created attachment 47550
toV8() Attempt #2.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185161</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-27 11:38:04 -0800</bug_when>
    <thetext>Attachment 47550 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/216152</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185173</commentid>
    <comment_count>11</comment_count>
      <attachid>47550</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-27 11:58:56 -0800</bug_when>
    <thetext>Comment on attachment 47550
toV8() Attempt #2.0

I appear to have forgotten an #if ENABLED guard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185280</commentid>
    <comment_count>12</comment_count>
      <attachid>47576</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-27 16:51:14 -0800</bug_when>
    <thetext>Created attachment 47576
toV8() Attempt #3.0

This is my current thought for handling the casting problems for HTMLElement and SVGElement. I just wanted to get it some eyeballs, since I&apos;ll be out of office tomorrow.  It changes dom/make_names.pl to support generating wrapping code for V8 (it currently is hard-coded for JSC) and therefore uses a nearly identical technique to what JSC does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185427</commentid>
    <comment_count>13</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-01-28 04:34:49 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=47576) [details]
&gt; toV8() Attempt #3.0
&gt; 
&gt; This is my current thought for handling the casting problems for HTMLElement
&gt; and SVGElement. I just wanted to get it some eyeballs, since I&apos;ll be out of
&gt; office tomorrow.  It changes dom/make_names.pl to support generating wrapping
&gt; code for V8 (it currently is hard-coded for JSC) and therefore uses a nearly
&gt; identical technique to what JSC does.

Several concerns.

1) object wrapping is very performance critical, so, please, verify that your patch doesn&apos;t affect performance;  and it might be better to have separation of create new vs. create on higher level (not threading the flag);

2) former V8DOMWrapper::convertNode... is pretty complicated code and lifting it as a whole into code generator looks problematic for me.  For example, any experiment would lead to rebuild all and compile-run cycle would be very long. Overall I&apos;d prefer to keep generated non-trivial code at the minimum.  Is it possible to keep most of conversion logic in plain C++ and only invoke necessary bits from codegen?  For example:

 1983   if (V8IsolatedContext::getEntered())
 1984     proxy = 0;
 1985   else if (!proxy)
 1986     proxy = V8Proxy::retrieve();
 1987 
 1988   if (proxy)
 1989     wrapper = proxy-&gt;windowShell()-&gt;createWrapperFromCache(${wrapperType});
 1990   else
 1991     wrapper = SafeAllocation::newInstance(V8DOMWrapper::getTemplate(${wrapperType})-&gt;GetFunction());
 1992   if (!wrapper.IsEmpty())
 1993     V8DOMWrapper::setDOMWrapper(wrapper, V8ClassIndex::ToInt(${wrapperType}), impl);
 1994 END
 1995 

This looks like a perfect inline function on its own.

3)

 sub HasCustomToV8Implementation {
 2043     $dataNode = shift;
 2044     $interfaceName = shift;
 2045     
 2046     # We generate a custom converter (but JSC doesn&apos;t) for the following:
 2047     return 1 if $interfaceName eq &quot;BarInfo&quot;;
 2048     return 1 if $interfaceName eq &quot;CSSStyleSheet&quot;;
 2049     return 1 if $interfaceName eq &quot;CanvasPixelArray&quot;;
 2050     return 1 if $interfaceName eq &quot;Console&quot;;
 2051     return 1 if $interfaceName eq &quot;DOMSelection&quot;;
 2052     return 1 if $interfaceName eq &quot;DOMWindow&quot;;
 2053     return 1 if $interfaceName eq &quot;Element&quot;;
 2054     return 1 if $interfaceName eq &quot;Location&quot;;
 2055     return 1 if $interfaceName eq &quot;HTMLDocument&quot;;
 2056     return 1 if $interfaceName eq &quot;HTMLElement&quot;;
 2057     return 1 if $interfaceName eq &quot;History&quot;;
 2058     return 1 if $interfaceName eq &quot;NamedNodeMap&quot;;
 2059     return 1 if $interfaceName eq &quot;Navigator&quot;;
 2060     return 1 if $interfaceName eq &quot;SVGDocument&quot;;
 2061     return 1 if $interfaceName eq &quot;SVGElement&quot;;
 2062     return 1 if $interfaceName eq &quot;Screen&quot;;
 2063     
 2064     # We don&apos;t generate a custom converter (but JSC does) for the following:
 2065     return 0 if $interfaceName eq &quot;AbstractWorker&quot;;
 2066     return 0 if $interfaceName eq &quot;CanvasRenderingContext&quot;;
 2067     return 0 if $interfaceName eq &quot;HTMLCollection&quot;;
 2068     return 0 if $interfaceName eq &quot;ImageData&quot;;
 2069     return 0 if $interfaceName eq &quot;SVGElementInstance&quot;;
 2070 
 2071     # For everything else, do what JSC does.
 2072     return $dataNode-&gt;extendedAttributes-&gt;{&quot;CustomToJS&quot;};
 2073 }
 2074 

Shouldn&apos;t that be an attribute in IDL?

Same question for

 2088 sub IsActiveDomType
 2089 {
 2090     my $type = shift;
 2091     return 1 if $type eq &quot;MessagePort&quot;;
 2092     return 1 if $type eq &quot;XMLHttpRequest&quot;;
 2093     return 1 if $type eq &quot;WebSocket&quot;;
 2094     return 1 if $type eq &quot;Worker&quot;;
 2095     return 1 if $type eq &quot;SharedWorker&quot;;
 2096     return 0;
 2097 }

4) This change from double to float, is it fine?  Could it be done in a separate CL?

5)

 1942   //if (!impl)
 1943   //  return v8::Null();

should be probably removed.

And thanks a lot for keeping me in the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185533</commentid>
    <comment_count>14</comment_count>
      <attachid>47576</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-28 10:21:01 -0800</bug_when>
    <thetext>Comment on attachment 47576
toV8() Attempt #3.0

Overall, I think the 3.0 is definitely better than the 1.0, but Anton has good comments and I&apos;ll go with him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185910</commentid>
    <comment_count>15</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-29 10:38:28 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; 1) object wrapping is very performance critical, so, please, verify that your
&gt; patch doesn&apos;t affect performance;  and it might be better to have separation of
&gt; create new vs. create on higher level (not threading the flag);
&gt; 

Will do on the perf tests.  For the separation of new vs. existing objects, I don&apos;t think it&apos;s feasible.  Typically, we start with a return type of something like &quot;Element&quot; for items that are labelled &quot;ReturnsNew&quot; in an IDL.  So, e.g., toV8(Element*) is calling toV8(HTMLElement*) is calling toV8(HTMLSomeOtherKindOfElement*), and I think it&apos;s going to make the code even uglier than it is currently to have a separate &quot;create new object&quot; code path.

&gt; 2) former V8DOMWrapper::convertNode... is pretty complicated code and lifting
&gt; it as a whole into code generator looks problematic for me.  For example, any
&gt; experiment would lead to rebuild all and compile-run cycle would be very long.
&gt; Overall I&apos;d prefer to keep generated non-trivial code at the minimum.  Is it
&gt; possible to keep most of conversion logic in plain C++ and only invoke
&gt; necessary bits from codegen?  For example:
&gt; 
&gt;  1983   if (V8IsolatedContext::getEntered())
&gt;  1984     proxy = 0;
&gt;  1985   else if (!proxy)
&gt;  1986     proxy = V8Proxy::retrieve();
&gt;  1987 
&gt;  1988   if (proxy)
&gt;  1989     wrapper =
&gt; proxy-&gt;windowShell()-&gt;createWrapperFromCache(${wrapperType});
&gt;  1990   else
&gt;  1991     wrapper =
&gt; SafeAllocation::newInstance(V8DOMWrapper::getTemplate(${wrapperType})-&gt;GetFunction());
&gt;  1992   if (!wrapper.IsEmpty())
&gt;  1993     V8DOMWrapper::setDOMWrapper(wrapper,
&gt; V8ClassIndex::ToInt(${wrapperType}), impl);
&gt;  1994 END
&gt;  1995 
&gt; 
&gt; This looks like a perfect inline function on its own.

Yeah, I got experimenting with generating that.  I think inlining is the right answer after all.  That block is precisely what V8DOMWrapper::instantiateV8Object() does.

&gt; 
&gt; 3)
&gt; 
&gt;  sub HasCustomToV8Implementation {
&gt;  2043     $dataNode = shift;
&gt;  2044     $interfaceName = shift;
&gt;  2045     
&gt;  2046     # We generate a custom converter (but JSC doesn&apos;t) for the following:
&gt;  2047     return 1 if $interfaceName eq &quot;BarInfo&quot;;
&gt;  2048     return 1 if $interfaceName eq &quot;CSSStyleSheet&quot;;
&gt;  2049     return 1 if $interfaceName eq &quot;CanvasPixelArray&quot;;
&gt;  2050     return 1 if $interfaceName eq &quot;Console&quot;;
&gt;  2051     return 1 if $interfaceName eq &quot;DOMSelection&quot;;
&gt;  2052     return 1 if $interfaceName eq &quot;DOMWindow&quot;;
&gt;  2053     return 1 if $interfaceName eq &quot;Element&quot;;
&gt;  2054     return 1 if $interfaceName eq &quot;Location&quot;;
&gt;  2055     return 1 if $interfaceName eq &quot;HTMLDocument&quot;;
&gt;  2056     return 1 if $interfaceName eq &quot;HTMLElement&quot;;
&gt;  2057     return 1 if $interfaceName eq &quot;History&quot;;
&gt;  2058     return 1 if $interfaceName eq &quot;NamedNodeMap&quot;;
&gt;  2059     return 1 if $interfaceName eq &quot;Navigator&quot;;
&gt;  2060     return 1 if $interfaceName eq &quot;SVGDocument&quot;;
&gt;  2061     return 1 if $interfaceName eq &quot;SVGElement&quot;;
&gt;  2062     return 1 if $interfaceName eq &quot;Screen&quot;;
&gt;  2063     
&gt;  2064     # We don&apos;t generate a custom converter (but JSC does) for the
&gt; following:
&gt;  2065     return 0 if $interfaceName eq &quot;AbstractWorker&quot;;
&gt;  2066     return 0 if $interfaceName eq &quot;CanvasRenderingContext&quot;;
&gt;  2067     return 0 if $interfaceName eq &quot;HTMLCollection&quot;;
&gt;  2068     return 0 if $interfaceName eq &quot;ImageData&quot;;
&gt;  2069     return 0 if $interfaceName eq &quot;SVGElementInstance&quot;;
&gt;  2070 
&gt;  2071     # For everything else, do what JSC does.
&gt;  2072     return $dataNode-&gt;extendedAttributes-&gt;{&quot;CustomToJS&quot;};
&gt;  2073 }
&gt;  2074 
&gt; 
&gt; Shouldn&apos;t that be an attribute in IDL?
&gt; 
&gt; Same question for
&gt; 
&gt;  2088 sub IsActiveDomType
&gt;  2089 {
&gt;  2090     my $type = shift;
&gt;  2091     return 1 if $type eq &quot;MessagePort&quot;;
&gt;  2092     return 1 if $type eq &quot;XMLHttpRequest&quot;;
&gt;  2093     return 1 if $type eq &quot;WebSocket&quot;;
&gt;  2094     return 1 if $type eq &quot;Worker&quot;;
&gt;  2095     return 1 if $type eq &quot;SharedWorker&quot;;
&gt;  2096     return 0;
&gt;  2097 }

Adding FIXMEs for these.  That may be the right long-term solution.

&gt; 
&gt; 4) This change from double to float, is it fine?  Could it be done in a
&gt; separate CL?

We&apos;re pretty loose with double&lt;-&gt;float conversion in here, and my changes caused some of those to become compile errors, so I figured standardizing made sense.  All the layout tests still pass, but if there&apos;s something else you would like me to do to verify that this change is fine, let me know.

&gt; 
&gt; 5)
&gt; 
&gt;  1942   //if (!impl)
&gt;  1943   //  return v8::Null();
&gt; 
&gt; should be probably removed.

Doh.

&gt; 
&gt; And thanks a lot for keeping me in the loop.

Next patch will be uploaded momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185911</commentid>
    <comment_count>16</comment_count>
      <attachid>47721</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-29 10:39:19 -0800</bug_when>
    <thetext>Created attachment 47721
Attempt #3.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186354</commentid>
    <comment_count>17</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-02-01 04:02:31 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; 1) object wrapping is very performance critical, so, please, verify that your
&gt; &gt; patch doesn&apos;t affect performance;  and it might be better to have separation of
&gt; &gt; create new vs. create on higher level (not threading the flag);
&gt; &gt; 
&gt; 
&gt; Will do on the perf tests.  For the separation of new vs. existing objects, I
&gt; don&apos;t think it&apos;s feasible.  Typically, we start with a return type of something
&gt; like &quot;Element&quot; for items that are labelled &quot;ReturnsNew&quot; in an IDL.  So, e.g.,
&gt; toV8(Element*) is calling toV8(HTMLElement*) is calling
&gt; toV8(HTMLSomeOtherKindOfElement*), and I think it&apos;s going to make the code even
&gt; uglier than it is currently to have a separate &quot;create new object&quot; code path.
&gt;

From my experience, this separation is really important.  I don&apos;t quite understand why it cannot be implemented---after all the main difference is absence of check if object is already wrapped or not.  Maybe I am missing some context here.

&gt; &gt; 2) former V8DOMWrapper::convertNode... is pretty complicated code and lifting
&gt; &gt; it as a whole into code generator looks problematic for me.  For example, any
&gt; &gt; experiment would lead to rebuild all and compile-run cycle would be very long.
&gt; &gt; Overall I&apos;d prefer to keep generated non-trivial code at the minimum.  Is it
&gt; &gt; possible to keep most of conversion logic in plain C++ and only invoke
&gt; &gt; necessary bits from codegen?  For example:
&gt; &gt; 
&gt; &gt;  1983   if (V8IsolatedContext::getEntered())
&gt; &gt;  1984     proxy = 0;
&gt; &gt;  1985   else if (!proxy)
&gt; &gt;  1986     proxy = V8Proxy::retrieve();
&gt; &gt;  1987 
&gt; &gt;  1988   if (proxy)
&gt; &gt;  1989     wrapper =
&gt; &gt; proxy-&gt;windowShell()-&gt;createWrapperFromCache(${wrapperType});
&gt; &gt;  1990   else
&gt; &gt;  1991     wrapper =
&gt; &gt; SafeAllocation::newInstance(V8DOMWrapper::getTemplate(${wrapperType})-&gt;GetFunction());
&gt; &gt;  1992   if (!wrapper.IsEmpty())
&gt; &gt;  1993     V8DOMWrapper::setDOMWrapper(wrapper,
&gt; &gt; V8ClassIndex::ToInt(${wrapperType}), impl);
&gt; &gt;  1994 END
&gt; &gt;  1995 
&gt; &gt; 
&gt; &gt; This looks like a perfect inline function on its own.
&gt; 
&gt; Yeah, I got experimenting with generating that.  I think inlining is the right
&gt; answer after all.  That block is precisely what
&gt; V8DOMWrapper::instantiateV8Object() does.
&gt; 
&gt; &gt; 
&gt; &gt; 3)
&gt; &gt; 
&gt; &gt;  sub HasCustomToV8Implementation {
&gt; &gt;  2043     $dataNode = shift;
&gt; &gt;  2044     $interfaceName = shift;
&gt; &gt;  2045     
&gt; &gt;  2046     # We generate a custom converter (but JSC doesn&apos;t) for the following:
&gt; &gt;  2047     return 1 if $interfaceName eq &quot;BarInfo&quot;;
&gt; &gt;  2048     return 1 if $interfaceName eq &quot;CSSStyleSheet&quot;;
&gt; &gt;  2049     return 1 if $interfaceName eq &quot;CanvasPixelArray&quot;;
&gt; &gt;  2050     return 1 if $interfaceName eq &quot;Console&quot;;
&gt; &gt;  2051     return 1 if $interfaceName eq &quot;DOMSelection&quot;;
&gt; &gt;  2052     return 1 if $interfaceName eq &quot;DOMWindow&quot;;
&gt; &gt;  2053     return 1 if $interfaceName eq &quot;Element&quot;;
&gt; &gt;  2054     return 1 if $interfaceName eq &quot;Location&quot;;
&gt; &gt;  2055     return 1 if $interfaceName eq &quot;HTMLDocument&quot;;
&gt; &gt;  2056     return 1 if $interfaceName eq &quot;HTMLElement&quot;;
&gt; &gt;  2057     return 1 if $interfaceName eq &quot;History&quot;;
&gt; &gt;  2058     return 1 if $interfaceName eq &quot;NamedNodeMap&quot;;
&gt; &gt;  2059     return 1 if $interfaceName eq &quot;Navigator&quot;;
&gt; &gt;  2060     return 1 if $interfaceName eq &quot;SVGDocument&quot;;
&gt; &gt;  2061     return 1 if $interfaceName eq &quot;SVGElement&quot;;
&gt; &gt;  2062     return 1 if $interfaceName eq &quot;Screen&quot;;
&gt; &gt;  2063     
&gt; &gt;  2064     # We don&apos;t generate a custom converter (but JSC does) for the
&gt; &gt; following:
&gt; &gt;  2065     return 0 if $interfaceName eq &quot;AbstractWorker&quot;;
&gt; &gt;  2066     return 0 if $interfaceName eq &quot;CanvasRenderingContext&quot;;
&gt; &gt;  2067     return 0 if $interfaceName eq &quot;HTMLCollection&quot;;
&gt; &gt;  2068     return 0 if $interfaceName eq &quot;ImageData&quot;;
&gt; &gt;  2069     return 0 if $interfaceName eq &quot;SVGElementInstance&quot;;
&gt; &gt;  2070 
&gt; &gt;  2071     # For everything else, do what JSC does.
&gt; &gt;  2072     return $dataNode-&gt;extendedAttributes-&gt;{&quot;CustomToJS&quot;};
&gt; &gt;  2073 }
&gt; &gt;  2074 
&gt; &gt; 
&gt; &gt; Shouldn&apos;t that be an attribute in IDL?
&gt; &gt; 
&gt; &gt; Same question for
&gt; &gt; 
&gt; &gt;  2088 sub IsActiveDomType
&gt; &gt;  2089 {
&gt; &gt;  2090     my $type = shift;
&gt; &gt;  2091     return 1 if $type eq &quot;MessagePort&quot;;
&gt; &gt;  2092     return 1 if $type eq &quot;XMLHttpRequest&quot;;
&gt; &gt;  2093     return 1 if $type eq &quot;WebSocket&quot;;
&gt; &gt;  2094     return 1 if $type eq &quot;Worker&quot;;
&gt; &gt;  2095     return 1 if $type eq &quot;SharedWorker&quot;;
&gt; &gt;  2096     return 0;
&gt; &gt;  2097 }
&gt; 
&gt; Adding FIXMEs for these.  That may be the right long-term solution.
&gt; 
&gt; &gt; 
&gt; &gt; 4) This change from double to float, is it fine?  Could it be done in a
&gt; &gt; separate CL?
&gt; 
&gt; We&apos;re pretty loose with double&lt;-&gt;float conversion in here, and my changes
&gt; caused some of those to become compile errors, so I figured standardizing made
&gt; sense.  All the layout tests still pass, but if there&apos;s something else you
&gt; would like me to do to verify that this change is fine, let me know.

Makes sense to me, thanks for clarifications.  I don&apos;t know how you feel about it, but this unification might be better done with a separate change, before this change goes in---it&apos;s already complicated enough.  But that&apos;s completely up to you.

New batch:

1)
 842             } else {
 843                 print F &lt;&lt;END

tabs got into your files---beware!

2) current state of toV8Helper might have performance implications---you could lookup a map to put object into twice---first time to get a map to check if wrapper is present and second time to add a wrapper into the map.  You might be better storing this map into a local variable and reuse it later (cf. to the current implementation.)

Note as well, that recently another fast check was added for the case of the Node---we check a pointer of the object itself (please let me know if you need more details.)

3)

112          ASSERT(V8DOMWrapper::domWrapperType(info.Holder()) == V8ClassIndex::NODE);

Why this is removed?

4)

 196     default: break; // XPATH_NAMESPACE_NODE

What does this comment mean?

5)
79      ASSERT(V8DOMWrapper::domWrapperType(info.Holder()) == V8ClassIndex::NODE);

Ditto, why removed?

6) this

 61     v8::Handle&lt;v8::Object&gt; wrapper = getDOMObjectMap().get(impl);
 62     if (wrapper.IsEmpty()) {
 63         wrapper = V8Console::toV8Helper(impl);
 64         if (!wrapper.IsEmpty())
 65             V8DOMWrapper::setHiddenWindowReference(impl-&gt;frame(), V8DOMWindow::consoleIndex, wrapper);
 66     }

 and owner handling seems a pretty common pattern.  Maybe generalize it in this CL?  Or you&apos;d better postpone it for some further time?

7)

 90     bindings/v8/custom/V8BarInfoCustom.cpp \
 91     bindings/v8/custom/V8CSSRuleCustom.cpp \

here and below, why additional indent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186497</commentid>
    <comment_count>18</comment_count>
      <attachid>47721</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-01 11:24:24 -0800</bug_when>
    <thetext>Comment on attachment 47721
Attempt #3.1

Obsoleting this patch, I need to make a couple more minor changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186520</commentid>
    <comment_count>19</comment_count>
      <attachid>47864</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-01 12:32:44 -0800</bug_when>
    <thetext>Created attachment 47864
Attempt #3.2

The two big changes in this version are:
1. Renamed toV8Helper() to wrap()
2. Integrated http://trac.webkit.org/changeset/53944 into the generated node wrapping functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186532</commentid>
    <comment_count>20</comment_count>
      <attachid>47864</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-01 12:47:49 -0800</bug_when>
    <thetext>Comment on attachment 47864
Attempt #3.2

Yay! r=me, after fixing:

&gt; +    switch (impl-&gt;pathSegType()) {
&gt; +    case SVGPathSeg::PATHSEG_CLOSEPATH:                    return toV8(static_cast&lt;SVGPathSegClosePath*&gt;(impl));

I know you copied this over, but this needs to be in WebKit style, with line breaks/indents.

&gt; Index: WebCore/Android.v8bindings.mk
&gt; ===================================================================
&gt; --- WebCore/Android.v8bindings.mk	(revision 54136)
&gt; +++ WebCore/Android.v8bindings.mk	(working copy)
&gt; @@ -87,8 +87,13 @@
&gt;  	\
&gt;  	bindings/v8/custom/V8AbstractWorkerCustom.cpp \
&gt;  	bindings/v8/custom/V8AttrCustom.cpp \
&gt; +    bindings/v8/custom/V8BarInfoCustom.cpp \
&gt; +    bindings/v8/custom/V8CSSRuleCustom.cpp \
&gt;  	bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp \
&gt; +    bindings/v8/custom/V8CSSStyleSheetCustom.cpp \
&gt; +    bindings/v8/custom/V8CSSValueCustom.cpp \
&gt;  	bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp \
&gt; +    bindings/v8/custom/V8CanvasPixelArrayCustom.cpp \

Tabs in this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186974</commentid>
    <comment_count>21</comment_count>
      <attachid>47864</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-02 08:29:24 -0800</bug_when>
    <thetext>Comment on attachment 47864
Attempt #3.2

Landed in http://trac.webkit.org/changeset/54150 and http://trac.webkit.org/changeset/54153. Leaving bug open because we still need to switch the custom bindings over to using toV8().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187131</commentid>
    <comment_count>22</comment_count>
      <attachid>47974</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-02 14:06:17 -0800</bug_when>
    <thetext>Created attachment 47974
Switch custom bindings over to toV8()

Will run perf tests locally momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187161</commentid>
    <comment_count>23</comment_count>
      <attachid>47974</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-02 14:49:21 -0800</bug_when>
    <thetext>Comment on attachment 47974
Switch custom bindings over to toV8()

Hurray! I thereby deem this the coolest patch eva.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187176</commentid>
    <comment_count>24</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-02 15:24:39 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/54259</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187314</commentid>
    <comment_count>25</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-02-03 05:02:28 -0800</bug_when>
    <thetext>Committed r54278: &lt;http://trac.webkit.org/changeset/54278&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187327</commentid>
    <comment_count>26</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-02-03 05:50:42 -0800</bug_when>
    <thetext>I reverted this change as it seems to break chromium&apos;s unit tests. This is an example of the failures:

http://build.chromium.org/buildbot/try-server/buildstatus?builder=win&amp;number=17123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187508</commentid>
    <comment_count>27</comment_count>
      <attachid>48067</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-03 14:06:17 -0800</bug_when>
    <thetext>Created attachment 48067
Now without Chromium test failures!

Two changes:
1. Added some code to CodeGeneratorV8.pm to use WorkerContextExecutionProxy when necessary to actually do the wrapping instead of V8DOMWrapper.
2. Fixed a bug where I was incorrectly returning early in allowPopUp() in V8DOMWindowCustom.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187509</commentid>
    <comment_count>28</comment_count>
      <attachid>48067</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-02-03 14:10:08 -0800</bug_when>
    <thetext>Comment on attachment 48067
Now without Chromium test failures!

ok. Make sure to check w/ukai about WebSockets + Workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187513</commentid>
    <comment_count>29</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-03 14:35:00 -0800</bug_when>
    <thetext>Landed (again): http://trac.webkit.org/changeset/54305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187664</commentid>
    <comment_count>30</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-02-04 00:40:55 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Landed (again): http://trac.webkit.org/changeset/54305

It seems the roll succeeded this time. Thanks for the fix!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46481</attachid>
            <date>2010-01-13 12:05:17 -0800</date>
            <delta_ts>2010-01-13 14:11:22 -0800</delta_ts>
            <desc>Generate toNative() converter (toV8() will be done in a later patch)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>19318</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDEtMTMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
ZW5lcmF0ZSBhIGZ1bmN0aW9uIGluIHRoZSBWOCBiaW5kaW5ncyB0byBjb252ZXJ0IHY4IG9iamVj
dHMKKyAgICAgICAgdG8gbmF0aXZlIFdlYkNvcmUgb2JqZWN0cy4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBHZW5lcmF0ZSBhbmQgdXNlIHRvTmF0aXZl
KCkuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDogUmVtb3ZlIG1hbnVhbGx5
IGRlZmluZWQgY29udmVyc2lvbiBoZWxwcnMuCisgICAgICAgIChXZWJDb3JlOjpnZXRFbGVtZW50
U3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRFbGVtZW50U3RyaW5nQXR0cik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IFJlbW92ZSBtYW51YWxseSBkZWZpbmVk
IGNvbnZlcnNpb24gaGVscHJzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdy
YXBwZXIuaDogU3RpbGwgbmVlZCBhIG1hbnVhbGx5IGRlZmluZWQgY292ZXJzaW9uIGhlbHBlciBm
b3IgU1ZHUE9EVHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpWOFNWR1BPRFR5cGVXcmFwcGVyOjp0
b05hdGl2ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlckNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtQ2FsbGJhY2sp
OgorCiAyMDEwLTAxLTEzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE5vIHJldmlld2VyLiAgTW9yZSBvciBsZXNzIGEgYnVpbGQgZml4LiAgTXkgNTMxODAg
YnJva2Ugc29tZSAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQkocmV2aXNpb24gNTMxOTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMTMgKzI2NiwxNyBAQAogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD5cbiIpOwogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIjaW5jbHVkZSBcIlN0cmluZ0hhc2guaFwiXG4iKTsKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJWOEluZGV4LmhcIlxuIik7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgR2V0SGVhZGVyQ2xhc3NJbmNsdWRlKCRpbXBsQ2xhc3NOYW1l
KSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xuIik7
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNsYXNzTmFtZSB7XG4iKTsKKyAg
ICAKKyAgICBteSAkdG9OYXRpdmVSZXR1cm5UeXBlID0gR2V0UmV0dXJuVHlwZUZvclRvTmF0aXZl
KCRpbnRlcmZhY2VOYW1lKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKICBw
dWJsaWM6CiAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSk7CiAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
UmF3VGVtcGxhdGUoKTsKKyAgc3RhdGljICR7dG9OYXRpdmVSZXR1cm5UeXBlfSogdG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiBFTkQKIAogICAgIGlmICgkaW1wbENsYXNzTmFtZSBl
cSAiRE9NV2luZG93IikgewpAQCAtMzc1LDYgKzM3OSwxNyBAQAogICAgIHJldHVybiAoKTsKIH0K
IAorc3ViIEdldEhlYWRlckNsYXNzSW5jbHVkZQoreworICAgIG15ICRjbGFzc05hbWUgPSBzaGlm
dDsKKyAgICBpZiAoJGNsYXNzTmFtZSA9fiAvU1ZHUGF0aFNlZy8pIHsKKyAgICAgICAgJGNsYXNz
TmFtZSA9fiBzL0Fic3xSZWwvLzsKKyAgICB9CisgICAgcmV0dXJuICIiIGlmIChBdm9pZEluY2x1
c2lvbk9mVHlwZSgkY2xhc3NOYW1lKSk7CisgICAgcmV0dXJuICIjaW5jbHVkZSBcIlNWR0FuaW1h
dGVkVGVtcGxhdGUuaFwiXG4iIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUo
JGNsYXNzTmFtZSkpOworICAgIHJldHVybiAiI2luY2x1ZGUgXCIke2NsYXNzTmFtZX0uaFwiXG4i
OworfQorCiBzdWIgR2VuZXJhdGVIZWFkZXJDdXN0b21JbnRlcm5hbEZpZWxkSW5kaWNlcwogewog
ICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwpAQCAtNTIxLDI2ICs1MzYsNiBAQAogICAgIHJldHVy
biAwOwogfQogCi1zdWIgSG9sZGVyVG9OYXRpdmUKLXsKLSAgICBteSAkZGF0YU5vZGUgPSBzaGlm
dDsKLSAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15ICRjbGFzc0luZGV4ID0g
c2hpZnQ7Ci0gICAgbXkgJGhvbGRlciA9IHNoaWZ0IHx8ICJob2xkZXIiOyAgICMgb3B0aW9uYWwg
cGFyYW0KLQotICAgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSB2
OERPTVdyYXBwZXJUb05vZGU8JGltcGxDbGFzc05hbWU+KCRob2xkZXIpOwotRU5ECi0KLSAgICB9
IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAgJGlt
cGxDbGFzc05hbWUqIGltcCA9IHY4RE9NV3JhcHBlclRvPCRpbXBsQ2xhc3NOYW1lPihWOENsYXNz
SW5kZXg6OiRjbGFzc0luZGV4LCAkaG9sZGVyKTsKLUVORAotCi0gIH0KLX0KLQogc3ViIEdlbmVy
YXRlRG9tYWluU2FmZUZ1bmN0aW9uR2V0dGVyCiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7
CkBAIC01NjksMTQgKzU2NCw5IEBACiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHsKICAgICAg
IC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5fX3Byb3RvX18uZnVuYycsIGFuZCBp
dCBzaG91bGQgcGFzc2VkCiAgICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQot
CiAgICAgICByZXR1cm4gcHJpdmF0ZV90ZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9Ci1F
TkQKLQotICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFz
c0luZGV4KTsKLQotICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICAke2lt
cGxDbGFzc05hbWV9KiBpbXAgPSAke2NsYXNzTmFtZX06OnRvTmF0aXZlKGhvbGRlcik7CiAgICAg
aWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9u
bHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkX3RlbXBsYXRlID0KICAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcoJG5ld1RlbXBsYXRlU3RyaW5nKTsK
QEAgLTYwNSwxNyArNTk1LDE1IEBACiAKICAgICBpZiAoJGNsYXNzSW5kZXggZXEgIkRPTVdJTkRP
VyIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIERPTVdp
bmRvdyogd2luZG93ID0gdjhET01XcmFwcGVyVG88RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgaW5mby5Ib2xkZXIoKSk7CiAgICAgLy8gR2V0IHRoZSBwcm94eSBjb3JyZXNwb25k
aW5nIHRvIHRoZSBET01XaW5kb3cgaWYgcG9zc2libGUgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhh
dCB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gaXMgY29uc3RydWN0ZWQgaW4gdGhlCiAgICAgLy8g
Y29udGV4dCBvZiB0aGUgRE9NV2luZG93IGFuZCBub3QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNh
bGxlci4KLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcih0eXBlLCB3aW5k
b3cpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIFY4RE9N
V2luZG93Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKSk7CiBFTkQKICAgICB9IGVsc2lmICgkY2xh
c3NJbmRleCBlcSAiREVESUNBVEVEV09SS0VSQ09OVEVYVCIgb3IgJGNsYXNzSW5kZXggZXEgIldP
UktFUkNPTlRFWFQiIG9yICRjbGFzc0luZGV4IGVxICJTSEFSRURXT1JLRVJDT05URVhUIikgewog
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9ID0g
MTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIFdvcmtlckNv
bnRleHQqIHdvcmtlckNvbnRleHQgPSB2OERPTVdyYXBwZXJUbzxXb3JrZXJDb250ZXh0PihWOENs
YXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIHdvcmtlckNvbnRleHQpOworICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIFY4V29ya2VyQ29udGV4dDo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSkpOwogRU5ECiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Iik7
CkBAIC02ODEsNyArNjY5LDcgQEAKIAogICAgIGlmICgkaXNQb2RUeXBlKSB7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRp
bXBsQ2xhc3NOYW1lPiogaW1wX3dyYXBwZXIgPSB2OERPTVdyYXBwZXJUbzxWOFNWR1BPRFR5cGVX
cmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8u
SG9sZGVyKCkpOworICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+KiBpbXBf
d3JhcHBlciA9IFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+Ojp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKICAgICAkaW1wbENsYXNzTmFtZSBpbXBfaW5zdGFuY2UgPSAqaW1wX3dy
YXBwZXI7CiBFTkQKICAgICAgICAgaWYgKCRnZXR0ZXJTdHJpbmdVc2VzSW1wKSB7CkBAIC03MDIs
NyArNjkwLDkgQEAKICAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOwogRU5ECiAgICAgICB9Ci0gICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRh
Tm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4LCAiaW5mbyIpOworICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICAke2ltcGxDbGFzc05hbWV9KiBpbXAgPSBWOCR7
aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGhvbGRlcik7CitFTkQKICAgICB9IGVsc2UgewogICAg
ICAgICBteSAkcmVmbGVjdCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJlZmxlY3QifTsKICAgICAgICAgaWYgKCRnZXR0ZXJTdHJpbmdVc2VzSW1wICYmICRy
ZWZsZWN0ICYmIElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAmJiAkY29kZUdlbmVyYXRvci0+SXNT
dHJpbmdUeXBlKCRhdHRyVHlwZSkpIHsKQEAgLTcxNSwxMSArNzA1LDkgQEAKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICMgU2tpcCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24hCiAg
ICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Cisg
ICAgJHtpbXBsQ2xhc3NOYW1lfSogaW1wID0gVjgke2ltcGxDbGFzc05hbWV9Ojp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKIEVORAotICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRp
bXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCwgImluZm8iKTsKICAgICB9CiAKICAgICAjIEdlbmVy
YXRlIHNlY3VyaXR5IGNoZWNrcyBpZiBuZWNlc3NhcnkKQEAgLTg4NCw3ICs4NzIsNyBAQAogICAg
IGlmICgkaXNQb2RUeXBlKSB7CiAgICAgICAgICRpbXBsQ2xhc3NOYW1lID0gR2V0TmF0aXZlVHlw
ZSgkaW1wbENsYXNzTmFtZSk7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlwZVdy
YXBwZXIuaCJ9ID0gMTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNW
R1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogd3JhcHBlciA9IHY4RE9NV3JhcHBlclRv
PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xh
c3NJbmRleCwgaW5mby5Ib2xkZXIoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogd3JhcHBlciA9
IFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+Ojp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRpbXBsQ2xh
c3NOYW1lIGltcF9pbnN0YW5jZSA9ICp3cmFwcGVyO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7XG4i
KTsKIApAQCAtOTAwLDcgKzg4OCw5IEBACiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHJldHVy
bjsKIEVORAogICAgICAgfQotICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBs
Q2xhc3NOYW1lLCAkY2xhc3NJbmRleCwgImluZm8iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCA8PEVORCk7CisgICAgJHtpbXBsQ2xhc3NOYW1lfSogaW1wID0gVjgke2ltcGxDbGFzc05h
bWV9Ojp0b05hdGl2ZShob2xkZXIpOworRU5ECiAgICAgfSBlbHNlIHsKICAgICAgICAgbXkgJGF0
dHJUeXBlID0gR2V0VHlwZUZyb21TaWduYXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAg
ICAgICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJSZWZsZWN0In07CkBAIC05MTcsOSArOTA3LDggQEAKICAgICAgICAgfQogCiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgJHtpbXBsQ2xhc3NOYW1lfSogaW1w
ID0gVjgke2ltcGxDbGFzc05hbWV9Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIEVORAotICAg
ICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRl
eCwgImluZm8iKTsKICAgICB9CiAKICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVG
cm9tU2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCk7CkBAIC05NjYsNyArOTU1LDcg
QEAKICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJFdmVu
dExpc3RlbmVyIikgewogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXIuaCJ9ID0gMTsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tQmlu
ZGluZy5oIn0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB0
cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3koaG9sZGVyLCBpbXAtPiRhdHRyTmFtZSgpLCB2YWx1ZSwg
Vjgke2ludGVyZmFjZU5hbWV9OjpjYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICB0cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xk
ZXIoKSwgaW1wLT4kYXR0ck5hbWUoKSwgdmFsdWUsIFY4JHtpbnRlcmZhY2VOYW1lfTo6Y2FjaGVJ
bmRleCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaW1w
LT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZShWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIoaW1wLCB2YWx1ZSwgdHJ1ZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpIik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGltcC0+c2V0
JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoJHJlc3VsdCIpOwpAQCAtMTA1MiwxNCArMTA0MSwxMyBA
QAogCiAgICAgaWYgKElzUG9kVHlwZSgkaW1wbENsYXNzTmFtZSkpIHsKICAgICAgICAgbXkgJG5h
dGl2ZUNsYXNzTmFtZSA9IEdldE5hdGl2ZVR5cGUoJGltcGxDbGFzc05hbWUpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZUNs
YXNzTmFtZT4qIGltcF93cmFwcGVyID0gdjhET01XcmFwcGVyVG88VjhTVkdQT0RUeXBlV3JhcHBl
cjwkbmF0aXZlQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGFyZ3MuSG9s
ZGVyKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgVjhTVkdQ
T0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xhc3NOYW1lPiogaW1wX3dyYXBwZXIgPSBWOFNWR1BPRFR5
cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTtcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFzc05hbWUg
aW1wX2luc3RhbmNlID0gKmltcF93cmFwcGVyO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTtcbiIp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsK
LSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAg
JHtpbXBsQ2xhc3NOYW1lfSogaW1wID0gVjgke2ltcGxDbGFzc05hbWV9Ojp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKIEVORAotICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBs
Q2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CiAgICAgfQogCiAgICMgQ2hlY2sgZG9tYWluIHNlY3Vy
aXR5IGlmIG5lZWRlZApAQCAtMTQ5Miw3ICsxNDgwLDYgQEAKICAgICAkaW1wbEluY2x1ZGVzeyIk
e2NsYXNzTmFtZX0uaCJ9ID0gMTsKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNl
TmFtZSk7Ci0gICAgJGltcGxJbmNsdWRlc3siVjhQcm94eS5oIn0gPSAxOwogCiAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIm5hbWVzcGFjZSBXZWJDb3JlIHtcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICJuYW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfUludGVybmFsIHtcblxu
Iik7CkBAIC0xODUxLDYgKzE4MzgsNyBAQAogRU5ECiAgICAgfQogCisgICAgJHRvTmF0aXZlUmV0
dXJuVHlwZSA9IEdldFJldHVyblR5cGVGb3JUb05hdGl2ZSgkaW50ZXJmYWNlTmFtZSk7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgcmV0dXJuIGRlc2M7CiB9CkBAIC0xODY1LDYg
KzE4NTMsMTAgQEAKICAgcmV0dXJuICR7Y2xhc3NOYW1lfV9jYWNoZV87CiB9CiAKKyR7dG9OYXRp
dmVSZXR1cm5UeXBlfSogJHtjbGFzc05hbWV9Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IG9iamVjdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke3RvTmF0aXZlUmV0dXJu
VHlwZX0qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJP
YmplY3RJbmRleCkpOyAKK30KKwogYm9vbCAke2NsYXNzTmFtZX06Okhhc0luc3RhbmNlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkgewogICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFz
SW5zdGFuY2UodmFsdWUpOwogfQpAQCAtMTg5MSw2ICsxODgzLDE1IEBACiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOwogfQogCitzdWIgR2V0UmV0dXJuVHlwZUZvclRvTmF0aXZlCit7CisgICAg
bXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEgIlNW
R1JlY3QiOworICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsK
KyAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4
IjsKKyAgICByZXR1cm4gImZsb2F0IiBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAgICByZXR1
cm4gJHR5cGU7Cit9CiAKIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiB7CkBAIC0y
MzIyLDcgKzIzMjMsNyBAQAogICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOE5vZGUuaCJ9ID0gMTsK
IAogICAgICAgICAjIEV2ZW50VGFyZ2V0IGlzIG5vdCBpbiBET00gaGllcmFyY2h5LCBidXQgYWxs
IE5vZGVzIGFyZSBFdmVudFRhcmdldC4KLSAgICAgICAgcmV0dXJuICJWOE5vZGU6Okhhc0luc3Rh
bmNlKCR2YWx1ZSkgPyB2OERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOworICAgICAgICByZXR1cm4gIlY4Tm9kZTo6SGFzSW5z
dGFuY2UoJHZhbHVlKSA/IFY4Tm9kZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdCgkdmFsdWUpKSA6IDAiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhOU1Jl
c29sdmVyIikgewpAQCAtMjMzMCwxNCArMjMzMSwxMyBAQAogICAgIH0KIAogICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgkdHlwZSk7Ci0gICAgIyAkaW1wbEluY2x1ZGVzeyIkdHlwZS5oIn0gPSAxIHVu
bGVzcyBBdm9pZEluY2x1c2lvbk9mVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoSXNET01Ob2RlVHlw
ZSgkdHlwZSkpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke3R5cGV9LmgifSA9IDE7CiAK
ICAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlz
IGV4cGVjdGVkIE5vZGUgdHlwZSwKICAgICAgICAgIyByZXR1cm4gTlVMTC4KLSAgICAgICAgcmV0
dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyB2OERPTVdyYXBwZXJUb05vZGU8
JHt0eXBlfT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOworICAg
ICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4JHt0eXBlfTo6
dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOwogICAg
IH0gZWxzZSB7CiAgICAgICAgICMgVE9ETzogVGVtcG9yYXJ5IHRvIGF2b2lkIFdpbmRvdyBuYW1l
IGNvbmZsaWN0LgogICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCR0eXBlKTsKQEAgLTIzNTYs
NyArMjM1Niw3IEBACiAKICAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJh
bWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKICAgICAgICAgIyByZXR1cm4gTlVM
TC4KLSAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyB2OERP
TVdyYXBwZXJUbzwke2ltcGxDbGFzc05hbWV9PihWOENsYXNzSW5kZXg6OiR7Y2xhc3NJbmRleH0s
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkgOiAwIjsKKyAgICAgICAgcmV0
dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOCR7dHlwZX06OnRvTmF0aXZl
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkgOiAwIjsKICAgICB9CiB9CiAK
QEAgLTI1MTYsNyArMjUxNiw2IEBACiAgICAgIyBWOCBzcGVjaWZpYy4KICAgICBteSAkaW1wbENs
YXNzTmFtZSA9ICR0eXBlOwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7Ci0gICAgIyAk
aW1wbEluY2x1ZGVze0dldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUpfSA9IDEgdW5sZXNz
IEF2b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKTsKIAogICAgICMgc3BlY2lhbCBjYXNlIGZvciBu
b24tRE9NIG5vZGUgaW50ZXJmYWNlcwogICAgIGlmIChJc0RPTU5vZGVUeXBlKCR0eXBlKSkgewpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAkocmV2aXNpb24gNTMxOTQpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgi
CiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiVjhFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogCiAjaW5jbHVkZSA8djguaD4KQEAgLTEyNiwxNiArMTI3LDYgQEAKICNl
bmRpZgogfTsKIAotCi12b2lkKiB2OERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkgewotICAgIHJldHVybiBvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCk7Ci19Ci0gICAgCi12b2lkKiB2OERPTVdy
YXBwZXJUb05hdGl2ZShjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKSB7Ci0gICAgcmV0dXJu
IGluZm8uSG9sZGVyKCktPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJP
YmplY3RJbmRleCk7Ci19Ci0gICAgCi0KIFN0cmluZyB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPklzU3RyaW5nKCkp
CkBAIC00ODYsNyArNDc3LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRFbGVtZW50U3Ry
aW5nQXR0cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIAogewot
ICAgIEVsZW1lbnQgKmltcCA9IHY4RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihpbmZvKTsKKyAg
ICBFbGVtZW50KiBpbXAgPSBWOEVsZW1lbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAg
IHJldHVybiB2OEV4dGVybmFsU3RyaW5nKGltcC0+Z2V0QXR0cmlidXRlKG5hbWUpKTsKIH0KIApA
QCAtNDk0LDcgKzQ4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlKQogewotICAgIEVsZW1lbnQqIGltcCA9IHY4RE9NV3JhcHBlclRvTm9kZTxF
bGVtZW50PihpbmZvKTsKKyAgICBFbGVtZW50KiBpbXAgPSBWOEVsZW1lbnQ6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwogICAgIEF0b21pY1N0cmluZyB2ID0gdG9BdG9taWNXZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayh2YWx1ZSk7CiAgICAgaW1wLT5zZXRBdHRyaWJ1dGUobmFtZSwgdik7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaAkocmV2aXNp
b24gNTMxOTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTEgQEAKICAgICB2aXJ0dWFsIH5WOFNWR1BPRFR5
cGVXcmFwcGVyKCkgeyB9CiAgICAgdmlydHVhbCBvcGVyYXRvciBQT0RUeXBlKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoUE9EVHlwZSwgU1ZHRWxlbWVudCopID0gMDsKKwor
ICAgIHN0YXRpYyBWOFNWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+KiB0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4qPihvYmplY3QtPkdldFBvaW50ZXJG
cm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOworICAgIH0KIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CShyZXZpc2lvbiA1MzE5NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3
IEBACiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0ID0KICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIoKSk7Ci0gICAgV2ViR0xQcm9n
cmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gdjhE
T01XcmFwcGVyVG88V2ViR0xQcm9ncmFtPihWOENsYXNzSW5kZXg6OldFQkdMUFJPR1JBTSwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSA9IFY4V2ViR0xQcm9ncmFtOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4V2Vi
R0xQcm9ncmFtOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0p
KSA6IDA7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHRvSW50MzIoYXJnc1sx
XSwgb2spOwogICAgIGlmICghb2spIHsKQEAgLTM5Niw3ICszOTYsNyBAQAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9CiAgICAg
ICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBWOFdl
YkdMU2hhZGVyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IHY4RE9NV3JhcHBlclRvPFdlYkdMU2hh
ZGVyPihWOENsYXNzSW5kZXg6OldFQkdMU0hBREVSLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbMF0pKSA6IDA7CisgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IFY4V2ViR0xTaGFk
ZXI6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhXZWJHTFNoYWRlcjo6dG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwogICAgIGJvb2wgb2s7CiAgICAg
dW5zaWduZWQgcG5hbWUgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKICAgICBpZiAoIW9rKSB7CkBA
IC00MjksNyArNDI5LDcgQEAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQogICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihhcmdzLkhvbGRlcigpKTsK
LSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBWOFdlYkdMUHJvZ3JhbTo6SGFzSW5zdGFuY2Uo
YXJnc1swXSkgPyB2OERPTVdyYXBwZXJUbzxXZWJHTFByb2dyYW0+KFY4Q2xhc3NJbmRleDo6V0VC
R0xQUk9HUkFNLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDA7Cisg
ICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gVjhXZWJHTFByb2dyYW06Okhhc0luc3RhbmNlKGFy
Z3NbMF0pID8gVjhXZWJHTFByb2dyYW06OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoYXJnc1swXSkpIDogMDsKIAogICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKGFyZ3NbMV0s
IG9rKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkocmV2aXNpb24gNTMxOTQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3MyAr
NTMsNyBAQAogICAgICAgICB0eXBlZGVmIFY4QmluZGluZ0RPTVdpbmRvdyBET01XaW5kb3c7CiAg
ICAgfTsKICAgICB0eXBlZGVmIEJpbmRpbmdTZWN1cml0eTxWOEJpbmRpbmc+IFY4QmluZGluZ1Nl
Y3VyaXR5OwotCi0gICAgLy8gQSBoZWxwZXIgZnVuY3Rpb24gZXh0cmFjdCBuYXRpdmUgb2JqZWN0
IHBvaW50ZXIgZnJvbSBhIERPTSB3cmFwcGVyCi0gICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNp
ZmllZCB0eXBlLgotICAgIHZvaWQqIHY4RE9NV3JhcHBlclRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4pOwogICAgIAotICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgIEMqIHY4RE9NV3Jh
cHBlclRvKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQotICAgIHsKLSAgICAgICAgQVNT
RVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDKj4odjhET01XcmFwcGVyVG9OYXRpdmUob2JqZWN0KSk7Ci0g
ICAgfQotICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgIEMqIHY4RE9NV3JhcHBlclRvTm9kZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChWOERP
TVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKLSAgICAgICAgQVNTRVJUKFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUob2JqZWN0KSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOwot
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDKj4odjhET01XcmFwcGVyVG9OYXRpdmUo
b2JqZWN0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQqIHY4RE9NV3JhcHBlclRvTmF0aXZlKGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mKTsKLSAgICAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAg
ICBDKiB2OERPTVdyYXBwZXJUbyhjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKSB7Ci0gICAg
ICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEMqPih2OERPTVdyYXBwZXJUb05hdGl2
ZShpbmZvKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgIEMqIHY4RE9NV3Jh
cHBlclRvTm9kZShjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKSB7Ci0gICAgICAgIEFTU0VS
VChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJ
bmRleDo6Tk9ERSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEMqPih2OERPTVdy
YXBwZXJUb05hdGl2ZShpbmZvKSk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlIDxjbGFzcyBD
PgotICAgIEMqIHY4RE9NV3JhcHBlclRvKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKLSAgICB7Ci0gICAgICAgIC8vIE5hdGl2
ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRo
aXMgZ2VuZXJpYyBmdW5jdGlvbi4KLSAgICAgICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4
OjpFVkVOVExJU1RFTkVSKTsKLSAgICAgICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpF
VkVOVFRBUkdFVCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXli
ZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
Y29uc3QgYm9vbCB0eXBlSXNWYWxpZCA9Ci0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAo
dHlwZSAhPSBWOENsYXNzSW5kZXg6OlRZUEUpICYmCi0gICAgICAgIERPTV9OT0RFX1RZUEVTKE1B
S0VfQ0FTRSkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NB
U0UpCi0jZW5kaWYKLSN1bmRlZiBNQUtFX0NBU0UKLSAgICAgICAgdHJ1ZTsKLSAgICAgICAgQVNT
RVJUKHR5cGVJc1ZhbGlkKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHY4RE9N
V3JhcHBlclRvPEM+KG9iamVjdCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlIDxjbGFzcyBD
PgotICAgIEMqIHY4RE9NV3JhcHBlclRvKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgIHJldHVybiB2OERPTVdyYXBwZXJUbzxDPih0eXBlLCBpbmZvLkhvbGRlcigpKTsKLSNl
bHNlCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEMqPih2OERPTVdyYXBwZXJUb05h
dGl2ZShpbmZvKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAKICAgICBlbnVtIEV4dGVybmFsTW9k
ZSB7CiAgICAgICAgIEV4dGVybmFsaXplLAogICAgICAgICBEb05vdEV4dGVybmFsaXplCg==
</data>
<flag name="review"
          id="28750"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47228</attachid>
            <date>2010-01-22 14:44:32 -0800</date>
            <delta_ts>2010-01-22 15:10:50 -0800</delta_ts>
            <desc>First attempt at generating toV8()</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>45483</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDEtMjIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEdlbmVyYXRlIHRvVjgoKSBjb252ZXJ0ZXIgZnVuY3Rpb25zIGFuZCByZW5hbWUgc29tZSBm
dW5jdGlvbnMgcHJldmlvdXNseSBjYWxsZWQgdG9WOCgpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2MworCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IEdlbmVyYXRlIHRvVjgoKSBjb252ZXJ0ZXJzLgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoK
KwogMjAxMC0wMS0yMiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTM3MTUpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTQgKzE1NiwxNSBAQAogCiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGgg
dGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5l
ZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0
aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpIG9yICR0eXBlIGVx
ICJEYXRlIikgewotICAgIH0gZWxzaWYgKCR0eXBlID1+IC9TVkdQYXRoU2VnLykgewotICAgICAg
ICAkam9pbmVkTmFtZSA9ICR0eXBlOwotICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fic3xSZWwv
LzsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWROYW1lfS5oIn0gPSAxOwotICAgIH0g
ZWxzZSB7CisgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBh
bmQgIUF2b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKSBhbmQgJHR5cGUgbmUgIkRhdGUiKSB7CiAg
ICAgICAgICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCi0gICAgICAgICRp
bXBsSW5jbHVkZXN7R2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZSgke3R5cGV9KX0gPSAxOworICAg
ICAgICAkaW1wbEluY2x1ZGVze0dldFY4SGVhZGVyTmFtZSgke3R5cGV9KX0gPSAxOworCisgICAg
ICAgIGlmICgkdHlwZSA9fiAvU1ZHUGF0aFNlZy8pIHsKKyAgICAgICAgICAgICRqb2luZWROYW1l
ID0gJHR5cGU7CisgICAgICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fic3xSZWwvLzsKKyAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IiR7am9pbmVkTmFtZX0uaCJ9ID0gMTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgICMgYWRkaXRpb25hbCBpbmNsdWRlcyAodGhpbmdzIG5lZWRlZCB0byBjb21w
aWxlIHRoZSBiaW5kaW5ncyBidXQgbm90IHRoZSBoZWFkZXIpCkBAIC0yMTAsMTcgKzIxMSw2IEBA
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRpbXBsQ2xhc3NOYW1lO1xuXG4iKSB1
bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbXBsQ2xhc3NOYW1lKTsK
IH0KIAotc3ViIEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUKLXsKLSAgICBteSAkaWZhY2UgPSBz
aGlmdDsKLSAgICByZXR1cm4gIkV2ZW50LmgiIGlmICRpZmFjZSBlcSAiRE9NVGltZVN0YW1wIjsK
LSAgICByZXR1cm4gIk5hbWVkQXR0ck1hcC5oIiBpZiAkaWZhY2UgZXEgIk5hbWVkTm9kZU1hcCI7
Ci0gICAgcmV0dXJuICJOYW1lTm9kZUxpc3QuaCIgaWYgJGlmYWNlIGVxICJOb2RlTGlzdCI7Ci0g
ICAgcmV0dXJuICJYTUxIdHRwUmVxdWVzdC5oIiBpZiAkaWZhY2UgZXEgIlhNTEh0dHBSZXF1ZXN0
IjsKLQotICAgIHJldHVybiAiJHtpZmFjZX0uaCI7Ci19Ci0KICMgSWYgdGhlIG5vZGUgaGFzIGEg
W0NvbmRpdGlvbmFsPVhYWF0gYXR0cmlidXRlLCByZXR1cm5zIGFuICJFTkFCTEUoWFhYKSIgc3Ry
aW5nIGZvciB1c2UgaW4gYW4gI2lmLgogc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcKIHsK
QEAgLTI1OCw3ICsyNDgsNiBAQAogCiAgICAgIyBHZXQgY29ycmVjdCBwYXNzL3N0b3JlIHR5cGVz
IHJlc3BlY3RpbmcgUE9EVHlwZSBmbGFnCiAgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07Ci0gICAgbXkgJHBhc3NUeXBlID0gJHBvZFR5
cGUgPyAiSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIiA6ICIkaW1wbENsYXNzTmFtZSoi
OwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJHBvZFR5cGUuaFwiXG4i
KSBpZiAkcG9kVHlwZSBhbmQgKCRwb2RUeXBlIG5lICJkb3VibGUiIGFuZCAkcG9kVHlwZSBuZSAi
ZmxvYXQiIGFuZCAkcG9kVHlwZSBuZSAiUkdCQTMyIik7CiAKQEAgLTI2OCwxNSArMjU3LDIxIEBA
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiVjhJbmRleC5oXCJcbiIpOwog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdldEhlYWRlckNsYXNzSW5jbHVkZSgkaW1wbENsYXNz
TmFtZSkpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtc
biIpOworICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG50ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPiBjbGFzcyBWOFNWR1BPRFR5cGVXcmFwcGVyO1xu
Iik7CisgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNzICRjbGFzc05hbWUg
e1xuIik7Ci0gICAgCi0gICAgbXkgJHRvTmF0aXZlUmV0dXJuVHlwZSA9IEdldFJldHVyblR5cGVG
b3JUb05hdGl2ZSgkaW50ZXJmYWNlTmFtZSk7CisKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5h
dGl2ZVR5cGVGb3JDb252ZXJzaW9ucygkaW50ZXJmYWNlTmFtZSk7CisgICAgaWYgKCRwb2RUeXBl
KSB7CisgICAgICAgICRuYXRpdmVUeXBlID0gIlY4U1ZHUE9EVHlwZVdyYXBwZXI8JHtuYXRpdmVU
eXBlfT4iOworICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKICBwdWJs
aWM6CiAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSk7CiAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3
VGVtcGxhdGUoKTsKLSAgc3RhdGljICR7dG9OYXRpdmVSZXR1cm5UeXBlfSogdG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIEVORAogCiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVx
ICJET01XaW5kb3ciKSB7CkBAIC0zNDAsNyArMzM1LDEzIEBACiAgIGZyaWVuZCBjbGFzcyBWOENs
YXNzSW5kZXg7CiB9OwogCisgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlw
ZX0qLCBib29sIGZvcmNlTmV3T2JqZWN0ID0gZmFsc2UpOwogRU5ECisgICAgaWYgKElzUmVmUHRy
VHlwZSgkaW1wbENsYXNzTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxF
TkQpOworICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCR7bmF0aXZlVHlw
ZX0+LCBib29sIGZvcmNlTmV3T2JqZWN0ID0gZmFsc2UpOworRU5ECisgICAgfQogCiAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIn1cblxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNl
bmRpZiAvLyAkY2xhc3NOYW1lIiAuICJfSFxuIik7CkBAIC02NTYsNyArNjU3LDcgQEAKICAgICAg
ICAgJGF0dHJJc1BvZFR5cGUgPSAwOwogICAgIH0KIAotICAgIG15ICRnZXR0ZXJTdHJpbmdVc2Vz
SW1wID0gJGltcGxDbGFzc05hbWUgbmUgImRvdWJsZSI7CisgICAgbXkgJGdldHRlclN0cmluZ1Vz
ZXNJbXAgPSAkaW1wbENsYXNzTmFtZSBuZSAiZmxvYXQiOwogCiAgICMgR2V0dGVyCiAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwpAQCAtODEyLDEzICs4MTMsMTYgQEAKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEdlbmVyYXRlU1ZHQ29udGV4dEFzc2lnbm1l
bnQoJGltcGxDbGFzc05hbWUsICJ3cmFwcGVyLmdldCgpIiwgIiAgICAiKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZVNWR0Nv
bnRleHRSZXRyaWV2YWwoJGltcGxDbGFzc05hbWUsICIgICAgIikpOwotICAgICAgICAgICAgJHJl
c3VsdCA9ICJWOFByb3h5Ojp3aXRoU1ZHQ29udGV4dCgkcmVzdWx0LCBjb250ZXh0KSI7CisgICAg
ICAgICAgICAjIFRoZSB0ZW1wbGF0aW5nIGFzc29jaWF0ZWQgd2l0aCBwYXNzaW5nIHdpdGhTVkdD
b250ZXh0KCkncyByZXR1cm4gdmFsdWUgZGlyZWN0bHkgaW50byB0b1Y4IGNhbiBnZXQgY29tcGls
ZXJzIGNvbmZ1c2VkLAorICAgICAgICAgICAgIyBzbyBqdXN0IG1hbnVhbGx5IHNldCB0aGUgcmV0
dXJuIHZhbHVlIHRvIGEgUGFzc1JlZlB0ciBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4KKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUGFzc1JlZlB0cjwkYXR0clR5cGU+IHJl
c3VsdEFzUGFzc1JlZlB0ciA9IFY4UHJveHk6OndpdGhTVkdDb250ZXh0KCRyZXN1bHQsIGNvbnRl
eHQpO1xuIik7CisgICAgICAgICAgICAkcmVzdWx0ID0gInJlc3VsdEFzUGFzc1JlZlB0ciI7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsKLSAgICAgICAgbXkg
JGNsYXNzSW5kZXggPSB1YygkYXR0clR5cGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIucmVsZWFzZSgpKTtcbiIpOworICAgICAgICAkaW1w
bEluY2x1ZGVzeyJWOCR7YXR0clR5cGV9LmgifSA9IDE7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgod3JhcHBlci5yZWxlYXNlKCkuZ2V0KCkpO1xuIik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAiIC4g
UmV0dXJuTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwgIiAg
ICAiKS4iO1xuIik7CiAgICAgfQpAQCAtOTM0LDcgKzkzOCw3IEBACiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKICAgICB9CiAK
LSAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgImRvdWJsZSIpIHsKKyAgICBpZiAoJGltcGxDbGFz
c05hbWUgZXEgImZsb2F0IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
ICppbXAgPSAkcmVzdWx0O1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXkgJGltcGxTZXR0
ZXJGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0ck5hbWUpOwpA
QCAtMTQ2MSw3ICsxNDY1LDkgQEAKICAgICAgICAgICIjaW5jbHVkZSBcImNvbmZpZy5oXCJcbiIg
LgogICAgICAgICAgIiNpbmNsdWRlIFwiVjhQcm94eS5oXCJcbiIgLgogICAgICAgICAgIiNpbmNs
dWRlIFwiVjhCaW5kaW5nLmhcIlxuIiAuCi0gICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmdT
dGF0ZS5oXCJcblxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmdTdGF0ZS5oXCJc
biIgLgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhET01XcmFwcGVyLmhcIlxuIiAuCisgICAgICAg
ICAiI2luY2x1ZGUgXCJWOElzb2xhdGVkQ29udGV4dC5oXCJcblxuIiAuCiAgICAgICAgICAiI3Vu
ZGVmIExPR1xuXG4iKTsKIAogICAgIHB1c2goQGltcGxGaXhlZEhlYWRlciwgIlxuI2lmICR7Y29u
ZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKQEAgLTE4NTksNyAr
MTg2NSwxMCBAQAogRU5ECiAgICAgfQogCi0gICAgJHRvTmF0aXZlUmV0dXJuVHlwZSA9IEdldFJl
dHVyblR5cGVGb3JUb05hdGl2ZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJG5hdGl2ZVR5cGUg
PSBHZXROYXRpdmVUeXBlRm9yQ29udmVyc2lvbnMoJGludGVyZmFjZU5hbWUpOworICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn0pIHsKKyAgICAgICAgJG5h
dGl2ZVR5cGUgPSAiVjhTVkdQT0RUeXBlV3JhcHBlcjwke25hdGl2ZVR5cGV9PiI7CisgICAgfQog
ICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgIAogICAvLyBDdXN0b20gdG9TdHJpbmcg
dGVtcGxhdGUKQEAgLTE4NzcsOCArMTg4Niw4IEBACiAgIHJldHVybiAke2NsYXNzTmFtZX1fY2Fj
aGVfOwogfQogCi0ke3RvTmF0aXZlUmV0dXJuVHlwZX0qICR7Y2xhc3NOYW1lfTo6dG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8JHt0b05hdGl2ZVJldHVyblR5cGV9Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFs
RmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsgCiske25hdGl2ZVR5cGV9KiAke2NsYXNz
TmFtZX06OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KSB7CisgIHJldHVy
biByZWludGVycHJldF9jYXN0PCR7bmF0aXZlVHlwZX0qPihvYmplY3QtPkdldFBvaW50ZXJGcm9t
SW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOyAKIH0KIAogYm9vbCAke2Ns
YXNzTmFtZX06Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkgewpAQCAt
MTg4OSw2ICsxODk4LDM3IEBACiAKICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRPTVdpbmRv
dyIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyogd2luZG93LCBib29sKSB7CisgIGlmICghd2luZG93KQor
ICAgIHJldHVybiB2ODo6TnVsbCgpOworICAvLyBJbml0aWFsaXplcyBlbnZpcm9ubWVudCBvZiBh
IGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSBmcmFtZS4KKyAgRnJh
bWUqIGZyYW1lID0gd2luZG93LT5mcmFtZSgpOworICBpZiAoIWZyYW1lKQorICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisKKyAgLy8gU3BlY2lhbCBjYXNlOiBCZWNhdXNlIG9m
IGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKCkgb25lIERPTVdpbmRvdyBjYW4gaGF2ZQorICAvLyBt
dWx0aXBsZSBjb250ZXh0cyBhbmQgbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMgYXNzb2NpYXRlZCB3
aXRoIGl0LiBXaGVuCisgIC8vIGNvZGUgcnVubmluZyBpbiBvbmUgb2YgdGhvc2UgY29udGV4dHMg
YWNjZXNzZXMgdGhlIHdpbmRvdyBvYmplY3QsIHdlCisgIC8vIHdhbnQgdG8gcmV0dXJuIHRoZSBn
bG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbnRleHQsIG5vdAorICAvLyBuZWNl
c3NhcmlseSB0aGUgZmlyc3QgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhhdCBET01X
aW5kb3cuCisgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGN1cnJlbnRDb250ZXh0ID0gdjg6OkNv
bnRleHQ6OkdldEN1cnJlbnQoKTsKKyAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjdXJyZW50R2xv
YmFsID0gY3VycmVudENvbnRleHQtPkdsb2JhbCgpOworICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGN1cnJlbnRHbG9iYWwpOworICBpZiAoIXdpbmRvd1dyYXBwZXIuSXNF
bXB0eSgpKSB7CisgICAgaWYgKFY4RE9NV2luZG93Ojp0b05hdGl2ZSh3aW5kb3dXcmFwcGVyKSA9
PSB3aW5kb3cpCisgICAgICByZXR1cm4gY3VycmVudEdsb2JhbDsKKyAgfQorCisgIC8vIE90aGVy
d2lzZSwgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYW1l
LgorICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChm
cmFtZSk7CisgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpOworCisgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4
dC0+R2xvYmFsKCk7CisgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CisgIHJldHVybiBnbG9i
YWw7Cit9CisKIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gVjhET01XaW5kb3c6
OkdldFNoYWRvd09iamVjdFRlbXBsYXRlKCkgewogICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdFRlbXBsYXRlPiBWOERPTVdpbmRvd1NoYWRvd09iamVjdF9jYWNoZV87CiAgIGlmIChW
OERPTVdpbmRvd1NoYWRvd09iamVjdF9jYWNoZV8uSXNFbXB0eSgpKSB7CkBAIC0xODk4LDYgKzE5
MzgsOSBAQAogICByZXR1cm4gVjhET01XaW5kb3dTaGFkb3dPYmplY3RfY2FjaGVfOwogfQogRU5E
CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBHZW5lcmF0aW5nIGEgVjggd3JhcHBlciBmb3IgRE9N
V2luZG93IGlzIG5vdGhpbmcgbGlrZSBhbGwgdGhlIG90aGVyIGNhc2VzLCBzbyBpdCdzIHNwZWNp
YWwgY2FzZWQgYWJvdmUuICAgIAorICAgICAgICBHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKCRkYXRh
Tm9kZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRuYXRpdmVUeXBlKTsKICAgICB9CiAK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwpAQCAtMTkwNyw5ICsxOTUwLDQyNCBAQAog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAotc3ViIEdldFJldHVyblR5cGVGb3JUb05h
dGl2ZQorc3ViIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMgCiB7CisgICAgbXkgJGRhdGFOb2RlID0g
c2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NOYW1l
ID0gc2hpZnQ7CisgICAgbXkgJG5hdGl2ZVR5cGUgPSBzaGlmdDsKKyAgICBteSAkZGVmYXVsdFdy
YXBwZXJUeXBlID0gIlY4Q2xhc3NJbmRleDo6IiAuIHVjKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBt
eSAkZG9tTWFwRnVuY3Rpb24gPSBHZXREb21NYXBGdW5jdGlvbigkZGF0YU5vZGUsICRpbnRlcmZh
Y2VOYW1lKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOyAgIAorICAgIAordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRpdmVUeXBlfSogaW1wbCwgYm9vbCBmb3JjZU5ld09i
amVjdCkgeworICBpZiAoIWltcGwpCisgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgIFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9ICR7ZGVmYXVsdFdyYXBwZXJUeXBlfTsK
K0VORAorICAgIEFkZFRvVjhCZWdpblNwZWNpYWxDYXNlcygkaW50ZXJmYWNlTmFtZSk7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKworICBWOFByb3h5KiBwcm94eSA9IDA7CisgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKK0VORAorICAgIGlmIChJc05vZGVTdWJUeXBl
KCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaWYg
KGltcGwtPmRvY3VtZW50KCkpIHsKKyAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGltcGwt
PmRvY3VtZW50KCktPmZyYW1lKCkpOworICAgIGlmIChwcm94eSAmJiBzdGF0aWNfY2FzdDxOb2Rl
Kj4oaW1wbC0+ZG9jdW1lbnQoKSkgPT0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGwpKQorICAgICAg
cHJveHktPndpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgfQorRU5ECisg
ICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgaWYgKCFmb3JjZU5ld09iamVjdCkg
e1xuIik7CisgICAgaWYgKCRkb21NYXBGdW5jdGlvbikgeworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOworICAgIHdyYXBwZXIgPSAke2RvbU1hcEZ1bmN0aW9ufS5nZXQoaW1wbCk7
CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgIHJldHVybiB3cmFwcGVyOworRU5E
CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAiICB9XG4iKTsKKworICAgIGlmIChJc05v
ZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5E
KTsKKyAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAgaWYgKHByb3h5KQorICAg
IGNvbnRleHQgPSBwcm94eS0+Y29udGV4dCgpOworCisgIC8vIEVudGVyIHRoZSBub2RlJ3MgY29u
dGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFwcGVyIGluIHRoYXQgY29udGV4dC4KKyAgaWYgKCFjb250
ZXh0LklzRW1wdHkoKSkKKyAgICBjb250ZXh0LT5FbnRlcigpOworRU5ECisgICAgfQorCisgIHB1
c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIGlmIChWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50
ZXJlZCgpKQorICAgIHByb3h5ID0gMDsKKyAgZWxzZSBpZiAoIXByb3h5KQorICAgIHByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoKTsKKworICBpZiAocHJveHkpCisgICAgd3JhcHBlciA9IHByb3h5
LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVXcmFwcGVyRnJvbUNhY2hlKHdyYXBwZXJUeXBlKTsKKyAg
ZWxzZQorICAgIHdyYXBwZXIgPSBTYWZlQWxsb2NhdGlvbjo6bmV3SW5zdGFuY2UoVjhET01XcmFw
cGVyOjpnZXRUZW1wbGF0ZSh3cmFwcGVyVHlwZSktPkdldEZ1bmN0aW9uKCkpOworICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQorICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVy
LCBWOENsYXNzSW5kZXg6OlRvSW50KHdyYXBwZXJUeXBlKSwgaW1wbCk7CitFTkQKKworICAgIGlm
IChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKKyAgLy8gRXhpdCB0aGUgbm9kZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQu
CisgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisgICAgY29udGV4dC0+RXhpdCgpOworRU5ECisg
ICAgfQorICAgIAorICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NSW1wbGVtZW50YXRpb24i
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIC8vIElmIHRoZSBpbnN0
YW50aWF0aW9uIGZhaWxlZCwgd2UgaWdub3JlIGl0IGFuZCByZXR1cm4gbnVsbCBpbnN0ZWFkIG9m
IHJldHVybmluZyBhbiBlbXB0eSBoYW5kbGUuCisgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKK0VORAorICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7CisgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICByZXR1cm4g
d3JhcHBlcjsKK0VORAorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICBpbXBsLT5yZWYo
KTtcbiIpIGlmIElzUmVmUHRyVHlwZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgfQorCisgICAgaWYg
KCRkb21NYXBGdW5jdGlvbikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwor
ICAke2RvbU1hcEZ1bmN0aW9ufS5zZXQoaW1wbCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46
Ok5ldyh3cmFwcGVyKSk7CitFTkQKKyAgICB9CisgICAgCisgICAgQWRkVG9WOEVuZFNwZWNpYWxD
YXNlcygkaW50ZXJmYWNlTmFtZSk7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwor
ICByZXR1cm4gd3JhcHBlcjsKK30KK0VORAorCisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW50ZXJm
YWNlTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwke25hdGl2ZVR5cGV9PiBpbXBsLCBib29s
IGZvcmNlTmV3T2JqZWN0KSB7CisgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGZvcmNlTmV3T2Jq
ZWN0KTsKK30KK0VORAorICAgIH0KK30KKworc3ViIEFkZFRvVjhCZWdpblNwZWNpYWxDYXNlcwor
eworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJOb2RlIikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEVsZW1lbnQuaCJ9ID0gMTsK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhBdHRyLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IlY4VGV4dC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOENEQVRBU2Vj
dGlvbi5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEVudGl0eVJlZmVyZW5jZS5o
In0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEVudGl0eS5oIn0gPSAxOworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJWOFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIn0gPSAxOworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJWOENvbW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siVjhEb2N1bWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOERvY3VtZW50
VHlwZS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOERvY3VtZW50RnJhZ21lbnQu
aCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhOb3RhdGlvbi5oIn0gPSAxOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBzd2l0Y2ggKGltcGwtPm5vZGVUeXBl
KCkpIHsKKyAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGNhc2UgTm9kZTo6QVRU
UklCVVRFX05PREU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8QXR0cio+KGltcGwpLCBm
b3JjZU5ld09iamVjdCk7CisgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFRleHQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDREFUQVNl
Y3Rpb24qPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkVOVElUWV9SRUZF
UkVOQ0VfTk9ERToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2Uq
PihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgorICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEVudGl0eSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7
CisgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KGltcGwpLCBmb3JjZU5ld09i
amVjdCk7CisgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PENvbW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkRP
Q1VNRU5UX05PREU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpbXBs
KSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudFR5cGUqPihpbXBsKSwgZm9yY2VOZXdP
YmplY3QpOworICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVj
dCk7CisgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxOb3RhdGlvbio+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGRlZmF1bHQ6IGJyZWFr
OyAvLyBYUEFUSF9OQU1FU1BBQ0VfTk9ERQorICB9CitFTkQKKyAgICB9IGVsc2lmICgkaW50ZXJm
YWNlTmFtZSBlcSAiRWxlbWVudCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhIVE1MRWxl
bWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR0VsZW1lbnQuaCJ9ID0g
MTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaWYgKGltcGwtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGlt
cGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGlmIChpbXBsLT5pc1NWR0VsZW1lbnQoKSkKKyAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0
KTsKK0VORAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJEb2N1bWVudCIpIHsKKyAg
ICAgICAgJGltcGxJbmNsdWRlc3siVjhIVE1MRG9jdW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siVjhTVkdEb2N1bWVudC5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOworICBpZiAoaW1wbC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOwor
ICBpZiAoaW1wbC0+aXNTVkdEb2N1bWVudCgpKQorICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR0RvY3VtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKK0VORAorICAgIH0gZWxzaWYg
KCRpbnRlcmZhY2VOYW1lIGVxICJIVE1MRWxlbWVudCIpIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKKyAgd3JhcHBlclR5cGUgPSBWOERPTVdyYXBwZXI6Omh0bWxFbGVtZW50
VHlwZShpbXBsKTsKK0VORAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJTVkdFbGVt
ZW50IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICB3cmFwcGVyVHlw
ZSA9IFY4RE9NV3JhcHBlcjo6c3ZnRWxlbWVudFR5cGUoaW1wbCk7CitFTkQKKyAgICB9IGVsc2lm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHUGF0aFNlZyIpIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKKyAgd3JhcHBlclR5cGUgPSBWOERPTVdyYXBwZXI6OmRvd25jYXN0U1ZH
UGF0aFNlZyhpbXBsKTsKK0VORAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJTdHls
ZVNoZWV0IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOENTU1N0eWxlU2hlZXQuaCJ9ID0g
MTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CitFTkQKKyAg
ICB9CisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJDU1NWYWx1ZSIpIHsKKyAgICAgICAgJGlt
cGxJbmNsdWRlc3siVjhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIn0gPSAxOworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJWOENTU1ZhbHVlTGlzdC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJWOENTU1ByaW1pdGl2ZVZhbHVlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7
IlY4U1ZHUGFpbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhTVkdDb2xvci5o
In0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBpZiAoaW1wbC0+
aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQorICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgZWxz
ZSBpZiAoaW1wbC0+aXNWYWx1ZUxpc3QoKSkKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBlbHNlIGlmIChpbXBsLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBlbHNlIGlmIChpbXBsLT5pc1NW
R1BhaW50KCkpCisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPihpbXBsKSwg
Zm9yY2VOZXdPYmplY3QpOworICBlbHNlIGlmIChpbXBsLT5pc1NWR0NvbG9yKCkpCisgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOwor
RU5ECisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkNTU1J1bGUiKSB7CisgICAgICAg
ICRpbXBsSW5jbHVkZXN7IlY4Q1NTU3R5bGVSdWxlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IlY4Q1NTQ2hhcnNldFJ1bGUuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3si
VjhDU1NJbXBvcnRSdWxlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NTTWVk
aWFSdWxlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NTRm9udEZhY2VSdWxl
LmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NTUGFnZVJ1bGUuaCJ9ID0gMTsK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDU1NWYXJpYWJsZXNSdWxlLmgifSA9IDE7CisgICAg
ICAgICRpbXBsSW5jbHVkZXN7IlY4V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgifSA9IDE7CisgICAg
ICAgICRpbXBsSW5jbHVkZXN7IlY4V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIn0gPSAxOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBzd2l0Y2ggKGltcGwtPnR5cGUoKSkg
eworICBjYXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgY2FzZSBDU1NSdWxl
OjpDSEFSU0VUX1JVTEU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxF
OgorICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpbXBsKSwgZm9y
Y2VOZXdPYmplY3QpOworICBjYXNlIENTU1J1bGU6Ok1FRElBX1JVTEU6CisgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAg
Y2FzZSBDU1NSdWxlOjpGT05UX0ZBQ0VfUlVMRToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxDU1NGb250RmFjZVJ1bGUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIENTU1J1
bGU6OlBBR0VfUlVMRToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+
KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGNhc2UgQ1NTUnVsZTo6VkFSSUFCTEVTX1JVTEU6
CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTVmFyaWFibGVzUnVsZSo+KGltcGwpLCBm
b3JjZU5ld09iamVjdCk7CisgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FX1JVTEU6Cisg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4oaW1wbCks
IGZvcmNlTmV3T2JqZWN0KTsKKyAgY2FzZSBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JVTEU6
CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGlt
cGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGRlZmF1bHQ6IGJyZWFrOworICB9CitFTkQKKyAgICB9
IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRXZlbnQiKSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7CisgIGlmIChpbXBsLT5pc1VJRXZlbnQoKSkgeworICAgIGlmIChpbXBs
LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpL
RVlCT0FSREVWRU5UOworICAgIGVsc2UgaWYgKGltcGwtPmlzVGV4dEV2ZW50KCkpCisgICAgICB3
cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6VEVYVEVWRU5UOworICAgIGVsc2UgaWYgKGltcGwt
PmlzTW91c2VFdmVudCgpKQorICAgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6Ok1PVVNF
RVZFTlQ7CisgICAgZWxzZSBpZiAoaW1wbC0+aXNXaGVlbEV2ZW50KCkpCisgICAgICB3cmFwcGVy
VHlwZSA9IFY4Q2xhc3NJbmRleDo6V0hFRUxFVkVOVDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGVs
c2UgaWYgKGltcGwtPmlzU1ZHWm9vbUV2ZW50KCkpCisgICAgICB3cmFwcGVyVHlwZSA9IFY4Q2xh
c3NJbmRleDo6U1ZHWk9PTUVWRU5UOworI2VuZGlmCisgICAgZWxzZSBpZiAoaW1wbC0+aXNDb21w
b3NpdGlvbkV2ZW50KCkpCisgICAgICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6Q09NUE9T
SVRJT05FVkVOVDsKKyAgICBlbHNlCisgICAgICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6
VUlFVkVOVDsKKyAgfSBlbHNlIGlmIChpbXBsLT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICB3cmFw
cGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6TVVUQVRJT05FVkVOVDsKKyAgZWxzZSBpZiAoaW1wbC0+
aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6Ok9WRVJG
TE9XRVZFTlQ7CisgIGVsc2UgaWYgKGltcGwtPmlzTWVzc2FnZUV2ZW50KCkpCisgICAgd3JhcHBl
clR5cGUgPSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VFVkVOVDsKKyAgZWxzZSBpZiAoaW1wbC0+aXNQ
YWdlVHJhbnNpdGlvbkV2ZW50KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OlBB
R0VUUkFOU0lUSU9ORVZFTlQ7CisgIGVsc2UgaWYgKGltcGwtPmlzUG9wU3RhdGVFdmVudCgpKQor
ICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpQT1BTVEFURUVWRU5UOworICBlbHNlIGlm
IChpbXBsLT5pc1Byb2dyZXNzRXZlbnQoKSkgeworICAgIGlmIChpbXBsLT5pc1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudCgpKQorICAgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OlhN
TEhUVFBSRVFVRVNUUFJPR1JFU1NFVkVOVDsKKyAgICBlbHNlCisgICAgICB3cmFwcGVyVHlwZSA9
IFY4Q2xhc3NJbmRleDo6UFJPR1JFU1NFVkVOVDsKKyAgfSBlbHNlIGlmIChpbXBsLT5pc1dlYktp
dEFuaW1hdGlvbkV2ZW50KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OldFQktJ
VEFOSU1BVElPTkVWRU5UOworICBlbHNlIGlmIChpbXBsLT5pc1dlYktpdFRyYW5zaXRpb25FdmVu
dCgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpXRUJLSVRUUkFOU0lUSU9ORVZF
TlQ7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgIGVsc2UgaWYgKGltcGwtPmlzRXJyb3JFdmVudCgp
KQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpFUlJPUkVWRU5UOworI2VuZGlmCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICBlbHNlIGlmIChpbXBsLT5pc1N0b3JhZ2VFdmVudCgp
KQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpTVE9SQUdFRVZFTlQ7CisjZW5kaWYK
KyAgZWxzZSBpZiAoaW1wbC0+aXNCZWZvcmVMb2FkRXZlbnQoKSkKKyAgICB3cmFwcGVyVHlwZSA9
IFY4Q2xhc3NJbmRleDo6QkVGT1JFTE9BREVWRU5UOworRU5ECisgICAgfSBlbHNpZiAoJGludGVy
ZmFjZU5hbWUgZXEgIldlYkdMQXJyYXkiKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CisgIGlmIChpbXBsLT5pc0J5dGVBcnJheSgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhD
bGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWTsKKyAgZWxzZSBpZiAoaW1wbC0+aXNGbG9hdEFycmF5
KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWTsKKyAg
ZWxzZSBpZiAoaW1wbC0+aXNJbnRBcnJheSgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0lu
ZGV4OjpXRUJHTElOVEFSUkFZOworICBlbHNlIGlmIChpbXBsLT5pc1Nob3J0QXJyYXkoKSkKKyAg
ICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZOworICBlbHNlIGlm
IChpbXBsLT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNz
SW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVk7CisgIGVsc2UgaWYgKGltcGwtPmlzVW5zaWdu
ZWRJbnRBcnJheSgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lH
TkVESU5UQVJSQVk7CisgIGVsc2UgaWYgKGltcGwtPmlzVW5zaWduZWRTaG9ydEFycmF5KCkpCisg
ICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZOwor
RU5ECisgICAgfQorfQorCitzdWIgQWRkVG9WOEVuZFNwZWNpYWxDYXNlcworeworICAgICRpbnRl
cmZhY2VOYW1lID0gc2hpZnQ7CisgICAgCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJEb2N1
bWVudCIgfHwgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxEb2N1bWVudCIgfHwgJGludGVyZmFjZU5h
bWUgZXEgIlNWR0RvY3VtZW50IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQp
OworICBpZiAocHJveHkpCisgICAgcHJveHktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50
V3JhcHBlcih3cmFwcGVyKTsKK0VORAorICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkhU
TUxEb2N1bWVudCIpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cisg
IC8vIENyZWF0ZSBtYXJrZXIgb2JqZWN0IGFuZCBpbnNlcnQgaXQgaW4gdHdvIGludGVybmFsIGZp
ZWxkcy4KKyAgLy8gVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0ZW1wb3Jhcnkgc2hhZG93aW5n
IG9mCisgIC8vIGRvY3VtZW50LmFsbC4KKyAgQVNTRVJUKHdyYXBwZXItPkludGVybmFsRmllbGRD
b3VudCgpID09IFY4SFRNTERvY3VtZW50OjppbnRlcm5hbEZpZWxkQ291bnQpOworICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gbWFya2VyID0gdjg6Ok9iamVjdDo6TmV3KCk7CisgIHdyYXBwZXItPlNl
dEludGVybmFsRmllbGQoVjhIVE1MRG9jdW1lbnQ6Om1hcmtlckluZGV4LCBtYXJrZXIpOworICB3
cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjpzaGFkb3dJbmRleCwgbWFy
a2VyKTsKK0VORAorICAgICAgICB9CisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIlN0
eWxlU2hlZXQiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJDU1NTdHlsZVNoZWV0IikgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNl
IGZyb20gc3R5bGVzaGVldCBvYmplY3QgdG8gaXRzIG93bmVyIG5vZGUuCisgIE5vZGUqIG93bmVy
Tm9kZSA9IGltcGwtPm93bmVyTm9kZSgpOworICBpZiAob3duZXJOb2RlKSB7CisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvd25lciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodG9W
OChvd25lck5vZGUpKTsKKyAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4U3R5bGVTaGVl
dDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKKyAgfQorRU5ECisgICAgfSBlbHNpZiAoJGludGVy
ZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKKyAgLy8gQWRkIGEgaGlkZGVuIHJlZmVyZW5jZSBmcm9tIG5hbWVkIG5vZGUgbWFw
IHRvIGl0cyBvd25lciBub2RlLgorICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGltcGwtPmVsZW1l
bnQoKSkgeworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb3duZXIgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KHRvVjgoZWxlbWVudCkpOworICAgIHdyYXBwZXItPlNldEludGVybmFs
RmllbGQoVjhOYW1lZE5vZGVNYXA6Om93bmVyTm9kZUluZGV4LCBvd25lcik7CisgIH0KK0VORAor
ICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJDYW52YXNQaXhlbEFycmF5IikgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVydGll
c1RvUGl4ZWxEYXRhKGltcGwtPmRhdGEoKS0+ZGF0YSgpLCBpbXBsLT5sZW5ndGgoKSk7XG4iKTsg
ICAKKyAgICB9ICBlbHNpZiAoJGludGVyZmFjZU5hbWUgPX4gL1dlYkdMLipBcnJheSQvKSB7Cisg
ICAgICAgIG15ICRhcnJheVR5cGUgPSAkaW50ZXJmYWNlTmFtZTsKKyAgICAgICAgJGFycmF5VHlw
ZSA9fiBzL1dlYkdMLy87CisgICAgICAgICRhcnJheVR5cGUgPSAiQnl0ZUFycmF5IiBpZiAkYXJy
YXlUeXBlIGVxICJBcnJheSI7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cisg
IHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5i
YXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsJHthcnJheVR5cGV9LCBpbXBsLT5sZW5ndGgoKSk7
CitFTkQKKyAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiQ29uc29sZSIgfHwgJGludGVy
ZmFjZU5hbWUgZXEgIkhpc3RvcnkiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJOYXZpZ2F0b3IiCisg
ICAgICAgICB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiU2NyZWVuIiB8fCAkaW50ZXJmYWNlTmFtZSBl
cSAiTG9jYXRpb24iIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01TZWxlY3Rpb24iKSB7CisgICAg
ICAgICBteSAkaW5kZXhOYW1lID0gbGNmaXJzdCgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAk
aW5kZXhOYW1lID1+IHMvZE9NL2RvbS8gaWYgJGluZGV4TmFtZSA9fiAvXmRPTS87CisgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1Jl
ZmVyZW5jZShpbXBsLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6JHtpbmRleE5hbWV9SW5kZXgsIHdy
YXBwZXIpO1xuIik7CisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkJhckluZm8iKSB7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIEZyYW1lKiBmcmFtZSA9IGlt
cGwtPmZyYW1lKCk7CisgIHN3aXRjaCAoaW1wbC0+dHlwZSgpKSB7CisgIGNhc2UgQmFySW5mbzo6
TG9jYXRpb25iYXI6CisgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uo
ZnJhbWUsIFY4RE9NV2luZG93Ojpsb2NhdGlvbmJhckluZGV4LCB3cmFwcGVyKTsKKyAgICBicmVh
azsKKyAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgorICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVu
V2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6bWVudWJhckluZGV4LCB3cmFwcGVy
KTsKKyAgICBicmVhazsKKyAgY2FzZSBCYXJJbmZvOjpQZXJzb25hbGJhcjoKKyAgICBWOERPTVdy
YXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnBlcnNv
bmFsYmFySW5kZXgsIHdyYXBwZXIpOworICAgIGJyZWFrOworICBjYXNlIEJhckluZm86OlNjcm9s
bGJhcnM6CisgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUs
IFY4RE9NV2luZG93OjpzY3JvbGxiYXJzSW5kZXgsIHdyYXBwZXIpOworICAgIGJyZWFrOworICBj
YXNlIEJhckluZm86OlN0YXR1c2JhcjoKKyAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2JhckluZGV4LCB3cmFwcGVyKTsK
KyAgICBicmVhazsKKyAgY2FzZSBCYXJJbmZvOjpUb29sYmFyOgorICAgIFY4RE9NV3JhcHBlcjo6
c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6dG9vbGJhckluZGV4
LCB3cmFwcGVyKTsKKyAgICBicmVhazsKKyAgfQorRU5ECisgICAgfQorfQorCitzdWIgR2V0RG9t
TWFwRnVuY3Rpb24KK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9
IHNoaWZ0OworICAgIHJldHVybiAiZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0
eXBlIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiOworICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgp
IiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7CisgICAgIyBPbmx5IHVzZSBnZXRET01TVkdP
YmplY3RXaXRoQ29udGV4dE1hcCgpIGZvciBub24tbm9kZSBzdmcgb2JqZWN0cworICAgIHJldHVy
biAiZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKSIgaWYgJHR5cGUgPX4gL1NWRy87Cisg
ICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01JbXBsZW1lbnRhdGlvbiI7CisgICAgcmV0dXJu
ICJnZXRBY3RpdmVET01PYmplY3RNYXAoKSIgaWYgSXNBY3RpdmVEb21UeXBlKCR0eXBlKTsKKyAg
ICByZXR1cm4gImdldERPTU9iamVjdE1hcCgpIjsKK30KKworc3ViIElzQWN0aXZlRG9tVHlwZQor
eworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk1lc3Nh
Z2VQb3J0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiWE1MSHR0cFJlcXVlc3QiOworICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJTb2NrZXQiOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJXb3JrZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFyZWRXb3JrZXIiOwor
ICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zCit7Cisg
ICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEg
IlNWR1JlY3QiOwogICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50
IjsKICAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0
cml4IjsKQEAgLTE5NjIsNyArMjQyMCw2IEBACiAKICAgICBteSAkZmlyc3QgPSAxOwogICAgIG15
ICRpbmRleCA9IDA7Ci0gICAgbXkgJG5vZGVUb1JldHVybiA9IDA7CiAKICAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBpZiAoJGlu
ZGV4IGVxICRudW1iZXJPZlBhcmFtZXRlcnMpIHsKQEAgLTE5ODQsMTAgKzI0NDEsNiBAQAogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICRwYXJhbU5hbWU7
CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlJldHVybiJ9KSB7Ci0gICAgICAgICAgICAkbm9kZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+
bmFtZTsKLSAgICAgICAgfQogICAgICAgICAkaW5kZXgrKzsKICAgICB9CiAKQEAgLTIwMDYsMTkg
KzI0NTksNyBAQAogICAgIG15ICRyZXR1cm4gPSAicmVzdWx0IjsKICAgICBteSAkcmV0dXJuSXNS
ZWYgPSBJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpOwogCi0gICAgaWYgKCRub2RlVG9SZXR1cm4p
IHsKLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGluc2VydEJlZm9yZSwgcmVwbGFjZUNoaWxk
LCByZW1vdmVDaGlsZCBhbmQKLSAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBO
b2RlLgotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBzdWNjZXNzID0gJGZ1bmN0
aW9uU3RyaW5nO1xuIjsKLSAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25z
fSkgewotICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChVTkxJS0VMWShlYykp
IGdvdG8gZmFpbDtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4g
ImlmIChzdWNjZXNzKVxuIjsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICAiIC4K
LSAgICAgICAgICAgICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
JG5vZGVUb1JldHVybik7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJu
IHY4OjpOdWxsKCk7XG4iOwotICAgICAgICByZXR1cm4gJHJlc3VsdDsKLSAgICB9IGVsc2lmICgk
cmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICBpZiAoJHJldHVyblR5cGUgZXEgInZvaWQiKSB7
CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iOwogICAg
IH0gZWxzaWYgKCRjb3B5Rmlyc3QpIHsKICAgICAgICAgJHJlc3VsdCAuPQpAQCAtMjA3Nyw4ICsy
NTE4LDggQEAKICAgICB9CiAKICAgICBpZiAoJHJldHVybnNQb2RUeXBlKSB7Ci0gICAgICAgIG15
ICRjbGFzc0luZGV4ID0gdWMoJHJldHVyblR5cGUpOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRl
bnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkpO1xuIjsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siVjgke3JldHVyblR5cGV9LmgifSA9IDE7CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVu
dCAuICJyZXR1cm4gdG9WOCh3cmFwcGVyLnJlbGVhc2UoKSk7XG4iOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNSZWYpOwogICAgICAg
ICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUsICRyZXR1cm4sICRpbmRlbnQpIC4gIjtcbiI7CkBAIC0yMTM4LDYgKzI1NzksNyBA
QAogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CiAgICAgcmV0dXJuIDAgaWYg
JHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNp
Z25lZCBzaG9ydCI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgIlNWR0FuaW1hdGVkUG9pbnRz
IjsKIAogICAgIHJldHVybiAxOwogfQpAQCAtMjE3OCw3ICsyNjIwLDcgQEAKICAgICByZXR1cm4g
IlNWR1RyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybSI7CiAgICAgcmV0dXJuICJT
VkdMZW5ndGgiIGlmICR0eXBlIGVxICJTVkdMZW5ndGgiOwogICAgIHJldHVybiAiU1ZHQW5nbGUi
IGlmICR0eXBlIGVxICJTVkdBbmdsZSI7Ci0gICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBlIGVx
ICJTVkdOdW1iZXIiOworICAgIHJldHVybiAiZmxvYXQiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIi
OwogICAgIHJldHVybiAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyIgaWYgJHR5cGUgZXEgIlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW8iOwogICAgIHJldHVybiAiU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSIg
aWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAgICAgcmV0dXJuICJET01UaW1lU3RhbXAiIGlm
ICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwpAQCAtMjM5Miw3ICsyODM0LDExIEBACiBzdWIgR2V0
VjhIZWFkZXJOYW1lCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICByZXR1cm4gIlY4IiAu
IEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUpOworICAgIHJldHVybiAiVjhFdmVudC5o
IiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIkV2ZW50TGlzdGVuZXIu
aCIgaWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOworICAgIHJldHVybiAiRXZlbnRUYXJnZXQu
aCIgaWYgJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1
cm4gIlY4JHt0eXBlfS5oIjsKIH0KIAogCkBAIC0yNTE3LDcgKzI5NjMsNiBAQAogICAgIG15ICR2
YWx1ZSA9IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IEdl
dFR5cGVGcm9tU2lnbmF0dXJlKCRzaWduYXR1cmUpOwotICAgIG15ICRjbGFzc05hbWU9ICJWOCR0
eXBlIjsKIAogICAgIHJldHVybiAicmV0dXJuIHY4OjpEYXRlOjpOZXcoc3RhdGljX2Nhc3Q8ZG91
YmxlPigkdmFsdWUpKSIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CiAgICAgcmV0dXJuICJy
ZXR1cm4gdjhCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKQEAgLTI1NDMs
MjkgKzI5ODgsMjAgQEAKICAgICAgICAgcmV0dXJuICJyZXR1cm4gdjhTdHJpbmcoJHZhbHVlKSI7
CiAgICAgfQogCi0gICAgIyBWOCBzcGVjaWZpYy4KLSAgICBteSAkaW1wbENsYXNzTmFtZSA9ICR0
eXBlOwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICAjIHNwZWNpYWwgY2Fz
ZSBmb3Igbm9uLURPTSBub2RlIGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlw
ZSkpIHsKLSAgICAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1
cm5zTmV3In0pIHsKLSAgICAgICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydE5ld05vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
JHZhbHVlKSI7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJyZXR1cm4gdG9WOCgke3ZhbHVl
fSIgLiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybnNOZXcifSA/ICIs
IHRydWUpIiA6ICIpIik7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIg
b3IgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICBpZiAoJHR5cGUgZXEgIkV2
ZW50VGFyZ2V0IikgewogICAgICAgICByZXR1cm4gInJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRFdmVudFRhcmdldFRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0eXBl
IGVxICJFdmVudCIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0RXZlbnRUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgIH0KLQogICAgIGlmICgkdHlwZSBlcSAi
RXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksICR2YWx1ZSkiOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1cm4gInJldHVybiAke3ZhbHVlfSA/IHY4OjpIYW5k
bGU8djg6OlZhbHVlPihzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KCR7dmFs
dWV9KS0+Z2V0TGlzdGVuZXJPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSA6
IHY4OjpOdWxsKCkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlIikgewpAQCAtMjU4OSwxOCArMzAyNSwxNSBAQAogICAgICAgICByZXR1cm4gInJldHVy
biB2OERhdGVPck51bGwoJHZhbHVlKTsiOwogICAgIH0KIAotICAgIGVsc2UgewotICAgICAgICAk
aW1wbEluY2x1ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0gPSAxOwotICAgICAgICAkaW1wbEluY2x1
ZGVzeyJ3dGYvUmVmUHRyLmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9HZXRQ
dHIuaCJ9ID0gMTsKLSAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CisgICAgJGlt
cGxJbmNsdWRlc3sid3RmL1JlZkNvdW50ZWQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3
dGYvUmVmUHRyLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0gPSAx
OwogCi0gICAgICAgIGlmIChJc1BvZFR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICAgICAkdmFsdWUg
PSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyKCR0eXBlLCAkdmFsdWUpOwotICAgICAg
ICB9CisgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgJHZhbHVlID0gR2VuZXJh
dGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigkdHlwZSwgJHZhbHVlKSAuICIuZ2V0KCkiOworICAg
IH0KIAotICAgICAgICByZXR1cm4gInJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOwotICAgIH0KKyAgICByZXR1
cm4gInJldHVybiB0b1Y4KCR2YWx1ZSkiOwogfQogCiBzdWIgR2VuZXJhdGVTVkdTdGF0aWNQb2RU
eXBlV3JhcHBlciB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZp
c2lvbiA1MzcxNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgog
I2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgIlY4RE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIlY4
RE9NTWFwLmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOEV2ZW50TGlz
dGVuZXJMaXN0LmgiCkBAIC01NCw5ICs1NSwxNSBAQAogI2luY2x1ZGUgIlY4TWVzc2FnZUNoYW5u
ZWwuaCIKICNpbmNsdWRlICJWOExvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVNYXAu
aCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOE5vZGVMaXN0LmgiCisjaW5jbHVk
ZSAiVjhOb3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhT
VkdFbGVtZW50SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJWOFNoYXJlZFdvcmtlci5oIgogI2luY2x1
ZGUgIlY4U3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4V2ViU29ja2V0LmgiCisjaW5jbHVkZSAi
VjhXb3JrZXIuaCIKICNpbmNsdWRlICJXZWJHTEFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCkBAIC03
OCw3ICs4NSw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCi1zdGF0aWMgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIGRvd25jYXN0U1ZHUGF0aFNlZyh2b2lkKiBwYXRoU2VnKQorVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIFY4RE9NV3JhcHBlcjo6ZG93bmNhc3RTVkdQYXRoU2VnKHZvaWQq
IHBhdGhTZWcpCiB7CiAgICAgU1ZHUGF0aFNlZyogcmVhbFBhdGhTZWcgPSByZWludGVycHJldF9j
YXN0PFNWR1BhdGhTZWcqPihwYXRoU2VnKTsKIApAQCAtMTE2MCw2OSArMTE2Nyw1OSBAQAogICAg
ICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgU1ZHRWxlbWVu
dEluc3RhbmNlKiBpbnN0YW5jZSA9IHRhcmdldC0+dG9TVkdFbGVtZW50SW5zdGFuY2UoKTsKLSAg
ICBpZiAoaW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5DRSwgaW5zdGFuY2UpOworICAgIGlmIChTVkdFbGVtZW50
SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpKQorICAg
ICAgICByZXR1cm4gdG9WOChpbnN0YW5jZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXT1JLRVJT
KQotICAgIFdvcmtlciogd29ya2VyID0gdGFyZ2V0LT50b1dvcmtlcigpOwotICAgIGlmICh3b3Jr
ZXIpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldPUktF
Uiwgd29ya2VyKTsKKyAgICBpZiAoV29ya2VyKiB3b3JrZXIgPSB0YXJnZXQtPnRvV29ya2VyKCkp
CisgICAgICAgIHJldHVybiB0b1Y4KHdvcmtlcik7CiAjZW5kaWYgLy8gV09SS0VSUwogCiAjaWYg
RU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgIFNoYXJlZFdvcmtlciogc2hhcmVkV29ya2VyID0g
dGFyZ2V0LT50b1NoYXJlZFdvcmtlcigpOwotICAgIGlmIChzaGFyZWRXb3JrZXIpCi0gICAgICAg
IHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNIQVJFRFdPUktFUiwgc2hh
cmVkV29ya2VyKTsKKyAgICBpZiAoU2hhcmVkV29ya2VyKiBzaGFyZWRXb3JrZXIgPSB0YXJnZXQt
PnRvU2hhcmVkV29ya2VyKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHNoYXJlZFdvcmtlcik7CiAj
ZW5kaWYgLy8gU0hBUkVEX1dPUktFUlMKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQotICAg
IE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uID0gdGFyZ2V0LT50b05vdGlmaWNhdGlvbigpOwot
ICAgIGlmIChub3RpZmljYXRpb24pCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uKTsKKyAgICBpZiAoTm90aWZp
Y2F0aW9uKiBub3RpZmljYXRpb24gPSB0YXJnZXQtPnRvTm90aWZpY2F0aW9uKCkpCisgICAgICAg
IHJldHVybiB0b1Y4KG5vdGlmaWNhdGlvbik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfU09D
S0VUUykKLSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHRhcmdldC0+dG9XZWJTb2NrZXQoKTsK
LSAgICBpZiAod2ViU29ja2V0KQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpXRUJTT0NLRVQsIHdlYlNvY2tldCk7CisgICAgaWYgKFdlYlNvY2tldCogd2Vi
U29ja2V0ID0gdGFyZ2V0LT50b1dlYlNvY2tldCgpKQorICAgICAgICByZXR1cm4gdG9WOCh3ZWJT
b2NrZXQpOwogI2VuZGlmCiAKLSAgICBOb2RlKiBub2RlID0gdGFyZ2V0LT50b05vZGUoKTsKLSAg
ICBpZiAobm9kZSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnROb2RlVG9WOE9iamVjdChub2RlKTsK
KyAgICBpZiAoTm9kZSogbm9kZSA9IHRhcmdldC0+dG9Ob2RlKCkpCisgICAgICAgIHJldHVybiB0
b1Y4KG5vZGUpOwogCiAgICAgaWYgKERPTVdpbmRvdyogZG9tV2luZG93ID0gdGFyZ2V0LT50b0RP
TVdpbmRvdygpKQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIGRvbVdpbmRvdyk7CisgICAgICAgIHJldHVybiB0b1Y4KGRvbVdpbmRvdyk7
CiAKICAgICAvLyBYTUxIdHRwUmVxdWVzdCBpcyBjcmVhdGVkIHdpdGhpbiBpdHMgSlMgY291bnRl
cnBhcnQuCi0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gdGFyZ2V0LT50b1hN
TEh0dHBSZXF1ZXN0KCk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0KSB7CisgICAgaWYgKFhNTEh0
dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdCgpKSB7
CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9i
amVjdE1hcCgpLmdldCh4bWxIdHRwUmVxdWVzdCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBlci5J
c0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKICAgICAvLyBNZXNz
YWdlUG9ydCBpcyBjcmVhdGVkIHdpdGhpbiBpdHMgSlMgY291bnRlcnBhcnQKLSAgICBNZXNzYWdl
UG9ydCogcG9ydCA9IHRhcmdldC0+dG9NZXNzYWdlUG9ydCgpOwotICAgIGlmIChwb3J0KSB7Cisg
ICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQb3J0KCkpIHsKICAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0QWN0aXZlRE9NT2JqZWN0
TWFwKCkuZ2V0KHBvcnQpOwogICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNFbXB0eSgpKTsKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCi0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQq
IHVwbG9hZCA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdFVwbG9hZCgpOwotICAgIGlmICh1cGxv
YWQpIHsKKyAgICBpZiAoWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IHRhcmdldC0+dG9Y
TUxIdHRwUmVxdWVzdFVwbG9hZCgpKSB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldCh1cGxvYWQpOwogICAgICAgICBBU1NFUlQo
IXdyYXBwZXIuSXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCiAj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBET01BcHBsaWNhdGlvbkNh
Y2hlKiBkb21BcHBDYWNoZSA9IHRhcmdldC0+dG9ET01BcHBsaWNhdGlvbkNhY2hlKCk7Ci0gICAg
aWYgKGRvbUFwcENhY2hlKQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpET01BUFBMSUNBVElPTkNBQ0hFLCBkb21BcHBDYWNoZSk7CisgICAgaWYgKERPTUFw
cGxpY2F0aW9uQ2FjaGUqIGRvbUFwcENhY2hlID0gdGFyZ2V0LT50b0RPTUFwcGxpY2F0aW9uQ2Fj
aGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoZG9tQXBwQ2FjaGUpOwogI2VuZGlmCiAKICAgICBB
U1NFUlQoMCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gNTM3MTUpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5
MSw5IEBACiAgICAgICAgICAgICBzZXRTVkdDb250ZXh0KG9iamVjdC5nZXQoKSwgY29udGV4dCk7
CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB2
b2lkKiB3aXRoU1ZHQ29udGV4dCh2b2lkKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRpYyBUKiB3aXRoU1ZH
Q29udGV4dChUKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHNldFNWR0NvbnRleHQob2JqZWN0LCBjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHJldmlzaW9uIDUz
NzE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUxLDE1ICsyNTEsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKICNlbmRpZgogCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgLy8gU2V0IGhpZGRlbiByZWZlcmVuY2VzIGluIGEgRE9NV2luZG93IG9iamVjdCBvZiBh
IGZyYW1lLgotICAgICAgICBzdGF0aWMgdm9pZCBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJh
bWUqLCBjb25zdCBpbnQgaW50ZXJuYWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7Ci0K
ICAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBodG1sRWxlbWVudFR5
cGUoSFRNTEVsZW1lbnQqKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBzdGF0aWMgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsKKyAgICAg
ICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb3duY2FzdFNWR1BhdGhTZWco
dm9pZCogcGF0aFNlZyk7CiAjZW5kaWYKKyAgICAgICAgLy8gU2V0IGhpZGRlbiByZWZlcmVuY2Vz
IGluIGEgRE9NV2luZG93IG9iamVjdCBvZiBhIGZyYW1lLgorICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBpbnQgaW50ZXJuYWxJbmRleCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAKKyAgICBwcml2YXRlOgorCiAgICAgICAgIC8vIFRo
ZSBmaXJzdCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gZGVzY3JpcHRvcgog
ICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBKUyBvYmplY3QuIFRoZSBzZWNvbmQgVjhXcmFwcGVy
VHlwZSBzcGVjaWZpZXMKICAgICAgICAgLy8gdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2b2lkKiBm
b3IgdHlwZSBjYXN0aW5nLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCShyZXZp
c2lvbiA1MzcxNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNiBAQAogICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rp
b24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbm9kZUNvbGxlY3Rpb25JbmRleGVkUHJv
cGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiAgICAgewogICAg
ICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkp
OwotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRl
cigpKSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOwogICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwogICAg
ICAgICBpbnQgbGVuZ3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7CiAgICAgICAgIHY4OjpIYW5k
bGU8djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzNzE1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoY29uc3QgV2ViR0xHZXRJbmZv
JiBpbmZvKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KGNvbnN0IFdl
YkdMR2V0SW5mbyYgaW5mbykKIHsKICAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgpKSB7CiAgICAg
Y2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbDoKQEAgLTI2MSw3ICsyNjEsNyBAQAogICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9WOE9i
amVjdChpbmZvKTsKIH0KIAogc3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0b1dlYkdMVW5p
Zm9ybUxvY2F0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCkBAIC0z
MTcsNyArMzE3LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvVjgoaW5m
byk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTM0Miw3ICszNDIsNyBAQAogICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
ICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbmZv
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAg
LTM2OCw3ICszNjgsNyBAQAogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwog
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChp
bmZvKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNDAwLDcgKzQwMCw3IEBACiAg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiB0
b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0
dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9u
IDUzNzE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3Vs
dCA9IG5vZGVJdGVyYXRvci0+bmV4dE5vZGUoJnN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIHRvVjgo
cmVzdWx0LnJlbGVhc2UoKSwgZWMsICZzdGF0ZSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnRvVjgo
cmVzdWx0LnJlbGVhc2UoKSwgZWMsICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKQEAgLTc2LDcgKzc2LDcgQEAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gbm9kZUl0ZXJh
dG9yLT5wcmV2aW91c05vZGUoJnN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJl
bGVhc2UoKSwgZWMsICZzdGF0ZSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnRvVjgocmVzdWx0LnJl
bGVhc2UoKSwgZWMsICZzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDUzNzE1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENhbnZhc1N0eWxlKiBzdHlsZSkK
K3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChDYW52YXNTdHlsZSogc3R5
bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKQogICAgICAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU0dSQURJ
RU5ULCBzdHlsZS0+Y2FudmFzR3JhZGllbnQoKSk7CkBAIC03OCw3ICs3OCw3IEBACiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNj
ZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJl
dHVybiB0b1Y4KGltcGwtPnN0cm9rZVN0eWxlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGlt
cGwtPnN0cm9rZVN0eWxlKCkpOwogfQogCiB2b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VTdHlsZUFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
QEAgLTkwLDcgKzkwLDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZmlsbFN0eWxlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKiBpbXBsID0gVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcGwtPmZpbGxTdHlsZSgpKTsKKyAg
ICByZXR1cm4gdG9WOE9iamVjdChpbXBsLT5maWxsU3R5bGUoKSk7CiB9CiAKIHZvaWQgVjhDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZUFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzcxNSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw2IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGlu
ZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVChWOERPTVdy
YXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0gICAgQVNTRVJUKFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpO
T0RFKTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gVjhIVE1MU2VsZWN0RWxlbWVudDo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSktPml0ZW0oaW5kZXgpOwogICAgIGlmICghcmVzdWx0KQogICAg
ICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24g
NTM3MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRy
PE5vZGU+IG9iamVjdCwgU2NyaXB0U3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChQYXNzUmVmUHRyPE5vZGU+IG9iamVjdCwgU2NyaXB0
U3RhdGUqIHN0YXRlKQogewogICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLT5leGNlcHRpb24oKSk7CkBAIC02Miw3ICs2Miw3IEBA
CiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJl
ZVdhbGtlci0+cGFyZW50Tm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwg
JnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6Zmlyc3RD
aGlsZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC03Miw3ICs3Miw3IEBA
CiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJl
ZVdhbGtlci0+Zmlyc3RDaGlsZCgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwg
JnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bGFzdENo
aWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTgyLDcgKzgyLDcgQEAK
IAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVl
V2Fsa2VyLT5sYXN0Q2hpbGQoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFz
ZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCksICZz
dGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6Om5leHROb2Rl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTkyLDcgKzkyLDcgQEAKIAog
ICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fs
a2VyLT5uZXh0Tm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCks
ICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRl
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJldmlvdXNOb2Rl
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEwMiw3ICsxMDIsNyBAQAog
CiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVX
YWxrZXItPnByZXZpb3VzTm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwg
JnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bmV4dFNp
YmxpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTEyLDcgKzExMiw3
IEBACiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0g
dHJlZVdhbGtlci0+bmV4dFNpYmxpbmcoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQu
cmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNl
KCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6OnBy
ZXZpb3VzU2libGluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMjIs
NyArMTIyLDcgQEAKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiBy
ZXN1bHQgPSB0cmVlV2Fsa2VyLT5wcmV2aW91c1NpYmxpbmcoJnN0YXRlKTsKLSAgICByZXR1cm4g
dG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJl
c3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47352</attachid>
            <date>2010-01-25 09:43:17 -0800</date>
            <delta_ts>2010-01-25 10:08:50 -0800</delta_ts>
            <desc>Attempt #1.1 at generating toV8()</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>45509</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzcxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDEtMjIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEdlbmVyYXRlIHRvVjgoKSBjb252ZXJ0ZXIgZnVuY3Rpb25zIGFuZCByZW5hbWUgc29tZSBm
dW5jdGlvbnMgcHJldmlvdXNseSBjYWxsZWQgdG9WOCgpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2MworCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IEdlbmVyYXRlIHRvVjgoKSBjb252ZXJ0ZXJzLgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoK
KwogMjAxMC0wMS0yMiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTM3MTUpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTQgKzE1NiwxNSBAQAogCiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGgg
dGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5l
ZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0
aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpIG9yICR0eXBlIGVx
ICJEYXRlIikgewotICAgIH0gZWxzaWYgKCR0eXBlID1+IC9TVkdQYXRoU2VnLykgewotICAgICAg
ICAkam9pbmVkTmFtZSA9ICR0eXBlOwotICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fic3xSZWwv
LzsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWROYW1lfS5oIn0gPSAxOwotICAgIH0g
ZWxzZSB7CisgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBh
bmQgIUF2b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKSBhbmQgJHR5cGUgbmUgIkRhdGUiKSB7CiAg
ICAgICAgICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCi0gICAgICAgICRp
bXBsSW5jbHVkZXN7R2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZSgke3R5cGV9KX0gPSAxOworICAg
ICAgICAkaW1wbEluY2x1ZGVze0dldFY4SGVhZGVyTmFtZSgke3R5cGV9KX0gPSAxOworCisgICAg
ICAgIGlmICgkdHlwZSA9fiAvU1ZHUGF0aFNlZy8pIHsKKyAgICAgICAgICAgICRqb2luZWROYW1l
ID0gJHR5cGU7CisgICAgICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fic3xSZWwvLzsKKyAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IiR7am9pbmVkTmFtZX0uaCJ9ID0gMTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgICMgYWRkaXRpb25hbCBpbmNsdWRlcyAodGhpbmdzIG5lZWRlZCB0byBjb21w
aWxlIHRoZSBiaW5kaW5ncyBidXQgbm90IHRoZSBoZWFkZXIpCkBAIC0yMTAsMTcgKzIxMSw2IEBA
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRpbXBsQ2xhc3NOYW1lO1xuXG4iKSB1
bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbXBsQ2xhc3NOYW1lKTsK
IH0KIAotc3ViIEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUKLXsKLSAgICBteSAkaWZhY2UgPSBz
aGlmdDsKLSAgICByZXR1cm4gIkV2ZW50LmgiIGlmICRpZmFjZSBlcSAiRE9NVGltZVN0YW1wIjsK
LSAgICByZXR1cm4gIk5hbWVkQXR0ck1hcC5oIiBpZiAkaWZhY2UgZXEgIk5hbWVkTm9kZU1hcCI7
Ci0gICAgcmV0dXJuICJOYW1lTm9kZUxpc3QuaCIgaWYgJGlmYWNlIGVxICJOb2RlTGlzdCI7Ci0g
ICAgcmV0dXJuICJYTUxIdHRwUmVxdWVzdC5oIiBpZiAkaWZhY2UgZXEgIlhNTEh0dHBSZXF1ZXN0
IjsKLQotICAgIHJldHVybiAiJHtpZmFjZX0uaCI7Ci19Ci0KICMgSWYgdGhlIG5vZGUgaGFzIGEg
W0NvbmRpdGlvbmFsPVhYWF0gYXR0cmlidXRlLCByZXR1cm5zIGFuICJFTkFCTEUoWFhYKSIgc3Ry
aW5nIGZvciB1c2UgaW4gYW4gI2lmLgogc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcKIHsK
QEAgLTI1OCw3ICsyNDgsNiBAQAogCiAgICAgIyBHZXQgY29ycmVjdCBwYXNzL3N0b3JlIHR5cGVz
IHJlc3BlY3RpbmcgUE9EVHlwZSBmbGFnCiAgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07Ci0gICAgbXkgJHBhc3NUeXBlID0gJHBvZFR5
cGUgPyAiSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIiA6ICIkaW1wbENsYXNzTmFtZSoi
OwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJHBvZFR5cGUuaFwiXG4i
KSBpZiAkcG9kVHlwZSBhbmQgKCRwb2RUeXBlIG5lICJkb3VibGUiIGFuZCAkcG9kVHlwZSBuZSAi
ZmxvYXQiIGFuZCAkcG9kVHlwZSBuZSAiUkdCQTMyIik7CiAKQEAgLTI2OCwxNSArMjU3LDIxIEBA
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiVjhJbmRleC5oXCJcbiIpOwog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdldEhlYWRlckNsYXNzSW5jbHVkZSgkaW1wbENsYXNz
TmFtZSkpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtc
biIpOworICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG50ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPiBjbGFzcyBWOFNWR1BPRFR5cGVXcmFwcGVyO1xu
Iik7CisgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNzICRjbGFzc05hbWUg
e1xuIik7Ci0gICAgCi0gICAgbXkgJHRvTmF0aXZlUmV0dXJuVHlwZSA9IEdldFJldHVyblR5cGVG
b3JUb05hdGl2ZSgkaW50ZXJmYWNlTmFtZSk7CisKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5h
dGl2ZVR5cGVGb3JDb252ZXJzaW9ucygkaW50ZXJmYWNlTmFtZSk7CisgICAgaWYgKCRwb2RUeXBl
KSB7CisgICAgICAgICRuYXRpdmVUeXBlID0gIlY4U1ZHUE9EVHlwZVdyYXBwZXI8JHtuYXRpdmVU
eXBlfSA+IjsKKyAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwogCiAgcHVi
bGljOgogICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpOwogICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJh
d1RlbXBsYXRlKCk7Ci0gIHN0YXRpYyAke3RvTmF0aXZlUmV0dXJuVHlwZX0qIHRvTmF0aXZlKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4pOworICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRpdmUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiBFTkQKIAogICAgIGlmICgkaW1wbENsYXNzTmFtZSBl
cSAiRE9NV2luZG93IikgewpAQCAtMzQwLDcgKzMzNSwxMyBAQAogICBmcmllbmQgY2xhc3MgVjhD
bGFzc0luZGV4OwogfTsKIAorICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5
cGV9KiwgYm9vbCBmb3JjZU5ld09iamVjdCA9IGZhbHNlKTsKIEVORAorICAgIGlmIChJc1JlZlB0
clR5cGUoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8
RU5EKTsKKyAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwke25hdGl2ZVR5
cGV9ID4sIGJvb2wgZm9yY2VOZXdPYmplY3QgPSBmYWxzZSk7CitFTkQKKyAgICB9CiAKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAifVxuXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
I2VuZGlmIC8vICRjbGFzc05hbWUiIC4gIl9IXG4iKTsKQEAgLTY1Niw3ICs2NTcsNyBAQAogICAg
ICAgICAkYXR0cklzUG9kVHlwZSA9IDA7CiAgICAgfQogCi0gICAgbXkgJGdldHRlclN0cmluZ1Vz
ZXNJbXAgPSAkaW1wbENsYXNzTmFtZSBuZSAiZG91YmxlIjsKKyAgICBteSAkZ2V0dGVyU3RyaW5n
VXNlc0ltcCA9ICRpbXBsQ2xhc3NOYW1lIG5lICJmbG9hdCI7CiAKICAgIyBHZXR0ZXIKICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC04MTIsMTMgKzgxMywxNiBAQAogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVTVkdDb250ZXh0QXNzaWdu
bWVudCgkaW1wbENsYXNzTmFtZSwgIndyYXBwZXIuZ2V0KCkiLCAiICAgICIpKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIEdlbmVyYXRlU1ZH
Q29udGV4dFJldHJpZXZhbCgkaW1wbENsYXNzTmFtZSwgIiAgICAiKSk7Ci0gICAgICAgICAgICAk
cmVzdWx0ID0gIlY4UHJveHk6OndpdGhTVkdDb250ZXh0KCRyZXN1bHQsIGNvbnRleHQpIjsKKyAg
ICAgICAgICAgICMgVGhlIHRlbXBsYXRpbmcgYXNzb2NpYXRlZCB3aXRoIHBhc3Npbmcgd2l0aFNW
R0NvbnRleHQoKSdzIHJldHVybiB2YWx1ZSBkaXJlY3RseSBpbnRvIHRvVjggY2FuIGdldCBjb21w
aWxlcnMgY29uZnVzZWQsCisgICAgICAgICAgICAjIHNvIGp1c3QgbWFudWFsbHkgc2V0IHRoZSBy
ZXR1cm4gdmFsdWUgdG8gYSBQYXNzUmVmUHRyIG9mIHRoZSBleHBlY3RlZCB0eXBlLgorICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBQYXNzUmVmUHRyPCRhdHRyVHlwZT4g
cmVzdWx0QXNQYXNzUmVmUHRyID0gVjhQcm94eTo6d2l0aFNWR0NvbnRleHQoJHJlc3VsdCwgY29u
dGV4dCk7XG4iKTsKKyAgICAgICAgICAgICRyZXN1bHQgPSAicmVzdWx0QXNQYXNzUmVmUHRyIjsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgkYXR0cklzUG9kVHlwZSkgewotICAgICAgICBt
eSAkY2xhc3NJbmRleCA9IHVjKCRhdHRyVHlwZSk7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkpO1xuIik7CisgICAgICAgICRp
bXBsSW5jbHVkZXN7IlY4JHthdHRyVHlwZX0uaCJ9ID0gMTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOCh3cmFwcGVyLnJlbGVhc2UoKS5nZXQoKSk7XG4i
KTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIg
LiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAi
ICAgICIpLiI7XG4iKTsKICAgICB9CkBAIC05MzQsNyArOTM4LDcgQEAKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwogICAgIH0K
IAotICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiZG91YmxlIikgeworICAgIGlmICgkaW1wbENs
YXNzTmFtZSBlcSAiZmxvYXQiKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgKmltcCA9ICRyZXN1bHQ7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBteSAkaW1wbFNl
dHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyTmFtZSk7
CkBAIC0xNDYxLDcgKzE0NjUsOSBAQAogICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxu
IiAuCiAgICAgICAgICAiI2luY2x1ZGUgXCJWOFByb3h5LmhcIlxuIiAuCiAgICAgICAgICAiI2lu
Y2x1ZGUgXCJWOEJpbmRpbmcuaFwiXG4iIC4KLSAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGlu
Z1N0YXRlLmhcIlxuXG4iIC4KKyAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGluZ1N0YXRlLmhc
IlxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOERPTVdyYXBwZXIuaFwiXG4iIC4KKyAgICAg
ICAgICIjaW5jbHVkZSBcIlY4SXNvbGF0ZWRDb250ZXh0LmhcIlxuXG4iIC4KICAgICAgICAgICIj
dW5kZWYgTE9HXG5cbiIpOwogCiAgICAgcHVzaChAaW1wbEZpeGVkSGVhZGVyLCAiXG4jaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwpAQCAtMTg1OSw3
ICsxODY1LDEwIEBACiBFTkQKICAgICB9CiAKLSAgICAkdG9OYXRpdmVSZXR1cm5UeXBlID0gR2V0
UmV0dXJuVHlwZUZvclRvTmF0aXZlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkbmF0aXZlVHlw
ZSA9IEdldE5hdGl2ZVR5cGVGb3JDb252ZXJzaW9ucygkaW50ZXJmYWNlTmFtZSk7CisgICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifSkgeworICAgICAgICAk
bmF0aXZlVHlwZSA9ICJWOFNWR1BPRFR5cGVXcmFwcGVyPCR7bmF0aXZlVHlwZX0+IjsKKyAgICB9
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgCiAgIC8vIEN1c3RvbSB0b1N0cmlu
ZyB0ZW1wbGF0ZQpAQCAtMTg3Nyw4ICsxODg2LDggQEAKICAgcmV0dXJuICR7Y2xhc3NOYW1lfV9j
YWNoZV87CiB9CiAKLSR7dG9OYXRpdmVSZXR1cm5UeXBlfSogJHtjbGFzc05hbWV9Ojp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkgewotICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDwke3RvTmF0aXZlUmV0dXJuVHlwZX0qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOyAKKyR7bmF0aXZlVHlwZX0qICR7Y2xh
c3NOYW1lfTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpIHsKKyAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+KG9iamVjdC0+R2V0UG9pbnRlckZy
b21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7IAogfQogCiBib29sICR7
Y2xhc3NOYW1lfTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKSB7CkBA
IC0xODg5LDYgKzE4OTgsMzcgQEAKIAogICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRE9NV2lu
ZG93IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoRE9NV2luZG93KiB3aW5kb3csIGJvb2wpIHsKKyAgaWYgKCF3aW5kb3cp
CisgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgIC8vIEluaXRpYWxpemVzIGVudmlyb25tZW50IG9m
IGEgZnJhbWUsIGFuZCByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3Qgb2YgdGhlIGZyYW1lLgorICBG
cmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgIGlmICghZnJhbWUpCisgICAgcmV0dXJu
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKKworICAvLyBTcGVjaWFsIGNhc2U6IEJlY2F1c2Ug
b2YgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoKSBvbmUgRE9NV2luZG93IGNhbiBoYXZlCisgIC8v
IG11bHRpcGxlIGNvbnRleHRzIGFuZCBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBhc3NvY2lhdGVk
IHdpdGggaXQuIFdoZW4KKyAgLy8gY29kZSBydW5uaW5nIGluIG9uZSBvZiB0aG9zZSBjb250ZXh0
cyBhY2Nlc3NlcyB0aGUgd2luZG93IG9iamVjdCwgd2UKKyAgLy8gd2FudCB0byByZXR1cm4gdGhl
IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29udGV4dCwgbm90CisgIC8vIG5l
Y2Vzc2FyaWx5IHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IERP
TVdpbmRvdy4KKyAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3VycmVudENvbnRleHQgPSB2ODo6
Q29udGV4dDo6R2V0Q3VycmVudCgpOworICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGN1cnJlbnRH
bG9iYWwgPSBjdXJyZW50Q29udGV4dC0+R2xvYmFsKCk7CisgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgY3VycmVudEdsb2JhbCk7CisgIGlmICghd2luZG93V3JhcHBlci5J
c0VtcHR5KCkpIHsKKyAgICBpZiAoVjhET01XaW5kb3c6OnRvTmF0aXZlKHdpbmRvd1dyYXBwZXIp
ID09IHdpbmRvdykKKyAgICAgIHJldHVybiBjdXJyZW50R2xvYmFsOworICB9CisKKyAgLy8gT3Ro
ZXJ3aXNlLCByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJh
bWUuCisgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0
KGZyYW1lKTsKKyAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCk7CisKKyAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBjb250
ZXh0LT5HbG9iYWwoKTsKKyAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgpKTsKKyAgcmV0dXJuIGds
b2JhbDsKK30KKwogdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBWOERPTVdpbmRv
dzo6R2V0U2hhZG93T2JqZWN0VGVtcGxhdGUoKSB7CiAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0VGVtcGxhdGU+IFY4RE9NV2luZG93U2hhZG93T2JqZWN0X2NhY2hlXzsKICAgaWYg
KFY4RE9NV2luZG93U2hhZG93T2JqZWN0X2NhY2hlXy5Jc0VtcHR5KCkpIHsKQEAgLTE4OTgsNiAr
MTkzOCw5IEBACiAgIHJldHVybiBWOERPTVdpbmRvd1NoYWRvd09iamVjdF9jYWNoZV87CiB9CiBF
TkQKKyAgICB9IGVsc2UgeworICAgICAgICAjIEdlbmVyYXRpbmcgYSBWOCB3cmFwcGVyIGZvciBE
T01XaW5kb3cgaXMgbm90aGluZyBsaWtlIGFsbCB0aGUgb3RoZXIgY2FzZXMsIHNvIGl0J3Mgc3Bl
Y2lhbCBjYXNlZCBhYm92ZS4gICAgCisgICAgICAgIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMoJGRh
dGFOb2RlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG5hdGl2ZVR5cGUpOwogICAgIH0K
IAogICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CkBAIC0xOTA3LDkgKzE5NTAsNDI0IEBA
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCi1zdWIgR2V0UmV0dXJuVHlwZUZvclRv
TmF0aXZlCitzdWIgR2VuZXJhdGVUb1Y4Q29udmVydGVycyAKIHsKKyAgICBteSAkZGF0YU5vZGUg
PSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05h
bWUgPSBzaGlmdDsKKyAgICBteSAkbmF0aXZlVHlwZSA9IHNoaWZ0OworICAgIG15ICRkZWZhdWx0
V3JhcHBlclR5cGUgPSAiVjhDbGFzc0luZGV4OjoiIC4gdWMoJGludGVyZmFjZU5hbWUpOworICAg
IG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRhTm9kZSwgJGludGVy
ZmFjZU5hbWUpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7ICAgCisgICAgCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCBib29sIGZvcmNlTmV3
T2JqZWN0KSB7CisgIGlmICghaW1wbCkKKyAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJUeXBlID0gJHtkZWZhdWx0V3JhcHBlclR5cGV9
OworRU5ECisgICAgQWRkVG9WOEJlZ2luU3BlY2lhbENhc2VzKCRpbnRlcmZhY2VOYW1lKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworCisgIFY4UHJveHkqIHByb3h5ID0gMDsKKyAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOworRU5ECisgICAgaWYgKElzTm9kZVN1YlR5
cGUoJGRhdGFOb2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBp
ZiAoaW1wbC0+ZG9jdW1lbnQoKSkgeworICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW1w
bC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYgKHByb3h5ICYmIHN0YXRpY19jYXN0PE5v
ZGUqPihpbXBsLT5kb2N1bWVudCgpKSA9PSBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCkpCisgICAg
ICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOworICB9CitFTkQK
KyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICBpZiAoIWZvcmNlTmV3T2JqZWN0
KSB7XG4iKTsKKyAgICBpZiAoJGRvbU1hcEZ1bmN0aW9uKSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7CisgICAgd3JhcHBlciA9ICR7ZG9tTWFwRnVuY3Rpb259LmdldChpbXBs
KTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgcmV0dXJuIHdyYXBwZXI7CitF
TkQKKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgIH1cbiIpOworCisgICAgaWYgKElz
Tm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOworICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OworICBpZiAocHJveHkpCisg
ICAgY29udGV4dCA9IHByb3h5LT5jb250ZXh0KCk7CisKKyAgLy8gRW50ZXIgdGhlIG5vZGUncyBj
b250ZXh0IGFuZCBjcmVhdGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0LgorICBpZiAoIWNv
bnRleHQuSXNFbXB0eSgpKQorICAgIGNvbnRleHQtPkVudGVyKCk7CitFTkQKKyAgICB9CisKKyAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRF
bnRlcmVkKCkpCisgICAgcHJveHkgPSAwOworICBlbHNlIGlmICghcHJveHkpCisgICAgcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZSgpOworCisgIGlmIChwcm94eSkKKyAgICB3cmFwcGVyID0gcHJv
eHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUod3JhcHBlclR5cGUpOwor
ICBlbHNlCisgICAgd3JhcHBlciA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShWOERPTVdy
YXBwZXI6OmdldFRlbXBsYXRlKHdyYXBwZXJUeXBlKS0+R2V0RnVuY3Rpb24oKSk7CisgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBw
ZXIsIFY4Q2xhc3NJbmRleDo6VG9JbnQod3JhcHBlclR5cGUpLCBpbXBsKTsKK0VORAorCisgICAg
aWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOworICAvLyBFeGl0IHRoZSBub2RlJ3MgY29udGV4dCBpZiBpdCB3YXMgZW50ZXJl
ZC4KKyAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKKyAgICBjb250ZXh0LT5FeGl0KCk7CitFTkQK
KyAgICB9CisgICAgCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01JbXBsZW1lbnRhdGlv
biIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgLy8gSWYgdGhlIGlu
c3RhbnRpYXRpb24gZmFpbGVkLCB3ZSBpZ25vcmUgaXQgYW5kIHJldHVybiBudWxsIGluc3RlYWQg
b2YgcmV0dXJuaW5nIGFuIGVtcHR5IGhhbmRsZS4KKyAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQor
ICAgIHJldHVybiB2ODo6TnVsbCgpOworRU5ECisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgIHJldHVy
biB3cmFwcGVyOworRU5ECisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gIGltcGwtPnJl
ZigpO1xuIikgaWYgSXNSZWZQdHJUeXBlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICB9CisKKyAgICBp
ZiAoJGRvbU1hcEZ1bmN0aW9uKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgICR7ZG9tTWFwRnVuY3Rpb259LnNldChpbXBsLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pjo6TmV3KHdyYXBwZXIpKTsKK0VORAorICAgIH0KKyAgICAKKyAgICBBZGRUb1Y4RW5kU3BlY2lh
bENhc2VzKCRpbnRlcmZhY2VOYW1lKTsKKworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgIHJldHVybiB3cmFwcGVyOworfQorRU5ECisKKyAgICBpZiAoSXNSZWZQdHJUeXBlKCRpbnRl
cmZhY2VOYW1lKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCR7bmF0aXZlVHlwZX0gPiBpbXBsLCBi
b29sIGZvcmNlTmV3T2JqZWN0KSB7CisgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGZvcmNlTmV3
T2JqZWN0KTsKK30KK0VORAorICAgIH0KK30KKworc3ViIEFkZFRvVjhCZWdpblNwZWNpYWxDYXNl
cworeworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgaWYgKCRpbnRlcmZhY2VO
YW1lIGVxICJOb2RlIikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEVsZW1lbnQuaCJ9ID0g
MTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhBdHRyLmgifSA9IDE7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IlY4VGV4dC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOENEQVRB
U2VjdGlvbi5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEVudGl0eVJlZmVyZW5j
ZS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEVudGl0eS5oIn0gPSAxOworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJWOFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIn0gPSAxOworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJWOENvbW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siVjhEb2N1bWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOERvY3Vt
ZW50VHlwZS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOERvY3VtZW50RnJhZ21l
bnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhOb3RhdGlvbi5oIn0gPSAxOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBzd2l0Y2ggKGltcGwtPm5vZGVU
eXBlKCkpIHsKKyAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGNhc2UgTm9kZTo6
QVRUUklCVVRFX05PREU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8QXR0cio+KGltcGwp
LCBmb3JjZU5ld09iamVjdCk7CisgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFRleHQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5v
ZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDREFU
QVNlY3Rpb24qPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkVOVElUWV9S
RUZFUkVOQ0VfTk9ERToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVu
Y2UqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgor
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEVudGl0eSo+KGltcGwpLCBmb3JjZU5ld09iamVj
dCk7CisgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KGltcGwpLCBmb3JjZU5l
d09iamVjdCk7CisgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PENvbW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX05PREU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihp
bXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToK
KyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudFR5cGUqPihpbXBsKSwgZm9yY2VO
ZXdPYmplY3QpOworICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KGltcGwpLCBmb3JjZU5ld09i
amVjdCk7CisgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxOb3RhdGlvbio+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGRlZmF1bHQ6IGJy
ZWFrOyAvLyBYUEFUSF9OQU1FU1BBQ0VfTk9ERQorICB9CitFTkQKKyAgICB9IGVsc2lmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRWxlbWVudCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhIVE1M
RWxlbWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR0VsZW1lbnQuaCJ9
ID0gMTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaWYgKGltcGwtPmlz
SFRNTEVsZW1lbnQoKSkKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGlmIChpbXBsLT5pc1NWR0VsZW1lbnQoKSkKKyAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2Jq
ZWN0KTsKK0VORAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJEb2N1bWVudCIpIHsK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhIVE1MRG9jdW1lbnQuaCJ9ID0gMTsKKyAgICAgICAg
JGltcGxJbmNsdWRlc3siVjhTVkdEb2N1bWVudC5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgPDxFTkQpOworICBpZiAoaW1wbC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3Qp
OworICBpZiAoaW1wbC0+aXNTVkdEb2N1bWVudCgpKQorICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PFNWR0RvY3VtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKK0VORAorICAgIH0gZWxz
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJIVE1MRWxlbWVudCIpIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKyAgd3JhcHBlclR5cGUgPSBWOERPTVdyYXBwZXI6Omh0bWxFbGVt
ZW50VHlwZShpbXBsKTsKK0VORAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJTVkdF
bGVtZW50IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICB3cmFwcGVy
VHlwZSA9IFY4RE9NV3JhcHBlcjo6c3ZnRWxlbWVudFR5cGUoaW1wbCk7CitFTkQKKyAgICB9IGVs
c2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHUGF0aFNlZyIpIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKyAgd3JhcHBlclR5cGUgPSBWOERPTVdyYXBwZXI6OmRvd25jYXN0
U1ZHUGF0aFNlZyhpbXBsKTsKK0VORAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJT
dHlsZVNoZWV0IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOENTU1N0eWxlU2hlZXQuaCJ9
ID0gMTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CitFTkQK
KyAgICB9CisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJDU1NWYWx1ZSIpIHsKKyAgICAgICAg
JGltcGxJbmNsdWRlc3siVjhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIn0gPSAxOworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJWOENTU1ZhbHVlTGlzdC5oIn0gPSAxOworICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOENTU1ByaW1pdGl2ZVZhbHVlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVk
ZXN7IlY4U1ZHUGFpbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhTVkdDb2xv
ci5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBpZiAoaW1w
bC0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQorICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAg
ZWxzZSBpZiAoaW1wbC0+aXNWYWx1ZUxpc3QoKSkKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBlbHNlIGlmIChpbXBs
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBlbHNlIGlmIChpbXBsLT5p
c1NWR1BhaW50KCkpCisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPihpbXBs
KSwgZm9yY2VOZXdPYmplY3QpOworICBlbHNlIGlmIChpbXBsLT5pc1NWR0NvbG9yKCkpCisgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPihpbXBsKSwgZm9yY2VOZXdPYmplY3Qp
OworRU5ECisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkNTU1J1bGUiKSB7CisgICAg
ICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NTU3R5bGVSdWxlLmgifSA9IDE7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IlY4Q1NTQ2hhcnNldFJ1bGUuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siVjhDU1NJbXBvcnRSdWxlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NT
TWVkaWFSdWxlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NTRm9udEZhY2VS
dWxlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q1NTUGFnZVJ1bGUuaCJ9ID0g
MTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjhDU1NWYXJpYWJsZXNSdWxlLmgifSA9IDE7Cisg
ICAgICAgICRpbXBsSW5jbHVkZXN7IlY4V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgifSA9IDE7Cisg
ICAgICAgICRpbXBsSW5jbHVkZXN7IlY4V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIn0gPSAxOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBzd2l0Y2ggKGltcGwtPnR5cGUo
KSkgeworICBjYXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgY2FzZSBDU1NS
dWxlOjpDSEFSU0VUX1JVTEU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNl
dFJ1bGUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIENTU1J1bGU6OklNUE9SVF9S
VUxFOgorICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpbXBsKSwg
Zm9yY2VOZXdPYmplY3QpOworICBjYXNlIENTU1J1bGU6Ok1FRElBX1JVTEU6CisgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsK
KyAgY2FzZSBDU1NSdWxlOjpGT05UX0ZBQ0VfUlVMRToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxDU1NGb250RmFjZVJ1bGUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICBjYXNlIENT
U1J1bGU6OlBBR0VfUlVMRToKKyAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NQYWdlUnVs
ZSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGNhc2UgQ1NTUnVsZTo6VkFSSUFCTEVTX1JV
TEU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTVmFyaWFibGVzUnVsZSo+KGltcGwp
LCBmb3JjZU5ld09iamVjdCk7CisgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FX1JVTEU6
CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4oaW1w
bCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgY2FzZSBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JV
TEU6CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+
KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgIGRlZmF1bHQ6IGJyZWFrOworICB9CitFTkQKKyAg
ICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRXZlbnQiKSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7CisgIGlmIChpbXBsLT5pc1VJRXZlbnQoKSkgeworICAgIGlmIChp
bXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4
OjpLRVlCT0FSREVWRU5UOworICAgIGVsc2UgaWYgKGltcGwtPmlzVGV4dEV2ZW50KCkpCisgICAg
ICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6VEVYVEVWRU5UOworICAgIGVsc2UgaWYgKGlt
cGwtPmlzTW91c2VFdmVudCgpKQorICAgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6Ok1P
VVNFRVZFTlQ7CisgICAgZWxzZSBpZiAoaW1wbC0+aXNXaGVlbEV2ZW50KCkpCisgICAgICB3cmFw
cGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6V0hFRUxFVkVOVDsKKyNpZiBFTkFCTEUoU1ZHKQorICAg
IGVsc2UgaWYgKGltcGwtPmlzU1ZHWm9vbUV2ZW50KCkpCisgICAgICB3cmFwcGVyVHlwZSA9IFY4
Q2xhc3NJbmRleDo6U1ZHWk9PTUVWRU5UOworI2VuZGlmCisgICAgZWxzZSBpZiAoaW1wbC0+aXND
b21wb3NpdGlvbkV2ZW50KCkpCisgICAgICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6Q09N
UE9TSVRJT05FVkVOVDsKKyAgICBlbHNlCisgICAgICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRl
eDo6VUlFVkVOVDsKKyAgfSBlbHNlIGlmIChpbXBsLT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICB3
cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6TVVUQVRJT05FVkVOVDsKKyAgZWxzZSBpZiAoaW1w
bC0+aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6Ok9W
RVJGTE9XRVZFTlQ7CisgIGVsc2UgaWYgKGltcGwtPmlzTWVzc2FnZUV2ZW50KCkpCisgICAgd3Jh
cHBlclR5cGUgPSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VFVkVOVDsKKyAgZWxzZSBpZiAoaW1wbC0+
aXNQYWdlVHJhbnNpdGlvbkV2ZW50KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6
OlBBR0VUUkFOU0lUSU9ORVZFTlQ7CisgIGVsc2UgaWYgKGltcGwtPmlzUG9wU3RhdGVFdmVudCgp
KQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpQT1BTVEFURUVWRU5UOworICBlbHNl
IGlmIChpbXBsLT5pc1Byb2dyZXNzRXZlbnQoKSkgeworICAgIGlmIChpbXBsLT5pc1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpKQorICAgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNUUFJPR1JFU1NFVkVOVDsKKyAgICBlbHNlCisgICAgICB3cmFwcGVyVHlw
ZSA9IFY4Q2xhc3NJbmRleDo6UFJPR1JFU1NFVkVOVDsKKyAgfSBlbHNlIGlmIChpbXBsLT5pc1dl
YktpdEFuaW1hdGlvbkV2ZW50KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OldF
QktJVEFOSU1BVElPTkVWRU5UOworICBlbHNlIGlmIChpbXBsLT5pc1dlYktpdFRyYW5zaXRpb25F
dmVudCgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpXRUJLSVRUUkFOU0lUSU9O
RVZFTlQ7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgIGVsc2UgaWYgKGltcGwtPmlzRXJyb3JFdmVu
dCgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpFUlJPUkVWRU5UOworI2VuZGlm
CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICBlbHNlIGlmIChpbXBsLT5pc1N0b3JhZ2VFdmVu
dCgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpTVE9SQUdFRVZFTlQ7CisjZW5k
aWYKKyAgZWxzZSBpZiAoaW1wbC0+aXNCZWZvcmVMb2FkRXZlbnQoKSkKKyAgICB3cmFwcGVyVHlw
ZSA9IFY4Q2xhc3NJbmRleDo6QkVGT1JFTE9BREVWRU5UOworRU5ECisgICAgfSBlbHNpZiAoJGlu
dGVyZmFjZU5hbWUgZXEgIldlYkdMQXJyYXkiKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCA8PEVORCk7CisgIGlmIChpbXBsLT5pc0J5dGVBcnJheSgpKQorICAgIHdyYXBwZXJUeXBlID0g
VjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWTsKKyAgZWxzZSBpZiAoaW1wbC0+aXNGbG9hdEFy
cmF5KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWTsK
KyAgZWxzZSBpZiAoaW1wbC0+aXNJbnRBcnJheSgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFz
c0luZGV4OjpXRUJHTElOVEFSUkFZOworICBlbHNlIGlmIChpbXBsLT5pc1Nob3J0QXJyYXkoKSkK
KyAgICB3cmFwcGVyVHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZOworICBlbHNl
IGlmIChpbXBsLT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpCisgICAgd3JhcHBlclR5cGUgPSBWOENs
YXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVk7CisgIGVsc2UgaWYgKGltcGwtPmlzVW5z
aWduZWRJbnRBcnJheSgpKQorICAgIHdyYXBwZXJUeXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTFVO
U0lHTkVESU5UQVJSQVk7CisgIGVsc2UgaWYgKGltcGwtPmlzVW5zaWduZWRTaG9ydEFycmF5KCkp
CisgICAgd3JhcHBlclR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZ
OworRU5ECisgICAgfQorfQorCitzdWIgQWRkVG9WOEVuZFNwZWNpYWxDYXNlcworeworICAgICRp
bnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJE
b2N1bWVudCIgfHwgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxEb2N1bWVudCIgfHwgJGludGVyZmFj
ZU5hbWUgZXEgIlNWR0RvY3VtZW50IikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOworICBpZiAocHJveHkpCisgICAgcHJveHktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3Vt
ZW50V3JhcHBlcih3cmFwcGVyKTsKK0VORAorICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
IkhUTUxEb2N1bWVudCIpIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgIC8vIENyZWF0ZSBtYXJrZXIgb2JqZWN0IGFuZCBpbnNlcnQgaXQgaW4gdHdvIGludGVybmFs
IGZpZWxkcy4KKyAgLy8gVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0ZW1wb3Jhcnkgc2hhZG93
aW5nIG9mCisgIC8vIGRvY3VtZW50LmFsbC4KKyAgQVNTRVJUKHdyYXBwZXItPkludGVybmFsRmll
bGRDb3VudCgpID09IFY4SFRNTERvY3VtZW50OjppbnRlcm5hbEZpZWxkQ291bnQpOworICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gbWFya2VyID0gdjg6Ok9iamVjdDo6TmV3KCk7CisgIHdyYXBwZXIt
PlNldEludGVybmFsRmllbGQoVjhIVE1MRG9jdW1lbnQ6Om1hcmtlckluZGV4LCBtYXJrZXIpOwor
ICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjpzaGFkb3dJbmRleCwg
bWFya2VyKTsKK0VORAorICAgICAgICB9CisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEg
IlN0eWxlU2hlZXQiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJDU1NTdHlsZVNoZWV0IikgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJl
bmNlIGZyb20gc3R5bGVzaGVldCBvYmplY3QgdG8gaXRzIG93bmVyIG5vZGUuCisgIE5vZGUqIG93
bmVyTm9kZSA9IGltcGwtPm93bmVyTm9kZSgpOworICBpZiAob3duZXJOb2RlKSB7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
dG9WOChvd25lck5vZGUpKTsKKyAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4U3R5bGVT
aGVldDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKKyAgfQorRU5ECisgICAgfSBlbHNpZiAoJGlu
dGVyZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsIDw8RU5EKTsKKyAgLy8gQWRkIGEgaGlkZGVuIHJlZmVyZW5jZSBmcm9tIG5hbWVkIG5vZGUg
bWFwIHRvIGl0cyBvd25lciBub2RlLgorICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGltcGwtPmVs
ZW1lbnQoKSkgeworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb3duZXIgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KHRvVjgoZWxlbWVudCkpOworICAgIHdyYXBwZXItPlNldEludGVy
bmFsRmllbGQoVjhOYW1lZE5vZGVNYXA6Om93bmVyTm9kZUluZGV4LCBvd25lcik7CisgIH0KK0VO
RAorICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJDYW52YXNQaXhlbEFycmF5Iikgewor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVy
dGllc1RvUGl4ZWxEYXRhKGltcGwtPmRhdGEoKS0+ZGF0YSgpLCBpbXBsLT5sZW5ndGgoKSk7XG4i
KTsgICAKKyAgICB9ICBlbHNpZiAoJGludGVyZmFjZU5hbWUgPX4gL1dlYkdMLipBcnJheSQvKSB7
CisgICAgICAgIG15ICRhcnJheVR5cGUgPSAkaW50ZXJmYWNlTmFtZTsKKyAgICAgICAgJGFycmF5
VHlwZSA9fiBzL1dlYkdMLy87CisgICAgICAgICRhcnJheVR5cGUgPSAiQnl0ZUFycmF5IiBpZiAk
YXJyYXlUeXBlIGVxICJBcnJheSI7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBs
LT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsJHthcnJheVR5cGV9LCBpbXBsLT5sZW5ndGgo
KSk7CitFTkQKKyAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiQ29uc29sZSIgfHwgJGlu
dGVyZmFjZU5hbWUgZXEgIkhpc3RvcnkiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJOYXZpZ2F0b3Ii
CisgICAgICAgICB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiU2NyZWVuIiB8fCAkaW50ZXJmYWNlTmFt
ZSBlcSAiTG9jYXRpb24iIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJET01TZWxlY3Rpb24iKSB7Cisg
ICAgICAgICBteSAkaW5kZXhOYW1lID0gbGNmaXJzdCgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAg
ICAkaW5kZXhOYW1lID1+IHMvZE9NL2RvbS8gaWYgJGluZGV4TmFtZSA9fiAvXmRPTS87CisgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShpbXBsLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6JHtpbmRleE5hbWV9SW5kZXgs
IHdyYXBwZXIpO1xuIik7CisgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUgZXEgIkJhckluZm8i
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIEZyYW1lKiBmcmFtZSA9
IGltcGwtPmZyYW1lKCk7CisgIHN3aXRjaCAoaW1wbC0+dHlwZSgpKSB7CisgIGNhc2UgQmFySW5m
bzo6TG9jYXRpb25iYXI6CisgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVu
Y2UoZnJhbWUsIFY4RE9NV2luZG93Ojpsb2NhdGlvbmJhckluZGV4LCB3cmFwcGVyKTsKKyAgICBi
cmVhazsKKyAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgorICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6bWVudWJhckluZGV4LCB3cmFw
cGVyKTsKKyAgICBicmVhazsKKyAgY2FzZSBCYXJJbmZvOjpQZXJzb25hbGJhcjoKKyAgICBWOERP
TVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnBl
cnNvbmFsYmFySW5kZXgsIHdyYXBwZXIpOworICAgIGJyZWFrOworICBjYXNlIEJhckluZm86OlNj
cm9sbGJhcnM6CisgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJh
bWUsIFY4RE9NV2luZG93OjpzY3JvbGxiYXJzSW5kZXgsIHdyYXBwZXIpOworICAgIGJyZWFrOwor
ICBjYXNlIEJhckluZm86OlN0YXR1c2JhcjoKKyAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2JhckluZGV4LCB3cmFwcGVy
KTsKKyAgICBicmVhazsKKyAgY2FzZSBCYXJJbmZvOjpUb29sYmFyOgorICAgIFY4RE9NV3JhcHBl
cjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6dG9vbGJhcklu
ZGV4LCB3cmFwcGVyKTsKKyAgICBicmVhazsKKyAgfQorRU5ECisgICAgfQorfQorCitzdWIgR2V0
RG9tTWFwRnVuY3Rpb24KK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkdHlw
ZSA9IHNoaWZ0OworICAgIHJldHVybiAiZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkiIGlm
ICR0eXBlIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiOworICAgIHJldHVybiAiZ2V0RE9NTm9kZU1h
cCgpIiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7CisgICAgIyBPbmx5IHVzZSBnZXRET01T
VkdPYmplY3RXaXRoQ29udGV4dE1hcCgpIGZvciBub24tbm9kZSBzdmcgb2JqZWN0cworICAgIHJl
dHVybiAiZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKSIgaWYgJHR5cGUgPX4gL1NWRy87
CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01JbXBsZW1lbnRhdGlvbiI7CisgICAgcmV0
dXJuICJnZXRBY3RpdmVET01PYmplY3RNYXAoKSIgaWYgSXNBY3RpdmVEb21UeXBlKCR0eXBlKTsK
KyAgICByZXR1cm4gImdldERPTU9iamVjdE1hcCgpIjsKK30KKworc3ViIElzQWN0aXZlRG9tVHlw
ZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk1l
c3NhZ2VQb3J0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiWE1MSHR0cFJlcXVlc3QiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJTb2NrZXQiOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJXb3JrZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFyZWRXb3JrZXIi
OworICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zCit7
CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUg
ZXEgIlNWR1JlY3QiOwogICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1Bv
aW50IjsKICAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZH
TWF0cml4IjsKQEAgLTE5NjIsNyArMjQyMCw2IEBACiAKICAgICBteSAkZmlyc3QgPSAxOwogICAg
IG15ICRpbmRleCA9IDA7Ci0gICAgbXkgJG5vZGVUb1JldHVybiA9IDA7CiAKICAgICBmb3JlYWNo
IG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBpZiAo
JGluZGV4IGVxICRudW1iZXJPZlBhcmFtZXRlcnMpIHsKQEAgLTE5ODQsMTAgKzI0NDEsNiBAQAog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICRwYXJhbU5h
bWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJldHVybiJ9KSB7Ci0gICAgICAgICAgICAkbm9kZVRvUmV0dXJuID0gJHBhcmFtZXRl
ci0+bmFtZTsKLSAgICAgICAgfQogICAgICAgICAkaW5kZXgrKzsKICAgICB9CiAKQEAgLTIwMDYs
MTkgKzI0NTksNyBAQAogICAgIG15ICRyZXR1cm4gPSAicmVzdWx0IjsKICAgICBteSAkcmV0dXJu
SXNSZWYgPSBJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpOwogCi0gICAgaWYgKCRub2RlVG9SZXR1
cm4pIHsKLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGluc2VydEJlZm9yZSwgcmVwbGFjZUNo
aWxkLCByZW1vdmVDaGlsZCBhbmQKLSAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJv
bSBOb2RlLgotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBzdWNjZXNzID0gJGZ1
bmN0aW9uU3RyaW5nO1xuIjsKLSAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRp
b25zfSkgewotICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChVTkxJS0VMWShl
YykpIGdvdG8gZmFpbDtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50
IC4gImlmIChzdWNjZXNzKVxuIjsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICAi
IC4KLSAgICAgICAgICAgICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QoJG5vZGVUb1JldHVybik7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0
dXJuIHY4OjpOdWxsKCk7XG4iOwotICAgICAgICByZXR1cm4gJHJlc3VsdDsKLSAgICB9IGVsc2lm
ICgkcmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICBpZiAoJHJldHVyblR5cGUgZXEgInZvaWQi
KSB7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iOwog
ICAgIH0gZWxzaWYgKCRjb3B5Rmlyc3QpIHsKICAgICAgICAgJHJlc3VsdCAuPQpAQCAtMjA3Nyw4
ICsyNTE4LDggQEAKICAgICB9CiAKICAgICBpZiAoJHJldHVybnNQb2RUeXBlKSB7Ci0gICAgICAg
IG15ICRjbGFzc0luZGV4ID0gdWMoJHJldHVyblR5cGUpOwotICAgICAgICAkcmVzdWx0IC49ICRp
bmRlbnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkpO1xuIjsKKyAgICAgICAgJGltcGxJ
bmNsdWRlc3siVjgke3JldHVyblR5cGV9LmgifSA9IDE7CisgICAgICAgICRyZXN1bHQgLj0gJGlu
ZGVudCAuICJyZXR1cm4gdG9WOCh3cmFwcGVyLnJlbGVhc2UoKSk7XG4iOwogICAgIH0gZWxzZSB7
CiAgICAgICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNSZWYpOwogICAg
ICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9u
LT5zaWduYXR1cmUsICRyZXR1cm4sICRpbmRlbnQpIC4gIjtcbiI7CkBAIC0yMTM4LDYgKzI1Nzks
NyBAQAogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CiAgICAgcmV0dXJuIDAg
aWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1
bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgIlNWR0FuaW1hdGVkUG9p
bnRzIjsKIAogICAgIHJldHVybiAxOwogfQpAQCAtMjE3OCw3ICsyNjIwLDcgQEAKICAgICByZXR1
cm4gIlNWR1RyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybSI7CiAgICAgcmV0dXJu
ICJTVkdMZW5ndGgiIGlmICR0eXBlIGVxICJTVkdMZW5ndGgiOwogICAgIHJldHVybiAiU1ZHQW5n
bGUiIGlmICR0eXBlIGVxICJTVkdBbmdsZSI7Ci0gICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBl
IGVxICJTVkdOdW1iZXIiOworICAgIHJldHVybiAiZmxvYXQiIGlmICR0eXBlIGVxICJTVkdOdW1i
ZXIiOwogICAgIHJldHVybiAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyIgaWYgJHR5cGUgZXEgIlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW8iOwogICAgIHJldHVybiAiU1ZHUGFpbnQ6OlNWR1BhaW50VHlw
ZSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAgICAgcmV0dXJuICJET01UaW1lU3RhbXAi
IGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwpAQCAtMjM5Miw3ICsyODM0LDExIEBACiBzdWIg
R2V0VjhIZWFkZXJOYW1lCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICByZXR1cm4gIlY4
IiAuIEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUpOworICAgIHJldHVybiAiVjhFdmVu
dC5oIiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIkV2ZW50TGlzdGVu
ZXIuaCIgaWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOworICAgIHJldHVybiAiRXZlbnRUYXJn
ZXQuaCIgaWYgJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICByZXR1cm4gIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICBy
ZXR1cm4gIlY4JHt0eXBlfS5oIjsKIH0KIAogCkBAIC0yNTE3LDcgKzI5NjMsNiBAQAogICAgIG15
ICR2YWx1ZSA9IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9
IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRzaWduYXR1cmUpOwotICAgIG15ICRjbGFzc05hbWU9ICJW
OCR0eXBlIjsKIAogICAgIHJldHVybiAicmV0dXJuIHY4OjpEYXRlOjpOZXcoc3RhdGljX2Nhc3Q8
ZG91YmxlPigkdmFsdWUpKSIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CiAgICAgcmV0dXJu
ICJyZXR1cm4gdjhCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKQEAgLTI1
NDMsMjkgKzI5ODgsMjAgQEAKICAgICAgICAgcmV0dXJuICJyZXR1cm4gdjhTdHJpbmcoJHZhbHVl
KSI7CiAgICAgfQogCi0gICAgIyBWOCBzcGVjaWZpYy4KLSAgICBteSAkaW1wbENsYXNzTmFtZSA9
ICR0eXBlOwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICAjIHNwZWNpYWwg
Y2FzZSBmb3Igbm9uLURPTSBub2RlIGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgk
dHlwZSkpIHsKLSAgICAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJS
ZXR1cm5zTmV3In0pIHsKLSAgICAgICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QoJHZhbHVlKSI7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJyZXR1cm4gdG9WOCgke3Zh
bHVlfSIgLiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybnNOZXcifSA/
ICIsIHRydWUpIiA6ICIpIik7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudFRhcmdl
dCIgb3IgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICBpZiAoJHR5cGUgZXEg
IkV2ZW50VGFyZ2V0IikgewogICAgICAgICByZXR1cm4gInJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0
eXBlIGVxICJFdmVudCIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0RXZlbnRUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgIH0KLQogICAgIGlmICgkdHlwZSBl
cSAiRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksICR2YWx1ZSkiOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1cm4gInJldHVybiAke3ZhbHVlfSA/IHY4OjpI
YW5kbGU8djg6OlZhbHVlPihzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KCR7
dmFsdWV9KS0+Z2V0TGlzdGVuZXJPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
KSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKSI7CiAgICAgfQogCiAgICAgaWYg
KCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CkBAIC0yNTg5LDE4ICszMDI1LDE1
IEBACiAgICAgICAgIHJldHVybiAicmV0dXJuIHY4RGF0ZU9yTnVsbCgkdmFsdWUpOyI7CiAgICAg
fQogCi0gICAgZWxzZSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZDb3VudGVkLmgi
fSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQdHIuaCJ9ID0gMTsKLSAgICAg
ICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0gPSAxOwotICAgICAgICBteSAkY2xhc3NJ
bmRleCA9IHVjKCR0eXBlKTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0g
PSAxOworICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQdHIuaCJ9ID0gMTsKKyAgICAkaW1wbElu
Y2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CiAKLSAgICAgICAgaWYgKElzUG9kVHlwZSgkdHlw
ZSkpIHsKLSAgICAgICAgICAgICR2YWx1ZSA9IEdlbmVyYXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBw
ZXIoJHR5cGUsICR2YWx1ZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoSXNQb2RUeXBlKCR0eXBlKSkg
eworICAgICAgICAkdmFsdWUgPSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyKCR0eXBl
LCAkdmFsdWUpIC4gIi5nZXQoKSI7CisgICAgfQogCi0gICAgICAgIHJldHVybiAicmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwg
JHZhbHVlKSI7Ci0gICAgfQorICAgIHJldHVybiAicmV0dXJuIHRvVjgoJHZhbHVlKSI7CiB9CiAK
IHN1YiBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyIHsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDUzNzE1KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAj
aW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhET01BcHBsaWNh
dGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOERPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKQEAgLTU0LDkgKzU1LDE1IEBA
CiAjaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIK
ICNpbmNsdWRlICJWOE5hbWVkTm9kZU1hcC5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1
ZGUgIlY4Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJWOE5vdGlmaWNhdGlvbi5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFNWR0VsZW1lbnRJbnN0YW5jZS5oIgorI2luY2x1ZGUg
IlY4U2hhcmVkV29ya2VyLmgiCiAjaW5jbHVkZSAiVjhTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAi
VjhXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJWOFdvcmtlci5oIgogI2luY2x1ZGUgIldlYkdMQXJy
YXkuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaCIKQEAgLTc4LDcgKzg1LDcgQEAKIAogI2lmIEVOQUJMRShTVkcp
CiAKLXN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZG93bmNhc3RTVkdQYXRoU2Vn
KHZvaWQqIHBhdGhTZWcpCitWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhET01XcmFwcGVy
Ojpkb3duY2FzdFNWR1BhdGhTZWcodm9pZCogcGF0aFNlZykKIHsKICAgICBTVkdQYXRoU2VnKiBy
ZWFsUGF0aFNlZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8U1ZHUGF0aFNlZyo+KHBhdGhTZWcpOwogCkBA
IC0xMTYwLDY5ICsxMTY3LDU5IEBACiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCiAjaWYg
RU5BQkxFKFNWRykKLSAgICBTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0LT50
b1NWR0VsZW1lbnRJbnN0YW5jZSgpOwotICAgIGlmIChpbnN0YW5jZSkKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFLCBpbnN0
YW5jZSk7CisgICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB0YXJnZXQtPnRv
U1ZHRWxlbWVudEluc3RhbmNlKCkpCisgICAgICAgIHJldHVybiB0b1Y4KGluc3RhbmNlKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2VyKiB3b3JrZXIgPSB0YXJnZXQt
PnRvV29ya2VyKCk7Ci0gICAgaWYgKHdvcmtlcikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09SS0VSLCB3b3JrZXIpOworICAgIGlmIChXb3JrZXIqIHdv
cmtlciA9IHRhcmdldC0+dG9Xb3JrZXIoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgod29ya2VyKTsK
ICNlbmRpZiAvLyBXT1JLRVJTCiAKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAgU2hh
cmVkV29ya2VyKiBzaGFyZWRXb3JrZXIgPSB0YXJnZXQtPnRvU2hhcmVkV29ya2VyKCk7Ci0gICAg
aWYgKHNoYXJlZFdvcmtlcikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6U0hBUkVEV09SS0VSLCBzaGFyZWRXb3JrZXIpOworICAgIGlmIChTaGFyZWRXb3Jr
ZXIqIHNoYXJlZFdvcmtlciA9IHRhcmdldC0+dG9TaGFyZWRXb3JrZXIoKSkKKyAgICAgICAgcmV0
dXJuIHRvVjgoc2hhcmVkV29ya2VyKTsKICNlbmRpZiAvLyBTSEFSRURfV09SS0VSUwogCiAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSB0
YXJnZXQtPnRvTm90aWZpY2F0aW9uKCk7Ci0gICAgaWYgKG5vdGlmaWNhdGlvbikKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBub3Rp
ZmljYXRpb24pOworICAgIGlmIChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IHRhcmdldC0+
dG9Ob3RpZmljYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgIFdlYlNvY2tldCogd2ViU29ja2V0
ID0gdGFyZ2V0LT50b1dlYlNvY2tldCgpOwotICAgIGlmICh3ZWJTb2NrZXQpCi0gICAgICAgIHJl
dHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgd2ViU29ja2V0
KTsKKyAgICBpZiAoV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB0YXJnZXQtPnRvV2ViU29ja2V0KCkp
CisgICAgICAgIHJldHVybiB0b1Y4KHdlYlNvY2tldCk7CiAjZW5kaWYKIAotICAgIE5vZGUqIG5v
ZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwotICAgIGlmIChub2RlKQotICAgICAgICByZXR1cm4gY29u
dmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgIGlmIChOb2RlKiBub2RlID0gdGFyZ2V0LT50
b05vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgobm9kZSk7CiAKICAgICBpZiAoRE9NV2luZG93
KiBkb21XaW5kb3cgPSB0YXJnZXQtPnRvRE9NV2luZG93KCkpCi0gICAgICAgIHJldHVybiBjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZG9tV2luZG93KTsKKyAgICAg
ICAgcmV0dXJuIHRvVjgoZG9tV2luZG93KTsKIAogICAgIC8vIFhNTEh0dHBSZXF1ZXN0IGlzIGNy
ZWF0ZWQgd2l0aGluIGl0cyBKUyBjb3VudGVycGFydC4KLSAgICBYTUxIdHRwUmVxdWVzdCogeG1s
SHR0cFJlcXVlc3QgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3QoKTsKLSAgICBpZiAoeG1sSHR0
cFJlcXVlc3QpIHsKKyAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gdGFy
Z2V0LT50b1hNTEh0dHBSZXF1ZXN0KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuZ2V0KHhtbEh0dHBSZXF1ZXN0KTsK
ICAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzRW1wdHkoKSk7CiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwogICAgIH0KIAogICAgIC8vIE1lc3NhZ2VQb3J0IGlzIGNyZWF0ZWQgd2l0aGluIGl0cyBK
UyBjb3VudGVycGFydAotICAgIE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQ
b3J0KCk7Ci0gICAgaWYgKHBvcnQpIHsKKyAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB0YXJn
ZXQtPnRvTWVzc2FnZVBvcnQoKSkgewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBnZXRBY3RpdmVET01PYmplY3RNYXAoKS5nZXQocG9ydCk7CiAgICAgICAgIEFTU0VS
VCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAK
LSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1
ZXN0VXBsb2FkKCk7Ci0gICAgaWYgKHVwbG9hZCkgeworICAgIGlmIChYTUxIdHRwUmVxdWVzdFVw
bG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBsb2FkKCkpIHsKICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0
KHVwbG9hZCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUFwcENhY2hlID0gdGFyZ2V0LT50b0RP
TUFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAoZG9tQXBwQ2FjaGUpCi0gICAgICAgIHJldHVy
biBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGRv
bUFwcENhY2hlKTsKKyAgICBpZiAoRE9NQXBwbGljYXRpb25DYWNoZSogZG9tQXBwQ2FjaGUgPSB0
YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQorICAgICAgICByZXR1cm4gdG9WOChkb21B
cHBDYWNoZSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVCgwKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5oCShyZXZpc2lvbiA1MzcxNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDkgQEAKICAgICAgICAgICAgIHNldFNWR0NvbnRl
eHQob2JqZWN0LmdldCgpLCBjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAg
ICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQqIHdpdGhTVkdDb250ZXh0KHZvaWQqIG9iamVj
dCwgU1ZHRWxlbWVudCogY29udGV4dCkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICAgICAgc3RhdGljIFQqIHdpdGhTVkdDb250ZXh0KFQqIG9iamVjdCwgU1ZHRWxlbWVudCog
Y29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgc2V0U1ZHQ29udGV4dChvYmplY3QsIGNv
bnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdyYXBwZXIuaAkocmV2aXNpb24gNTM3MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTUgKzI1MSwxNiBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOwog
I2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMg
aW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCi0gICAgICAgIHN0YXRpYyB2b2lkIHNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKLQogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIGh0bWxFbGVtZW50VHlwZShIVE1MRWxlbWVudCopOwogI2lmIEVOQUJMRShT
VkcpCiAgICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgc3ZnRWxlbWVu
dFR5cGUoU1ZHRWxlbWVudCopOworICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIGRvd25jYXN0U1ZHUGF0aFNlZyh2b2lkKiBwYXRoU2VnKTsKICNlbmRpZgorICAgICAg
ICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJh
bWUuCisgICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSos
IGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAorICAg
IHByaXZhdGU6CisKICAgICAgICAgLy8gVGhlIGZpcnN0IFY4V3JhcHBlclR5cGUgc3BlY2lmaWVz
IHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yCiAgICAgICAgIC8vIHVzZWQgdG8gY3JlYXRlIEpTIG9i
amVjdC4gVGhlIHNlY29uZCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcwogICAgICAgICAvLyB0aGUg
YWN0dWFsIHR5cGUgb2YgdGhlIHZvaWQqIGZvciB0eXBlIGNhc3RpbmcuCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDUzNzE1KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9WOENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw2IEBACiAg
ICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5
PiBub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKICAgICB7CiAgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJl
RE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0gICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6
OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CiAg
ICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVj
dGlvbj4oaW5mby5Ib2xkZXIoKSk7CiAgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0aW9uLT5s
ZW5ndGgoKTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6
QXJyYXk6Ok5ldyhsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTM3MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQAogICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjhPYmplY3QoY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQogewogICAgIHN3aXRj
aCAoaW5mby5nZXRUeXBlKCkpIHsKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgpA
QCAtMjYxLDcgKzI2MSw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7
CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b1Y4
KGluZm8pOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiBzdGF0aWMgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIHRvV2ViR0xVbmlmb3JtTG9jYXRpb24odjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlLCBib29sJiBvaykKQEAgLTMxNyw3ICszMTcsNyBAQAogICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
ICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbmZv
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQYXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMzQyLDcg
KzM0Miw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOwor
ICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXJDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMzY4LDcgKzM2OCw3IEBACiAgICAgICAgIFY4UHJv
eHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGlu
Zm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCkBAIC00MDAsNyArNDAwLDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJu
IHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTQzNCw3ICs0MzQsNyBAQAogICAg
ICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9W
OE9iamVjdChpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0
ZXJhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM3MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcg
KzY1LDcgQEAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTY3JpcHRTdGF0ZSBzdGF0
ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gbm9kZUl0ZXJhdG9yLT5uZXh0Tm9kZSgmc3Rh
dGUsIGVjKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgJnN0YXRlKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6dG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgJnN0YXRlKTsK
IH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGVD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNzYsNyArNzYsNyBAQAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0
cjxOb2RlPiByZXN1bHQgPSBub2RlSXRlcmF0b3ItPnByZXZpb3VzTm9kZSgmc3RhdGUsIGVjKTsK
LSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgJnN0YXRlKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6dG9WOChyZXN1bHQucmVsZWFzZSgpLCBlYywgJnN0YXRlKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAko
cmV2aXNpb24gNTM3MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoQ2FudmFzU3R5bGUqIHN0eWxlKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4T2JqZWN0KENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dy
YWRpZW50KCkpCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTR1JBRElFTlQsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsK
QEAgLTc4LDcgKzc4LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c3Ryb2tlU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC0+c3Ryb2tlU3R5bGUoKSk7
CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW1wbC0+c3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
VjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNjZXNzb3JTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtOTAsNyArOTAsNyBAQAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nlc3Nvckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRv
VjgoaW1wbC0+ZmlsbFN0eWxlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGltcGwtPmZpbGxT
dHlsZSgpKTsKIH0KIAogdm9pZCBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxl
QWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDUzNzE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2
LDYgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxTZWxlY3RFbGVtZW50OjppbmRleGVk
UHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCiB7CiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9s
ZGVyKCkpKTsKLSAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZvLkhv
bGRlcigpKSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQg
PSBWOEhUTUxTZWxlY3RFbGVtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKS0+aXRlbShpbmRl
eCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVX
YWxrZXJDdXN0b20uY3BwCShyZXZpc2lvbiA1MzcxNSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8Tm9kZT4gb2JqZWN0LCBTY3JpcHRTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KFBhc3NS
ZWZQdHI8Tm9kZT4gb2JqZWN0LCBTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAgaWYgKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUtPmV4Y2Vw
dGlvbigpKTsKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAg
IFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5wYXJlbnROb2RlKCZzdGF0ZSk7Ci0g
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9W
OE9iamVjdChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhUcmVlV2Fsa2VyOjpmaXJzdENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAg
IFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5maXJzdENoaWxkKCZzdGF0ZSk7Ci0g
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9W
OE9iamVjdChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhUcmVlV2Fsa2VyOjpsYXN0Q2hpbGRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQpAQCAtODIsNyArODIsNyBAQAogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAg
UmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmxhc3RDaGlsZCgmc3RhdGUpOwotICAg
IHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhP
YmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4VHJlZVdhbGtlcjo6bmV4dE5vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVm
UHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPm5leHROb2RlKCZzdGF0ZSk7Ci0gICAgcmV0
dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9iamVj
dChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBS
ZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+cHJldmlvdXNOb2RlKCZzdGF0ZSk7Ci0g
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9W
OE9iamVjdChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhUcmVlV2Fsa2VyOjpuZXh0U2libGluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwog
ICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5uZXh0U2libGluZygmc3RhdGUp
OwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJu
IHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAgICAgU2NyaXB0U3RhdGUg
c3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnByZXZpb3VzU2li
bGluZygmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7
CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47550</attachid>
            <date>2010-01-27 11:02:03 -0800</date>
            <delta_ts>2010-01-27 11:58:55 -0800</delta_ts>
            <desc>toV8() Attempt #2.0</desc>
            <filename>tov8.txt</filename>
            <type>text/plain</type>
            <size>115868</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzk0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMDEtMjcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIEdlbmVyYXRlIHRvVjgoKSBjb252ZXJ0ZXIgZm9yIG1vc3QgV2ViQ29yZS0+VjggY29udmVy
c2lvbnMsCisgICAgICAgIGFuZCBkZWZpbmVkIGN1c3RvbSBjb252ZXJ0ZXJzIGluIHRoZWlyIHJl
c3BlY3RpdmUgVjg8Y2xhc3M+Q3VzdG9tLmNwcC4KKyAgICAgICAgCisgICAgICAgIE9sZCBjb252
ZXJ0ZXJzIGluIFY4RE9NV3JhcHBlciB3aWxsIGJlIGRlbGV0ZWQgaW4gYSBsYXRlciBwYXRjaC4K
KyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjU2MworCisgICAgICAgICogQW5kcm9pZC52OGJpbmRpbmdzLm1rOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1
c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRl
QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5z
aWduZWRJbnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwOgorCiAyMDEwLTAxLTI3ICBQYXZlbCBG
ZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRp
bW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQkocmV2aXNpb24gNTM5MzcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTQgKzE1NiwxNSBAQAog
CiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwog
ICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4K
LSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJ
bmNsdXNpb25PZlR5cGUoJHR5cGUpKSB7Ci0gICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhT
ZWcvKSB7Ci0gICAgICAgICRqb2luZWROYW1lID0gJHR5cGU7Ci0gICAgICAgICRqb2luZWROYW1l
ID1+IHMvQWJzfFJlbC8vOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2pvaW5lZE5hbWV9Lmgi
fSA9IDE7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoISRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2
ZVR5cGUoJHR5cGUpIGFuZCAhQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpIGFuZCAkdHlwZSBu
ZSAiRGF0ZSIpIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZp
bGUKLSAgICAgICAgJGltcGxJbmNsdWRlc3tHZXRJbXBsZW1lbnRhdGlvbkZpbGVOYW1lKCR7dHlw
ZX0pfSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7R2V0VjhIZWFkZXJOYW1lKCR7dHlwZX0p
fSA9IDE7CisKKyAgICAgICAgaWYgKCR0eXBlID1+IC9TVkdQYXRoU2VnLykgeworICAgICAgICAg
ICAgJGpvaW5lZE5hbWUgPSAkdHlwZTsKKyAgICAgICAgICAgICRqb2luZWROYW1lID1+IHMvQWJz
fFJlbC8vOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWROYW1lfS5oIn0gPSAx
OworICAgICAgICB9CiAgICAgfQogCiAgICAgIyBhZGRpdGlvbmFsIGluY2x1ZGVzICh0aGluZ3Mg
bmVlZGVkIHRvIGNvbXBpbGUgdGhlIGJpbmRpbmdzIGJ1dCBub3QgdGhlIGhlYWRlcikKQEAgLTIx
MCwxNyArMjExLDYgQEAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGltcGxDbGFz
c05hbWU7XG5cbiIpIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGlt
cGxDbGFzc05hbWUpOwogfQogCi1zdWIgR2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZQotewotICAg
IG15ICRpZmFjZSA9IHNoaWZ0OwotICAgIHJldHVybiAiRXZlbnQuaCIgaWYgJGlmYWNlIGVxICJE
T01UaW1lU3RhbXAiOwotICAgIHJldHVybiAiTmFtZWRBdHRyTWFwLmgiIGlmICRpZmFjZSBlcSAi
TmFtZWROb2RlTWFwIjsKLSAgICByZXR1cm4gIk5hbWVOb2RlTGlzdC5oIiBpZiAkaWZhY2UgZXEg
Ik5vZGVMaXN0IjsKLSAgICByZXR1cm4gIlhNTEh0dHBSZXF1ZXN0LmgiIGlmICRpZmFjZSBlcSAi
WE1MSHR0cFJlcXVlc3QiOwotCi0gICAgcmV0dXJuICIke2lmYWNlfS5oIjsKLX0KLQogIyBJZiB0
aGUgbm9kZSBoYXMgYSBbQ29uZGl0aW9uYWw9WFhYXSBhdHRyaWJ1dGUsIHJldHVybnMgYW4gIkVO
QUJMRShYWFgpIiBzdHJpbmcgZm9yIHVzZSBpbiBhbiAjaWYuCiBzdWIgR2VuZXJhdGVDb25kaXRp
b25hbFN0cmluZwogewpAQCAtMjU4LDcgKzI0OCw2IEBACiAKICAgICAjIEdldCBjb3JyZWN0IHBh
c3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKICAgICBteSAkcG9kVHlwZSA9
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsKLSAgICBteSAkcGFz
c1R5cGUgPSAkcG9kVHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPioiIDogIiRp
bXBsQ2xhc3NOYW1lKiI7CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIk
cG9kVHlwZS5oXCJcbiIpIGlmICRwb2RUeXBlIGFuZCAoJHBvZFR5cGUgbmUgImRvdWJsZSIgYW5k
ICRwb2RUeXBlIG5lICJmbG9hdCIgYW5kICRwb2RUeXBlIG5lICJSR0JBMzIiKTsKIApAQCAtMjY4
LDE1ICsyNTcsMjMgQEAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJWOElu
ZGV4LmhcIlxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2V0SGVhZGVyQ2xhc3NJbmNs
dWRlKCRpbXBsQ2xhc3NOYW1lKSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNw
YWNlIFdlYkNvcmUge1xuIik7CisgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbnRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNsYXNzIFY4U1ZHUE9E
VHlwZVdyYXBwZXI7XG4iKTsKKyAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xh
c3MgJGNsYXNzTmFtZSB7XG4iKTsKLSAgICAKLSAgICBteSAkdG9OYXRpdmVSZXR1cm5UeXBlID0g
R2V0UmV0dXJuVHlwZUZvclRvTmF0aXZlKCRpbnRlcmZhY2VOYW1lKTsKKworICAgIG15ICRuYXRp
dmVUeXBlID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zKCRpbnRlcmZhY2VOYW1lKTsKKyAg
ICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAgJG5hdGl2ZVR5cGUgPSAiVjhTVkdQT0RUeXBlV3Jh
cHBlcjwke25hdGl2ZVR5cGV9ID4iOworICAgIH0KKyAgICBteSAkZm9yY2VOZXdPYmplY3RQYXJh
bWV0ZXIgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIsIGJvb2wgZm9yY2VOZXdP
YmplY3QgPSBmYWxzZSIgOiAiIjsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAK
ICBwdWJsaWM6CiAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSk7CiAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
R2V0UmF3VGVtcGxhdGUoKTsKLSAgc3RhdGljICR7dG9OYXRpdmVSZXR1cm5UeXBlfSogdG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gdG9WOEhlbHBlcigke25hdGl2ZVR5cGV9KiR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9
KTsKIEVORAogCiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0z
NDAsNyArMzM3LDEzIEBACiAgIGZyaWVuZCBjbGFzcyBWOENsYXNzSW5kZXg7CiB9OwogCisgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qJHtmb3JjZU5ld09iamVjdFBh
cmFtZXRlcn0pOwogRU5ECisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW1wbENsYXNzTmFtZSkpIHsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPCR7bmF0aXZlVHlwZX0gPiR7Zm9yY2VOZXdPYmplY3RQYXJh
bWV0ZXJ9KTsKK0VORAorICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIp
OwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJGNsYXNzTmFtZSIgLiAiX0hc
biIpOwpAQCAtNjU3LDcgKzY2MCw3IEBACiAgICAgICAgICRhdHRySXNQb2RUeXBlID0gMDsKICAg
ICB9CiAKLSAgICBteSAkZ2V0dGVyU3RyaW5nVXNlc0ltcCA9ICRpbXBsQ2xhc3NOYW1lIG5lICJk
b3VibGUiOworICAgIG15ICRnZXR0ZXJTdHJpbmdVc2VzSW1wID0gJGltcGxDbGFzc05hbWUgbmUg
ImZsb2F0IjsKIAogICAjIEdldHRlcgogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKQEAgLTgxMywxMyArODE2LDE2IEBACiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCBHZW5lcmF0ZVNWR0NvbnRleHRBc3NpZ25tZW50KCRpbXBsQ2xhc3NOYW1lLCAid3JhcHBl
ci5nZXQoKSIsICIgICAgIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVTVkdDb250ZXh0UmV0cmlldmFsKCRpbXBsQ2xhc3NO
YW1lLCAiICAgICIpKTsKLSAgICAgICAgICAgICRyZXN1bHQgPSAiVjhQcm94eTo6d2l0aFNWR0Nv
bnRleHQoJHJlc3VsdCwgY29udGV4dCkiOworICAgICAgICAgICAgIyBUaGUgdGVtcGxhdGluZyBh
c3NvY2lhdGVkIHdpdGggcGFzc2luZyB3aXRoU1ZHQ29udGV4dCgpJ3MgcmV0dXJuIHZhbHVlIGRp
cmVjdGx5IGludG8gdG9WOCBjYW4gZ2V0IGNvbXBpbGVycyBjb25mdXNlZCwKKyAgICAgICAgICAg
ICMgc28ganVzdCBtYW51YWxseSBzZXQgdGhlIHJldHVybiB2YWx1ZSB0byBhIFBhc3NSZWZQdHIg
b2YgdGhlIGV4cGVjdGVkIHR5cGUuCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIFBhc3NSZWZQdHI8JGF0dHJUeXBlPiByZXN1bHRBc1Bhc3NSZWZQdHIgPSBWOFByb3h5
Ojp3aXRoU1ZHQ29udGV4dCgkcmVzdWx0LCBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgJHJl
c3VsdCA9ICJyZXN1bHRBc1Bhc3NSZWZQdHIiOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KCRhdHRySXNQb2RUeXBlKSB7Ci0gICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJGF0dHJUeXBl
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVy
LnJlbGVhc2UoKSk7XG4iKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke2F0dHJUeXBlfS5o
In0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4
KHdyYXBwZXIucmVsZWFzZSgpLmdldCgpKTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICIgICAgIikuIjtcbiIpOwogICAgIH0KQEAgLTkz
NSw3ICs5NDEsNyBAQAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwO1xuIik7CiAgICAgfQogCi0gICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVx
ICJkb3VibGUiKSB7CisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJmbG9hdCIpIHsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAqaW1wID0gJHJlc3VsdDtcbiIpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5l
cmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1lKTsKQEAgLTE0NjIsNyArMTQ2OCw5IEBACiAgICAg
ICAgICAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iIC4KICAgICAgICAgICIjaW5jbHVkZSBcIlY4
UHJveHkuaFwiXG4iIC4KICAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGluZy5oXCJcbiIgLgot
ICAgICAgICAgIiNpbmNsdWRlIFwiVjhCaW5kaW5nU3RhdGUuaFwiXG5cbiIgLgorICAgICAgICAg
IiNpbmNsdWRlIFwiVjhCaW5kaW5nU3RhdGUuaFwiXG4iIC4KKyAgICAgICAgICIjaW5jbHVkZSBc
IlY4RE9NV3JhcHBlci5oXCJcbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhJc29sYXRlZENv
bnRleHQuaFwiXG5cbiIgLgogICAgICAgICAgIiN1bmRlZiBMT0dcblxuIik7CiAKICAgICBwdXNo
KEBpbXBsRml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CkBAIC0xODYwLDcgKzE4NjgsMTAgQEAKIEVORAogICAgIH0KIAot
ICAgICR0b05hdGl2ZVJldHVyblR5cGUgPSBHZXRSZXR1cm5UeXBlRm9yVG9OYXRpdmUoJGludGVy
ZmFjZU5hbWUpOworICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNp
b25zKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiUE9EVHlwZSJ9KSB7CisgICAgICAgICRuYXRpdmVUeXBlID0gIlY4U1ZHUE9EVHlwZVdy
YXBwZXI8JHtuYXRpdmVUeXBlfT4iOworICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOwogICAKICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCkBAIC0xODc4LDggKzE4ODks
OCBAQAogICByZXR1cm4gJHtjbGFzc05hbWV9X2NhY2hlXzsKIH0KIAotJHt0b05hdGl2ZVJldHVy
blR5cGV9KiAke2NsYXNzTmFtZX06OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2Jq
ZWN0KSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PCR7dG9OYXRpdmVSZXR1cm5UeXBlfSo+
KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdElu
ZGV4KSk7IAorJHtuYXRpdmVUeXBlfSogJHtjbGFzc05hbWV9Ojp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2
ZVR5cGV9Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVy
T2JqZWN0SW5kZXgpKTsgCiB9CiAKIGJvb2wgJHtjbGFzc05hbWV9OjpIYXNJbnN0YW5jZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpIHsKQEAgLTE5MDAsNiArMTkxMSw4IEBACiB9CiBFTkQK
ICAgICB9CisgICAgCisgICAgR2VuZXJhdGVUb1Y4Q29udmVydGVycygkZGF0YU5vZGUsICRpbnRl
cmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbmF0aXZlVHlwZSk7CiAKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtMTkwOCw5ICsxOTIxLDE4
MSBAQAogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0
cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAotc3ViIEdldFJldHVyblR5cGVG
b3JUb05hdGl2ZQorc3ViIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMgCiB7CisgICAgbXkgJGRhdGFO
b2RlID0gc2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xh
c3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJG5hdGl2ZVR5cGUgPSBzaGlmdDsKKyAgICAKKyAgICBt
eSAkd3JhcHBlclR5cGUgPSAiVjhDbGFzc0luZGV4OjoiIC4gdWMoJGludGVyZmFjZU5hbWUpOwor
ICAgIG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRhTm9kZSwgJGlu
dGVyZmFjZU5hbWUpOworICAgIG15ICRmb3JjZU5ld09iamVjdElucHV0ID0gSXNET01Ob2RlVHlw
ZSgkaW50ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2JqZWN0IiA6ICIiOworICAgIG15
ICRmb3JjZU5ld09iamVjdENhbGwgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIs
IGZvcmNlTmV3T2JqZWN0IiA6ICIiOworICAgIAorICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7ICAgCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp0b1Y4SGVscGVy
KCR7bmF0aXZlVHlwZX0qIGltcGwke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7CisgIC8vaWYgKCFp
bXBsKQorICAvLyAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgVjhQcm94eSogcHJveHkgPSAwOwor
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CitFTkQKKworICAgIGlmIChJc05vZGVT
dWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsK
KyAgaWYgKGltcGwtPmRvY3VtZW50KCkpIHsKKyAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZl
KGltcGwtPmRvY3VtZW50KCktPmZyYW1lKCkpOworICAgIGlmIChwcm94eSAmJiBzdGF0aWNfY2Fz
dDxOb2RlKj4oaW1wbC0+ZG9jdW1lbnQoKSkgPT0gc3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGwpKQor
ICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgfQor
CitFTkQKKyAgICB9CisKKyAgICBpZiAoJGRvbU1hcEZ1bmN0aW9uKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICghZm9yY2VOZXdPYmplY3QpIHtcbiIpIGlmIElzRE9NTm9k
ZVR5cGUoJGludGVyZmFjZU5hbWUpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQp
OworICB3cmFwcGVyID0gJHtkb21NYXBGdW5jdGlvbn0uZ2V0KGltcGwpOworICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQorICAgIHJldHVybiB3cmFwcGVyOworRU5ECisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIH1cbiIpIGlmIElzRE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpOwor
ICAgIH0KKyAgICBpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7CisKKyAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dDsKKyAgaWYgKHByb3h5KQorICAgIGNvbnRleHQgPSBwcm94eS0+Y29udGV4dCgpOworCisgIC8v
IEVudGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFwcGVyIGluIHRoYXQg
Y29udGV4dC4KKyAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKKyAgICBjb250ZXh0LT5FbnRlcigp
OworRU5ECisgICAgfQorCisgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIGlmIChWOElz
b2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKQorICAgIHByb3h5ID0gMDsKKyAgZWxzZSBpZiAo
IXByb3h5KQorICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoKTsKKworICBpZiAocHJveHkp
CisgICAgd3JhcHBlciA9IHByb3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVXcmFwcGVyRnJvbUNh
Y2hlKCR7d3JhcHBlclR5cGV9KTsKKyAgZWxzZQorICAgIHdyYXBwZXIgPSBTYWZlQWxsb2NhdGlv
bjo6bmV3SW5zdGFuY2UoVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZSgke3dyYXBwZXJUeXBlfSkt
PkdldEZ1bmN0aW9uKCkpOworICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCBWOENsYXNzSW5kZXg6OlRvSW50KCR7d3JhcHBl
clR5cGV9KSwgaW1wbCk7CitFTkQKKworICAgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkp
IHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgLy8gRXhpdCB0aGUgbm9k
ZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQuCisgIGlmICghY29udGV4dC5Jc0VtcHR5KCkp
CisgICAgY29udGV4dC0+RXhpdCgpOworRU5ECisgICAgfQorICAgIAorICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7CisgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICByZXR1cm4gd3Jh
cHBlcjsKK0VORAorICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gIGltcGwtPnJlZigpO1xuIikg
aWYgSXNSZWZQdHJUeXBlKCRpbnRlcmZhY2VOYW1lKTsKKworICAgIGlmICgkZG9tTWFwRnVuY3Rp
b24pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgJHtkb21NYXBGdW5j
dGlvbn0uc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikp
OworRU5ECisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgcmV0dXJu
IHdyYXBwZXI7Cit9CitFTkQKKworICAgIGlmIChJc1JlZlB0clR5cGUoJGludGVyZmFjZU5hbWUp
KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8JHtuYXRpdmVUeXBlfSA+IGltcGwke2ZvcmNlTmV3T2Jq
ZWN0SW5wdXR9KSB7CisgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkke2ZvcmNlTmV3T2JqZWN0Q2Fs
bH0pOworfQorRU5ECisgICAgfQorICAgIAorICAgIGlmICghSGFzQ3VzdG9tVG9WOEltcGxlbWVu
dGF0aW9uKCRkYXRhTm9kZSwgJGludGVyZmFjZU5hbWUpKSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlw
ZX0qIGltcGwke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7CisgIGlmICghaW1wbCkKKyAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKyAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6dG9WOEhlbHBlcihpbXBsJHtm
b3JjZU5ld09iamVjdENhbGx9KTsKK30KK0VORAorICAgIH0KK30KKworc3ViIEhhc0N1c3RvbVRv
VjhJbXBsZW1lbnRhdGlvbiB7CisgICAgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgJGludGVyZmFj
ZU5hbWUgPSBzaGlmdDsKKyAgICAKKyAgICAjIFdlIGdlbmVyYXRlIGEgY3VzdG9tIGNvbnZlcnRl
ciAoYnV0IEpTQyBkb2Vzbid0KSBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICByZXR1cm4gMSBpZiAk
aW50ZXJmYWNlTmFtZSBlcSAiQmFySW5mbyI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5h
bWUgZXEgIkNTU1N0eWxlU2hlZXQiOworICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVx
ICJDYW52YXNQaXhlbEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAi
Q29uc29sZSI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVNlbGVjdGlv
biI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyI7CisgICAg
cmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiOworICAgIHJldHVybiAxIGlm
ICRpbnRlcmZhY2VOYW1lIGVxICJMb2NhdGlvbiI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFj
ZU5hbWUgZXEgIkhUTUxEb2N1bWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUg
ZXEgIkhUTUxFbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSGlz
dG9yeSI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5hbWVkTm9kZU1hcCI7
CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5hdmlnYXRvciI7CisgICAgcmV0
dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNWR0RvY3VtZW50IjsKKyAgICByZXR1cm4gMSBp
ZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGludGVy
ZmFjZU5hbWUgZXEgIlNjcmVlbiI7CisgICAgCisgICAgIyBXZSBkb24ndCBnZW5lcmF0ZSBhIGN1
c3RvbSBjb252ZXJ0ZXIgKGJ1dCBKU0MgZG9lcykgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAgcmV0
dXJuIDAgaWYgJGludGVyZmFjZU5hbWUgZXEgIkFic3RyYWN0V29ya2VyIjsKKyAgICByZXR1cm4g
MCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dCI7CisgICAgcmV0
dXJuIDAgaWYgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxDb2xsZWN0aW9uIjsKKyAgICByZXR1cm4g
MCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSW1hZ2VEYXRhIjsKKyAgICByZXR1cm4gMCBpZiAkaW50
ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKworICAgICMgRm9yIGV2ZXJ5dGhp
bmcgZWxzZSwgZG8gd2hhdCBKU0MgZG9lcy4KKyAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tVG9KUyJ9OworfQorCitzdWIgR2V0RG9tTWFwRnVuY3Rpb24K
K3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0OworICAg
IHJldHVybiAiZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0eXBlIGVxICJTVkdF
bGVtZW50SW5zdGFuY2UiOworICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgpIiBpZiBJc05vZGVT
dWJUeXBlKCRkYXRhTm9kZSk7CisgICAgIyBPbmx5IHVzZSBnZXRET01TVkdPYmplY3RXaXRoQ29u
dGV4dE1hcCgpIGZvciBub24tbm9kZSBzdmcgb2JqZWN0cworICAgIHJldHVybiAiZ2V0RE9NU1ZH
T2JqZWN0V2l0aENvbnRleHRNYXAoKSIgaWYgJHR5cGUgPX4gL1NWRy87CisgICAgcmV0dXJuICIi
IGlmICR0eXBlIGVxICJET01JbXBsZW1lbnRhdGlvbiI7CisgICAgcmV0dXJuICJnZXRBY3RpdmVE
T01PYmplY3RNYXAoKSIgaWYgSXNBY3RpdmVEb21UeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImdl
dERPTU9iamVjdE1hcCgpIjsKK30KKworc3ViIElzQWN0aXZlRG9tVHlwZQoreworICAgIG15ICR0
eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk1lc3NhZ2VQb3J0IjsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiWE1MSHR0cFJlcXVlc3QiOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJXZWJTb2NrZXQiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXb3JrZXIi
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFyZWRXb3JrZXIiOworICAgIHJldHVybiAw
OworfQorCitzdWIgR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zCit7CisgICAgbXkgJHR5cGUg
PSBzaGlmdDsKICAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEgIlNWR1JlY3QiOwog
ICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKICAgICByZXR1
cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKQEAgLTE5
NjMsNyArMjE0OCw2IEBACiAKICAgICBteSAkZmlyc3QgPSAxOwogICAgIG15ICRpbmRleCA9IDA7
Ci0gICAgbXkgJG5vZGVUb1JldHVybiA9IDA7CiAKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIg
KEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBpZiAoJGluZGV4IGVxICRudW1i
ZXJPZlBhcmFtZXRlcnMpIHsKQEAgLTE5ODUsMTAgKzIxNjksNiBAQAogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICRwYXJhbU5hbWU7CiAgICAgICAgIH0K
LQotICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybiJ9
KSB7Ci0gICAgICAgICAgICAkbm9kZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAg
ICAgfQogICAgICAgICAkaW5kZXgrKzsKICAgICB9CiAKQEAgLTIwMDcsMTkgKzIxODcsNyBAQAog
ICAgIG15ICRyZXR1cm4gPSAicmVzdWx0IjsKICAgICBteSAkcmV0dXJuSXNSZWYgPSBJc1JlZlB0
clR5cGUoJHJldHVyblR5cGUpOwogCi0gICAgaWYgKCRub2RlVG9SZXR1cm4pIHsKLSAgICAgICAg
IyBTcGVjaWFsIGNhc2UgZm9yIGluc2VydEJlZm9yZSwgcmVwbGFjZUNoaWxkLCByZW1vdmVDaGls
ZCBhbmQKLSAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBOb2RlLgotICAgICAg
ICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBzdWNjZXNzID0gJGZ1bmN0aW9uU3RyaW5nO1xu
IjsKLSAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgewotICAgICAg
ICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChVTkxJS0VMWShlYykpIGdvdG8gZmFpbDtc
biI7Ci0gICAgICAgIH0KLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChzdWNjZXNz
KVxuIjsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICAiIC4KLSAgICAgICAgICAg
ICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJG5vZGVUb1JldHVy
bik7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIHY4OjpOdWxsKCk7
XG4iOwotICAgICAgICByZXR1cm4gJHJlc3VsdDsKLSAgICB9IGVsc2lmICgkcmV0dXJuVHlwZSBl
cSAidm9pZCIpIHsKKyAgICBpZiAoJHJldHVyblR5cGUgZXEgInZvaWQiKSB7CiAgICAgICAgICRy
ZXN1bHQgLj0gJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iOwogICAgIH0gZWxzaWYgKCRj
b3B5Rmlyc3QpIHsKICAgICAgICAgJHJlc3VsdCAuPQpAQCAtMjA3OCw4ICsyMjQ2LDggQEAKICAg
ICB9CiAKICAgICBpZiAoJHJldHVybnNQb2RUeXBlKSB7Ci0gICAgICAgIG15ICRjbGFzc0luZGV4
ID0gdWMoJHJldHVyblR5cGUpOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRl
eCwgd3JhcHBlci5yZWxlYXNlKCkpO1xuIjsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke3Jl
dHVyblR5cGV9LmgifSA9IDE7CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4g
dG9WOCh3cmFwcGVyLnJlbGVhc2UoKSk7XG4iOwogICAgIH0gZWxzZSB7CiAgICAgICAgICRyZXR1
cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNSZWYpOwogICAgICAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRy
ZXR1cm4sICRpbmRlbnQpIC4gIjtcbiI7CkBAIC0yMTM5LDYgKzIzMDcsNyBAQAogICAgIHJldHVy
biAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgInVu
c2lnbmVkIGxvbmciOwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7
CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgIlNWR0FuaW1hdGVkUG9pbnRzIjsKIAogICAgIHJl
dHVybiAxOwogfQpAQCAtMjE3OSw3ICsyMzQ4LDcgQEAKICAgICByZXR1cm4gIlNWR1RyYW5zZm9y
bSIgaWYgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybSI7CiAgICAgcmV0dXJuICJTVkdMZW5ndGgiIGlm
ICR0eXBlIGVxICJTVkdMZW5ndGgiOwogICAgIHJldHVybiAiU1ZHQW5nbGUiIGlmICR0eXBlIGVx
ICJTVkdBbmdsZSI7Ci0gICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIi
OworICAgIHJldHVybiAiZmxvYXQiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOwogICAgIHJldHVy
biAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyIgaWYgJHR5cGUgZXEgIlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8iOwogICAgIHJldHVybiAiU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSIgaWYgJHR5cGUgZXEg
IlNWR1BhaW50VHlwZSI7CiAgICAgcmV0dXJuICJET01UaW1lU3RhbXAiIGlmICR0eXBlIGVxICJE
T01UaW1lU3RhbXAiOwpAQCAtMjM5NCw3ICsyNTYzLDExIEBACiBzdWIgR2V0VjhIZWFkZXJOYW1l
CiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICByZXR1cm4gIlY4IiAuIEdldEltcGxlbWVu
dGF0aW9uRmlsZU5hbWUoJHR5cGUpOworICAgIHJldHVybiAiVjhFdmVudC5oIiBpZiAkdHlwZSBl
cSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIkV2ZW50TGlzdGVuZXIuaCIgaWYgJHR5cGUg
ZXEgIkV2ZW50TGlzdGVuZXIiOworICAgIHJldHVybiAiRXZlbnRUYXJnZXQuaCIgaWYgJHR5cGUg
ZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIiBp
ZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1cm4gIlY4JHt0eXBl
fS5oIjsKIH0KIAogCkBAIC0yNTE5LDcgKzI2OTIsNiBAQAogICAgIG15ICR2YWx1ZSA9IHNoaWZ0
OwogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IEdldFR5cGVGcm9tU2ln
bmF0dXJlKCRzaWduYXR1cmUpOwotICAgIG15ICRjbGFzc05hbWU9ICJWOCR0eXBlIjsKIAogICAg
IHJldHVybiAicmV0dXJuIHY4OjpEYXRlOjpOZXcoc3RhdGljX2Nhc3Q8ZG91YmxlPigkdmFsdWUp
KSIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CiAgICAgcmV0dXJuICJyZXR1cm4gdjhCb29s
ZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKQEAgLTI1NDYsMjkgKzI3MTgsMjAg
QEAKICAgICAgICAgcmV0dXJuICJyZXR1cm4gdjhTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCi0g
ICAgIyBWOCBzcGVjaWZpYy4KLSAgICBteSAkaW1wbENsYXNzTmFtZSA9ICR0eXBlOwogICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURP
TSBub2RlIGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAgICAg
ICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm5zTmV3In0pIHsK
LSAgICAgICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVU
b1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJu
ICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJHZhbHVlKSI7Ci0g
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJyZXR1cm4gdG9WOCgke3ZhbHVlfSIgLiAoJHNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybnNOZXcifSA/ICIsIHRydWUpIiA6ICIp
Iik7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIgb3IgJHR5cGUgZXEg
IlNWR0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0Iikg
ewogICAgICAgICByZXR1cm4gInJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdl
dFRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudCIp
IHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4
T2JqZWN0KCR2YWx1ZSkiOwotICAgIH0KLQogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5l
ciIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRM
aXN0ZW5lclRvVjhPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICR2YWx1ZSki
OworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIn0gPSAx
OworICAgICAgICByZXR1cm4gInJldHVybiAke3ZhbHVlfSA/IHY4OjpIYW5kbGU8djg6OlZhbHVl
PihzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KCR7dmFsdWV9KS0+Z2V0TGlz
dGVuZXJPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSA6IHY4OjpIYW5kbGU8
djg6OlZhbHVlPih2ODo6TnVsbCgpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUiKSB7CkBAIC0yNTg4LDE4ICsyNzUxLDE1IEBACiAgICAgICAgIHJl
dHVybiAicmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgJHZhbHVlKSI7CiAgICAgfQogCi0gICAgZWxz
ZSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZDb3VudGVkLmgifSA9IDE7Ci0gICAg
ICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQdHIuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJbmNs
dWRlc3sid3RmL0dldFB0ci5oIn0gPSAxOwotICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCR0
eXBlKTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0gPSAxOworICAgICRp
bXBsSW5jbHVkZXN7Ind0Zi9SZWZQdHIuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3dGYv
R2V0UHRyLmgifSA9IDE7CiAKLSAgICAgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKLSAgICAg
ICAgICAgICR2YWx1ZSA9IEdlbmVyYXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIoJHR5cGUsICR2
YWx1ZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoSXNQb2RUeXBlKCR0eXBlKSkgeworICAgICAgICAk
dmFsdWUgPSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyKCR0eXBlLCAkdmFsdWUpIC4g
Ii5nZXQoKSI7CisgICAgfQogCi0gICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgJHZhbHVlKSI7Ci0g
ICAgfQorICAgIHJldHVybiAicmV0dXJuIHRvVjgoJHZhbHVlKSI7CiB9CiAKIHN1YiBHZW5lcmF0
ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHAJKHJldmlzaW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiVjhD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhD
dXN0b21FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhET01BcHBsaWNhdGlvbkNhY2hlLmgi
CiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKQEAgLTUxLDEyICs1MiwxOCBAQAogI2luY2x1ZGUg
IlY4SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4SXNv
bGF0ZWRDb250ZXh0LmgiCi0jaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUg
IlY4TG9jYXRpb24uaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VDaGFubmVsLmgiCiAjaW5jbHVkZSAi
VjhOYW1lZE5vZGVNYXAuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOE5vZGVM
aXN0LmgiCisjaW5jbHVkZSAiVjhOb3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJWOFByb3h5Lmgi
CisjaW5jbHVkZSAiVjhTVkdFbGVtZW50SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJWOFNoYXJlZFdv
cmtlci5oIgogI2luY2x1ZGUgIlY4U3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4V2ViU29ja2V0
LmgiCisjaW5jbHVkZSAiVjhXb3JrZXIuaCIKICNpbmNsdWRlICJXZWJHTEFycmF5LmgiCiAjaW5j
bHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxv
Y2F0aW9uLmgiCkBAIC0xMTY4LDY5ICsxMTc1LDU5IEBACiAgICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICBTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNl
ID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpOwotICAgIGlmIChpbnN0YW5jZSkKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHRUxFTUVOVElO
U1RBTkNFLCBpbnN0YW5jZSk7CisgICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2Ug
PSB0YXJnZXQtPnRvU1ZHRWxlbWVudEluc3RhbmNlKCkpCisgICAgICAgIHJldHVybiB0b1Y4KGlu
c3RhbmNlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2VyKiB3b3Jr
ZXIgPSB0YXJnZXQtPnRvV29ya2VyKCk7Ci0gICAgaWYgKHdvcmtlcikKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09SS0VSLCB3b3JrZXIpOworICAgIGlm
IChXb3JrZXIqIHdvcmtlciA9IHRhcmdldC0+dG9Xb3JrZXIoKSkKKyAgICAgICAgcmV0dXJuIHRv
Vjgod29ya2VyKTsKICNlbmRpZiAvLyBXT1JLRVJTCiAKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktF
UlMpCi0gICAgU2hhcmVkV29ya2VyKiBzaGFyZWRXb3JrZXIgPSB0YXJnZXQtPnRvU2hhcmVkV29y
a2VyKCk7Ci0gICAgaWYgKHNoYXJlZFdvcmtlcikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6U0hBUkVEV09SS0VSLCBzaGFyZWRXb3JrZXIpOworICAgIGlm
IChTaGFyZWRXb3JrZXIqIHNoYXJlZFdvcmtlciA9IHRhcmdldC0+dG9TaGFyZWRXb3JrZXIoKSkK
KyAgICAgICAgcmV0dXJuIHRvVjgoc2hhcmVkV29ya2VyKTsKICNlbmRpZiAvLyBTSEFSRURfV09S
S0VSUwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uKiBub3Rp
ZmljYXRpb24gPSB0YXJnZXQtPnRvTm90aWZpY2F0aW9uKCk7Ci0gICAgaWYgKG5vdGlmaWNhdGlv
bikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJ
Q0FUSU9OLCBub3RpZmljYXRpb24pOworICAgIGlmIChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlv
biA9IHRhcmdldC0+dG9Ob3RpZmljYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRvVjgobm90aWZp
Y2F0aW9uKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgIFdlYlNvY2tl
dCogd2ViU29ja2V0ID0gdGFyZ2V0LT50b1dlYlNvY2tldCgpOwotICAgIGlmICh3ZWJTb2NrZXQp
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQlNPQ0tF
VCwgd2ViU29ja2V0KTsKKyAgICBpZiAoV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB0YXJnZXQtPnRv
V2ViU29ja2V0KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHdlYlNvY2tldCk7CiAjZW5kaWYKIAot
ICAgIE5vZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwotICAgIGlmIChub2RlKQotICAgICAg
ICByZXR1cm4gY29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgIGlmIChOb2RlKiBub2Rl
ID0gdGFyZ2V0LT50b05vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgobm9kZSk7CiAKICAgICBp
ZiAoRE9NV2luZG93KiBkb21XaW5kb3cgPSB0YXJnZXQtPnRvRE9NV2luZG93KCkpCi0gICAgICAg
IHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZG9tV2lu
ZG93KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoZG9tV2luZG93KTsKIAogICAgIC8vIFhNTEh0dHBS
ZXF1ZXN0IGlzIGNyZWF0ZWQgd2l0aGluIGl0cyBKUyBjb3VudGVycGFydC4KLSAgICBYTUxIdHRw
UmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3QoKTsKLSAg
ICBpZiAoeG1sSHR0cFJlcXVlc3QpIHsKKyAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBS
ZXF1ZXN0ID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0KCkpIHsKICAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuZ2V0KHhtbEh0
dHBSZXF1ZXN0KTsKICAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzRW1wdHkoKSk7CiAgICAgICAg
IHJldHVybiB3cmFwcGVyOwogICAgIH0KIAogICAgIC8vIE1lc3NhZ2VQb3J0IGlzIGNyZWF0ZWQg
d2l0aGluIGl0cyBKUyBjb3VudGVycGFydAotICAgIE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGFyZ2V0
LT50b01lc3NhZ2VQb3J0KCk7Ci0gICAgaWYgKHBvcnQpIHsKKyAgICBpZiAoTWVzc2FnZVBvcnQq
IHBvcnQgPSB0YXJnZXQtPnRvTWVzc2FnZVBvcnQoKSkgewogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRBY3RpdmVET01PYmplY3RNYXAoKS5nZXQocG9ydCk7CiAg
ICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3JhcHBl
cjsKICAgICB9CiAKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50
b1hNTEh0dHBSZXF1ZXN0VXBsb2FkKCk7Ci0gICAgaWYgKHVwbG9hZCkgeworICAgIGlmIChYTUxI
dHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2Jq
ZWN0TWFwKCkuZ2V0KHVwbG9hZCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkp
OwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKICNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUFwcENhY2hlID0g
dGFyZ2V0LT50b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAoZG9tQXBwQ2FjaGUpCi0g
ICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FU
SU9OQ0FDSEUsIGRvbUFwcENhY2hlKTsKKyAgICBpZiAoRE9NQXBwbGljYXRpb25DYWNoZSogZG9t
QXBwQ2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQorICAgICAgICByZXR1
cm4gdG9WOChkb21BcHBDYWNoZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA1MzkzNykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDkgQEAKICAg
ICAgICAgICAgIHNldFNWR0NvbnRleHQob2JqZWN0LmdldCgpLCBjb250ZXh0KTsKICAgICAgICAg
ICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQqIHdpdGhT
VkdDb250ZXh0KHZvaWQqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgc3RhdGljIFQqIHdpdGhTVkdDb250ZXh0KFQq
IG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgc2V0
U1ZHQ29udGV4dChvYmplY3QsIGNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkocmV2aXNpb24gNTM5MzcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUs
MTUgKzI1NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBT
ZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCi0g
ICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0
IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKLQogICAgICAgICBz
dGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGh0bWxFbGVtZW50VHlwZShIVE1MRWxl
bWVudCopOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUgc3ZnRWxlbWVudFR5cGUoU1ZHRWxlbWVudCopOwogI2VuZGlmCisgICAgICAg
IC8vIFNldCBoaWRkZW4gcmVmZXJlbmNlcyBpbiBhIERPTVdpbmRvdyBvYmplY3Qgb2YgYSBmcmFt
ZS4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKEZyYW1lKiwg
Y29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogCisgICAg
cHJpdmF0ZToKKwogICAgICAgICAvLyBUaGUgZmlyc3QgVjhXcmFwcGVyVHlwZSBzcGVjaWZpZXMg
dGhlIGZ1bmN0aW9uIGRlc2NyaXB0b3IKICAgICAgICAgLy8gdXNlZCB0byBjcmVhdGUgSlMgb2Jq
ZWN0LiBUaGUgc2Vjb25kIFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzCiAgICAgICAgIC8vIHRoZSBh
Y3R1YWwgdHlwZSBvZiB0aGUgdm9pZCogZm9yIHR5cGUgY2FzdGluZy4KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9WOENvbGxlY3Rpb24uaAkocmV2aXNpb24gNTM5MzcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4Q29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6QXJyYXk+
IG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQogICAgIHsKICAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKICAg
ICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0
aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxl
bmd0aCgpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpB
cnJheTo6TmV3KGxlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MzkzNykKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1cm4gc2V0V2ViR0xBcnJh
eTxXZWJHTEZsb2F0QXJyYXksIFY4V2ViR0xGbG9hdEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6
OldFQkdMRkxPQVRBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdM
RmxvYXRBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6
TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4V2ViR0xGbG9h
dEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisg
ICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShp
bXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsRmxvYXRBcnJheSwgaW1wbC0+bGVuZ3Ro
KCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5MzcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJWOE5hdmlnYXRvci5oIgogCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93Lmgi
CisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDIsNCArNDQsMTcgQEAKIH0KICNlbmRpZgogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChO
YXZpZ2F0b3IqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51
bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RN
YXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHdy
YXBwZXIgPSBWOE5hdmlnYXRvcjo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93
UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93OjpuYXZpZ2F0b3JJbmRleCwgd3Jh
cHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4V2ViR0xBcnJheS5oIgorCisjaW5jbHVk
ZSAiVjhXZWJHTEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xGbG9hdEFycmF5LmgiCisj
aW5jbHVkZSAiVjhXZWJHTEludEFycmF5LmgiCisjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXku
aCIKKyNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJWOFdl
YkdMVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJy
YXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChXZWJHTEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlzQnl0ZUFycmF5KCkpCisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFdlYkdMQnl0ZUFycmF5Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5p
c0Zsb2F0QXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xGbG9h
dEFycmF5Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc0ludEFycmF5KCkpCisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMSW50QXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGlt
cGwtPmlzU2hvcnRBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJH
TFNob3J0QXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzVW5zaWduZWRCeXRlQXJyYXko
KSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eSo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNVbnNpZ25lZEludEFycmF5KCkpCisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMVW5zaWduZWRJbnRBcnJheSo+KGltcGwpKTsK
KyAgICBpZiAoaW1wbC0+aXNVbnNpZ25lZFNob3J0QXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkqPihpbXBsKSk7CisgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzkzNykKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KGNvbnN0IFdlYkdM
R2V0SW5mbyYgaW5mbykKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChj
b25zdCBXZWJHTEdldEluZm8mIGluZm8pCiB7CiAgICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkg
ewogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CkBAIC0yNjEsNyArMjYxLDcgQEAK
ICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJu
IHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHN0YXRpYyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdG9X
ZWJHTFVuaWZvcm1Mb2NhdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9r
KQpAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihl
Yyk7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0
b1Y4KGluZm8pOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgICAg
VjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmpl
Y3QoaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCkBAIC0zNjgsNyArMzY4LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJu
IHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTQwMCw3ICs0MDAs
NyBAQAogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICBy
ZXR1cm4gdG9WOE9iamVjdChpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQpAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERP
TUV4Y2VwdGlvbihlYyk7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQot
ICAgIHJldHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQog
CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRl
eEF0dHJpYkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biA1MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDQgKzkxOCwzNyBAQAogICAgIHJldHVybiBWOEJp
bmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgdGFy
Z2V0LCBmYWxzZSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyog
d2luZG93KQoreworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
KyAgICAvLyBJbml0aWFsaXplcyBlbnZpcm9ubWVudCBvZiBhIGZyYW1lLCBhbmQgcmV0dXJuIHRo
ZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGZyYW1lLgorICAgIEZyYW1lKiBmcmFtZSA9
IHdpbmRvdy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpOworCisgICAgLy8gU3BlY2lhbCBjYXNlOiBCZWNhdXNlIG9mIGV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKCkgb25lIERPTVdpbmRvdyBjYW4gaGF2ZQorICAgIC8vIG11
bHRpcGxlIGNvbnRleHRzIGFuZCBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBhc3NvY2lhdGVkIHdp
dGggaXQuIFdoZW4KKyAgICAvLyBjb2RlIHJ1bm5pbmcgaW4gb25lIG9mIHRob3NlIGNvbnRleHRz
IGFjY2Vzc2VzIHRoZSB3aW5kb3cgb2JqZWN0LCB3ZQorICAgIC8vIHdhbnQgdG8gcmV0dXJuIHRo
ZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbnRleHQsIG5vdAorICAgIC8v
IG5lY2Vzc2FyaWx5IHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0
IERPTVdpbmRvdy4KKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjdXJyZW50Q29udGV4dCA9
IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
dXJyZW50R2xvYmFsID0gY3VycmVudENvbnRleHQtPkdsb2JhbCgpOworICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBl
cihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY3VycmVudEdsb2JhbCk7CisgICAgaWYgKCF3aW5k
b3dXcmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICBpZiAoVjhET01XaW5kb3c6OnRvTmF0aXZl
KHdpbmRvd1dyYXBwZXIpID09IHdpbmRvdykKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50R2xv
YmFsOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYW1lLgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKKyAgICBpZiAoY29udGV4dC5Jc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIEFT
U0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNQaXhlbEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJW
OENhbnZhc1BpeGVsQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChDYW52YXNQaXhlbEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gVjhDYW52YXNQaXhlbEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0
aWVzVG9QaXhlbERhdGEoaW1wbC0+ZGF0YSgpLT5kYXRhKCksIGltcGwtPmxlbmd0aCgpKTsKKyAg
ICByZXR1cm4gd3JhcHBlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDExIEBACiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Y
UGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQ
cm94eS5oIgorI2luY2x1ZGUgIlY4U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOFhQYXRoTlNS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlY4WFBhdGhSZXN1bHQuaCIKIApAQCAtMTMyLDQgKzEzNSwy
MCBAQAogICAgIHJldHVybiB3cmFwcGVyOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChEb2N1bWVudCogaW1wbCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBsLT5pc0hUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBs
KSwgZm9yY2VOZXdPYmplY3QpOworICAgIGlmIChpbXBsLT5pc1NWR0RvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oaW1wbCksIGZvcmNlTmV3
T2JqZWN0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IFY4RG9jdW1lbnQ6
OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VOZXdPYmplY3QpOworICAgIGlmICghVjhJc29sYXRlZENv
bnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgICAgICBpZiAoVjhQcm94eSogcHJveHkgPSBWOFBy
b3h5OjpyZXRyaWV2ZShpbXBsLT5mcmFtZSgpKSkKKyAgICAgICAgICAgIHByb3h5LT53aW5kb3dT
aGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CisgICAgfQorICAgIHJldHVy
biB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTM5MzcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTAgKzM0LDI4IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKKyNpbmNsdWRlICJWOEJlZm9yZUxvYWRFdmVudC5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4Q29tcG9zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlY4Q3Vz
dG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4RXJyb3JFdmVudC5oIgorI2luY2x1ZGUgIlY4S2V5
Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlY4TWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiVjhN
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiVjhNdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiVjhP
dmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiVjhQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCisjaW5j
bHVkZSAiVjhQb3BTdGF0ZUV2ZW50LmgiCisjaW5jbHVkZSAiVjhQcm9ncmVzc0V2ZW50LmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4U1ZHWm9vbUV2ZW50LmgiCisjaW5jbHVk
ZSAiVjhTdG9yYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJWOFRleHRFdmVudC5oIgorI2luY2x1ZGUg
IlY4VUlFdmVudC5oIgorI2luY2x1ZGUgIlY4V2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKKyNpbmNs
dWRlICJWOFdlYktpdFRyYW5zaXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlY4V2hlZWxFdmVudC5o
IgorI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNjcsNCArODUsNTYgQEAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChFdmVudCogaW1wbCkKK3sKKyAg
ICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBsLT5p
c1VJRXZlbnQoKSkgeworICAgICAgICBpZiAoaW1wbC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oaW1wbCkpOwor
ICAgICAgICBpZiAoaW1wbC0+aXNUZXh0RXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGltcGwpKTsKKyAgICAgICAgaWYgKGltcGwtPmlzTW91
c2VFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dCo+KGltcGwpKTsKKyAgICAgICAgaWYgKGltcGwtPmlzV2hlZWxFdmVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+KGltcGwpKTsKKyNpZiBFTkFC
TEUoU1ZHKQorICAgICAgICBpZiAoaW1wbC0+aXNTVkdab29tRXZlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1pvb21FdmVudCo+KGltcGwpKTsKKyNlbmRpZgor
ICAgICAgICBpZiAoaW1wbC0+aXNDb21wb3NpdGlvbkV2ZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxDb21wb3NpdGlvbkV2ZW50Kj4oaW1wbCkpOworICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxVSUV2ZW50Kj4oaW1wbCkpOworICAgIH0KKyAgICBpZiAo
aW1wbC0+aXNNdXRhdGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PE11dGF0aW9uRXZlbnQqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzT3ZlcmZsb3dFdmVudCgp
KQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oaW1wbCkp
OworICAgIGlmIChpbXBsLT5pc01lc3NhZ2VFdmVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxNZXNzYWdlRXZlbnQqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzUGFnZVRy
YW5zaXRpb25FdmVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxQYWdlVHJh
bnNpdGlvbkV2ZW50Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc1BvcFN0YXRlRXZlbnQoKSkK
KyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8UG9wU3RhdGVFdmVudCo+KGltcGwpKTsK
KyAgICBpZiAoaW1wbC0+aXNQcm9ncmVzc0V2ZW50KCkpIHsKKyAgICAgICAgaWYgKGltcGwtPmlz
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQqPihpbXBsKSk7CisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFByb2dyZXNzRXZlbnQqPihpbXBsKSk7CisgICAgfQor
ICAgIGlmIChpbXBsLT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFdlYktpdEFuaW1hdGlvbkV2ZW50Kj4oaW1wbCkpOworICAgIGlmIChp
bXBsLT5pc1dlYktpdFRyYW5zaXRpb25FdmVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxXZWJLaXRUcmFuc2l0aW9uRXZlbnQqPihpbXBsKSk7CisjaWYgRU5BQkxFKFdPUktF
UlMpCisgICAgaWYgKGltcGwtPmlzRXJyb3JFdmVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oaW1wbCkpOworI2VuZGlmCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorICAgIGlmIChpbXBsLT5pc1N0b3JhZ2VFdmVudCgpKQorICAgICAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxTdG9yYWdlRXZlbnQqPihpbXBsKSk7CisjZW5kaWYKKyAgICBpZiAo
aW1wbC0+aXNCZWZvcmVMb2FkRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8QmVmb3JlTG9hZEV2ZW50Kj4oaW1wbCkpOworICAgIHJldHVybiBWOEV2ZW50Ojp0b1Y4SGVs
cGVyKGltcGwpOworfQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVB
cnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE2IEBACiAgICAgcmV0
dXJuIHNldFdlYkdMQXJyYXk8V2ViR0xCeXRlQXJyYXksIFY4V2ViR0xCeXRlQXJyYXk+KGFyZ3Ms
IFY4Q2xhc3NJbmRleDo6V0VCR0xCWVRFQVJSQVkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChXZWJHTEJ5dGVBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IFY4V2ViR0xCeXRlQXJyYXk6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklz
RW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFs
QXJyYXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCksIHY4OjprRXh0ZXJuYWxCeXRlQXJyYXksIGlt
cGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVjhET01TZWxlY3Rpb24uaCIKKworI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisj
aW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoRE9NU2VsZWN0aW9uKiBpbXBsKQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkgeworICAgICAgICB3cmFwcGVyID0gVjhET01TZWxlY3Rpb246OnRvVjhIZWxw
ZXIoaW1wbCk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNl
KGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojpkb21TZWxlY3Rpb25JbmRleCwgd3JhcHBlcik7
CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDIzIEBACiAjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgogCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJWOEF0dHIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENEQVRB
U2VjdGlvbi5oIgorI2luY2x1ZGUgIlY4Q29tbWVudC5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJWOERvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJW
OERvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIlY4RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4RW50
aXR5LmgiCisjaW5jbHVkZSAiVjhFbnRpdHlSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJWOE5vZGUu
aCIKKyNpbmNsdWRlICJWOE5vdGF0aW9uLmgiCisjaW5jbHVkZSAiVjhQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhUZXh0LmgiCiAKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTE1Miw0ICsxNjQsMzcgQEAKICAgICByZXR1cm4g
djg6Ok51bGwoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwg
Ym9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2
ODo6TnVsbCgpOworICAgIHN3aXRjaCAoaW1wbC0+bm9kZVR5cGUoKSkgeworICAgIGNhc2UgTm9k
ZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RF
OgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxBdHRyKj4oaW1wbCksIGZvcmNlTmV3
T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8VGV4dCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2Rl
OjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENE
QVRBU2VjdGlvbio+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfUkVGRVJFTkNFX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEVudGl0
eVJlZmVyZW5jZSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RW50aXR5Kj4oaW1wbCks
IGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05f
Tk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0
aW9uKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9E
RToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q29tbWVudCo+KGltcGwpLCBmb3Jj
ZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7Cisg
ICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2Fz
ZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxEb2N1bWVudEZyYWdtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBj
YXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PE5vdGF0aW9uKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBkZWZhdWx0OiBicmVhazsg
Ly8gWFBBVEhfTkFNRVNQQUNFX05PREUKKyAgICB9CisgICAgcmV0dXJuIFY4Tm9kZTo6dG9WOEhl
bHBlcihpbXBsLCBmb3JjZU5ld09iamVjdCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBD
dXN0b20uY3BwCShyZXZpc2lvbiA1MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4RWxlbWVudC5oIgogI2luY2x1
ZGUgIlY4UHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTcyLDQgKzczLDE4
IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3Vs
dC5yZWxlYXNlKCkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChOYW1lZE5vZGVN
YXAqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOE5hbWVkTm9kZU1hcDo6dG9W
OEhlbHBlcihpbXBsKTsKKyAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20gbmFtZWQg
bm9kZSBtYXAgdG8gaXRzIG93bmVyIG5vZGUuCisgICAgRWxlbWVudCogZWxlbWVudCA9IGltcGwt
PmVsZW1lbnQoKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpICYmIGVsZW1lbnQpIHsKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG93bmVyID0gdG9WOChlbGVtZW50KTsKKyAgICAg
ICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVsZChWOE5hbWVkTm9kZU1hcDo6b3duZXJOb2RlSW5k
ZXgsIG93bmVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVT
aGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhDU1NTdHlsZVNoZWV0
LmgiCisKKyNpbmNsdWRlICJWOE5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDU1NTdHlsZVNoZWV0KiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gVjhDU1NTdHlsZVNoZWV0Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIC8v
IEFkZCBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSBzdHlsZXNoZWV0IG9iamVjdCB0byBpdHMgb3du
ZXIgbm9kZS4KKyAgICBOb2RlKiBvd25lck5vZGUgPSBpbXBsLT5vd25lck5vZGUoKTsKKyAgICBp
ZiAob3duZXJOb2RlICYmICF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0
SW50ZXJuYWxGaWVsZChWOENTU1N0eWxlU2hlZXQ6Om93bmVyTm9kZUluZGV4LCB0b1Y4KG93bmVy
Tm9kZSkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQu
aCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTE4OCw0ICsxODksMjIgQEAKICAgICBpbmZvLkhv
bGRlcigpLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjpzaGFkb3dJbmRleCwgdmFs
dWUpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIVE1MRG9jdW1lbnQqIGltcGws
IGJvb2wgZm9yY2VOZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOEhUTUxE
b2N1bWVudDo6dG9WOEhlbHBlcihpbXBsLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKCFWOElz
b2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgICAgIGlmIChWOFByb3h5KiBwcm94
eSA9IFY4UHJveHk6OnJldHJpZXZlKGltcGwtPmZyYW1lKCkpKQorICAgICAgICAgICAgcHJveHkt
PndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICB9Cisg
ICAgLy8gQ3JlYXRlIG1hcmtlciBvYmplY3QgYW5kIGluc2VydCBpdCBpbiB0d28gaW50ZXJuYWwg
ZmllbGRzLgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGVtcG9yYXJ5IHNoYWRv
d2luZyBvZiBkb2N1bWVudC5hbGwuCisgICAgQVNTRVJUKHdyYXBwZXItPkludGVybmFsRmllbGRD
b3VudCgpID09IFY4SFRNTERvY3VtZW50OjppbnRlcm5hbEZpZWxkQ291bnQpOworICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBtYXJrZXIgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICB3cmFwcGVy
LT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjptYXJrZXJJbmRleCwgbWFya2VyKTsK
KyAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjpzaGFkb3dJbmRl
eCwgbWFya2VyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5Mzcp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ2FudmFzU3R5
bGUqIHN0eWxlKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KENhbnZh
c1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpCiAgICAg
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTR1JBRElFTlQsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsKQEAgLTc4LDcgKzc4LDcg
QEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC0+c3Ryb2tlU3R5bGUoKSk7CisgICAgcmV0dXJuIHRv
VjhPYmplY3QoaW1wbC0+c3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQgVjhDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQpAQCAtOTAsNyArOTAsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC0+ZmlsbFN0
eWxlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGltcGwtPmZpbGxTdHlsZSgpKTsKIH0KIAog
dm9pZCBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlQWNjZXNzb3JTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFNWR1Bh
dGhTZWcuaCIKKworI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhET01XcmFw
cGVyLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQXJjQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQ
YXRoU2VnQXJjUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCisjaW5j
bHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVs
LmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5oIgorI2luY2x1
ZGUgIlY4U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuaCIKKyNpbmNsdWRlICJWOFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0
b0Ficy5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMuaCIKKyNp
bmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLmgiCisjaW5jbHVkZSAiVjhT
VkdQYXRoU2VnTGluZXRvUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRvVmVydGlj
YWxBYnMuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIgorI2lu
Y2x1ZGUgIlY4U1ZHUGF0aFNlZ01vdmV0b0Ficy5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ01v
dmV0b1JlbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFNWR1BhdGhTZWcqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKyAgICBzd2l0Y2ggKGltcGwtPnBhdGhTZWdUeXBlKCkpIHsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRIOiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0Nsb3NlUGF0aCo+KGltcGwpKTsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzogICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KGltcGwpKTsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX1JFTDogICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b1JlbCo+KGltcGwpKTsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0FCUzogICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficyo+KGltcGwpKTsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1JFTDogICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1JlbCo+KGltcGwpKTsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6ICAgICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KGltcGwpKTsK
KyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw6ICAgICAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KGlt
cGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJT
OiAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNBYnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVB
RFJBVElDX1JFTDogICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19B
UkNfQUJTOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQXJjQWJzKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19BUkNf
UkVMOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQXJjUmVsKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9f
SE9SSVpPTlRBTF9BQlM6ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbEFicyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhT
RUdfTElORVRPX0hPUklaT05UQUxfUkVMOiAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRo
U2VnOjpQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlM6ICAgICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyo+KGltcGwpKTsKKyAgICBjYXNl
IFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTDogICAgICAgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4oaW1wbCkpOwor
ICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6ICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJz
Kj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1NN
T09USF9SRUw6ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoUmVsKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJW
RVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOiByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhT
ZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDogcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwqPihpbXBsKSk7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBWOFNWR1BhdGhTZWc6
OnRvVjhIZWxwZXIoaW1wbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNp
Z25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MzkzNykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNiBAQAogICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdl
YkdMVW5zaWduZWRTaG9ydEFycmF5LCBWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PihhcmdzLCBW
OENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZKTsKIH0KIAordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkqIGltcGwpCit7CisgICAgaWYg
KCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Ojp0b1Y4SGVscGVyKGlt
cGwpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldElu
ZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2
ODo6a0V4dGVybmFsVW5zaWduZWRTaG9ydEFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0
dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50Lmgi
CisKKyNpbmNsdWRlICJWOEhUTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MQXBw
bGV0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MQXVkaW9FbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MQlJFbGVtZW50LmgiCisjaW5j
bHVkZSAiVjhIVE1MQmFzZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxCYXNlRm9udEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJWOEhUTUxCbG9ja3F1b3RlRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4
SFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MQnV0dG9uRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlY4SFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxETGlzdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJWOEhUTUxEYXRhR3JpZENlbGxFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MRGF0YUdyaWRDb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MRGF0YUdyaWRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MRGF0YUdyaWRSb3dFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MRGlyZWN0b3J5RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTERpdkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJWOEhUTUxFbWJlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxGaWVsZFNl
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxGb250RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4
SFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MRnJhbWVFbGVtZW50LmgiCisjaW5j
bHVkZSAiVjhIVE1MRnJhbWVTZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MSFJFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxIZWFk
aW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTEltYWdlRWxlbWVudC5oIgor
I2luY2x1ZGUgIlY4SFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTElzSW5kZXhF
bGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MTElFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1M
TGFiZWxFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MTGVnZW5kRWxlbWVudC5oIgorI2luY2x1
ZGUgIlY4SFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MTWFwRWxlbWVudC5oIgor
I2luY2x1ZGUgIlY4SFRNTE1hcnF1ZWVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MTWVudUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxNZXRhRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRN
TE1vZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxPTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJWOEhUTUxPYmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MT3B0R3JvdXBFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFBh
cmFncmFwaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxQYXJhbUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJWOEhUTUxQcmVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MUXVvdGVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiVjhIVE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTFNlbGVj
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxTb3VyY2VFbGVtZW50LmgiCisjaW5jbHVkZSAi
VjhIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlY4SFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhU
TUxUYWJsZUNvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxUYWJsZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJWOEhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5j
bHVkZSAiVjhIVE1MVGl0bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MVUxpc3RFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhIVE1MVmlkZW9FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIGJvb2wg
Zm9yY2VOZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51
bGwoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcgdGFnID0gaW1wbC0+bG9jYWxOYW1lKCk7Cisg
ICAgaWYgKHRhZyA9PSAiYSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVt
ZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImFwcGxldCIpIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PEhUTUxBcHBsZXRFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImFyZWEi
KSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQqPihpbXBsKSk7CisgICAg
aWYgKHRhZyA9PSAiYmFzZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVu
dCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJiYXNlZm9udCIpIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiYmxv
Y2txdW90ZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudCo+
KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJib2R5IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
SFRNTEJvZHlFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImJyIikgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJi
dXR0b24iKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudCo+KGltcGwp
KTsKKyAgICBpZiAodGFnID09ICJjYXB0aW9uIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiY29sIikgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudCo+KGltcGwpKTsKKyAgICBp
ZiAodGFnID09ICJjb2xncm91cCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxUYWJsZUNv
bEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZGVsIikgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiY2FudmFz
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKSk7Cisg
ICAgaWYgKHRhZyA9PSAiZGlyIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9y
eUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZGl2IikgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8SFRNTERpdkVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZGwiKSBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVtZW50Kj4oaW1wbCkpOworICAgIGlm
ICh0YWcgPT0gImVtYmVkIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVu
dCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmaWVsZHNldCIpIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZm9u
dCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudCo+KGltcGwpKTsKKyAg
ICBpZiAodGFnID09ICJmb3JtIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImZyYW1lIikgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmcmFtZXNl
dCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnQqPihpbXBsKSk7
CisgICAgaWYgKHRhZyA9PSAiaDEiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MSGVhZGlu
Z0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiaDIiKSByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiaDMi
KSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnQqPihpbXBsKSk7Cisg
ICAgaWYgKHRhZyA9PSAiaDQiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0Vs
ZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiaDUiKSByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxIVE1MSGVhZGluZ0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiaDYiKSBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnQqPihpbXBsKSk7CisgICAg
aWYgKHRhZyA9PSAiaGVhZCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVu
dCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJociIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PEhUTUxIUkVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiaHRtbCIpIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09
ICJpbWciKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oaW1wbCkp
OworICAgIGlmICh0YWcgPT0gImlmcmFtZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxJ
RnJhbWVFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImltYWdlIikgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09
ICJpbnB1dCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbXBs
KSk7CisgICAgaWYgKHRhZyA9PSAiaW5zIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTE1v
ZEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiaXNpbmRleCIpIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09
ICJrZXlnZW4iKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGlt
cGwpKTsKKyAgICBpZiAodGFnID09ICJsYWJlbCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAibGVnZW5kIikgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRh
ZyA9PSAibGkiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50Kj4oaW1wbCkp
OworICAgIGlmICh0YWcgPT0gImxpbmsiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MTGlu
a0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAibGlzdGluZyIpIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gIm1h
cCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4oaW1wbCkpOworICAg
IGlmICh0YWcgPT0gIm1hcnF1ZWUiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MTWFycXVl
ZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAibWVudSIpIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJtZXRh
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50Kj4oaW1wbCkpOworICAg
IGlmICh0YWcgPT0gIm9iamVjdCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxPYmplY3RF
bGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gIm9sIikgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJvcHRncm91
cCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQqPihpbXBsKSk7
CisgICAgaWYgKHRhZyA9PSAib3B0aW9uIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAicCIpIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0g
InBhcmFtIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudCo+KGltcGwp
KTsKKyAgICBpZiAodGFnID09ICJwcmUiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MUHJl
RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJxIikgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8SFRNTFF1b3RlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJzY3JpcHQi
KSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KGltcGwpKTsKKyAg
ICBpZiAodGFnID09ICJzZWxlY3QiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MU2VsZWN0
RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJzdHlsZSIpIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAidGFi
bGUiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oaW1wbCkpOwor
ICAgIGlmICh0YWcgPT0gInRoZWFkIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAidGJvZHkiKSByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KGltcGwpKTsKKyAgICBp
ZiAodGFnID09ICJ0Zm9vdCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gInRkIikgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAi
dGgiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KGltcGwp
KTsKKyAgICBpZiAodGFnID09ICJ0ciIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxUYWJs
ZVJvd0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAidGV4dGFyZWEiKSByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0
YWcgPT0gInRpdGxlIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudCo+
KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJ1bCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhU
TUxVTGlzdEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAieG1wIikgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnQqPihpbXBsKSk7CisjaWYgRU5BQkxFKERBVEFH
UklEKQorICAgIGlmICh0YWcgPT0gImRhdGFncmlkIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
SFRNTERhdGFHcmlkRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJkY2VsbCIpIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxEYXRhR3JpZENlbGxFbGVtZW50Kj4oaW1wbCkpOwor
ICAgIGlmICh0YWcgPT0gImRjb2wiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRGF0YUdy
aWRDZWxsRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJkcm93IikgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8SFRNTERhdGFHcmlkUm93RWxlbWVudCo+KGltcGwpKTsKKyNlbmRpZgor
I2lmIEVOQUJMRShWSURFTykKKyAgICBpZiAodGFnID09ICJhdWRpbyIgJiYgTWVkaWFQbGF5ZXI6
OmlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxBdWRp
b0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAic291cmNlIiAmJiBNZWRpYVBsYXll
cjo6aXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTFNv
dXJjZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAidmlkZW8iICYmIE1lZGlhUGxh
eWVyOjppc0F2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1M
VmlkZW9FbGVtZW50Kj4oaW1wbCkpOworI2VuZGlmCisgICAgcmV0dXJuIFY4SFRNTEVsZW1lbnQ6
OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VOZXdPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRC
eXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTM3KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1cm4gc2V0
V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LCBWOFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FREJZVEVBUlJBWSk7CiB9CiAKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMVW5zaWduZWRCeXRlQXJyYXkqIGltcGwpCit7
CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnRvVjhI
ZWxwZXIoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBl
ci0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRy
ZXNzKCksIHY4OjprRXh0ZXJuYWxVbnNpZ25lZEJ5dGVBcnJheSwgaW1wbC0+bGVuZ3RoKCkpOwor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOENTU1J1bGUuaCIKKworI2luY2x1
ZGUgIlY4Q1NTQ2hhcnNldFJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU0ZvbnRGYWNlUnVsZS5oIgor
I2luY2x1ZGUgIlY4Q1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTTWVkaWFSdWxlLmgi
CisjaW5jbHVkZSAiVjhDU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgi
CisjaW5jbHVkZSAiVjhDU1NWYXJpYWJsZXNSdWxlLmgiCisjaW5jbHVkZSAiVjhXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJWOFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDU1NSdWxl
KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Cisg
ICAgc3dpdGNoIChpbXBsLT50eXBlKCkpIHsKKyAgICBjYXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6
CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGltcGwpKTsK
KyAgICBjYXNlIENTU1J1bGU6OkNIQVJTRVRfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpJTVBP
UlRfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+
KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6Ok1FRElBX1JVTEU6CisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6
OkZPTlRfRkFDRV9SVUxFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NGb250
RmFjZVJ1bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpQQUdFX1JVTEU6CisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4oaW1wbCkpOworICAgIGNhc2Ug
Q1NTUnVsZTo6VkFSSUFCTEVTX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PENTU1ZhcmlhYmxlc1J1bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpXRUJLSVRfS0VZ
RlJBTUVfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKj4oaW1wbCkpOworICAgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FU19S
VUxFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKj4oaW1wbCkpOworICAgIH0KKyAgICByZXR1cm4gVjhDU1NSdWxlOjp0b1Y4SGVscGVyKGlt
cGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4Q1NTVmFs
dWUuaCIKKworI2luY2x1ZGUgIlY4Q1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJWOENT
U1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIlY4U1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJWOFNWR1Bh
aW50LmgiCisjaW5jbHVkZSAiVjhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENTU1ZhbHVlKiBpbXBs
KQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYg
KGltcGwtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihpbXBsKSk7CisgICAgaWYgKGlt
cGwtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1Zh
bHVlTGlzdCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGltcGwpKTsK
KyAgICBpZiAoaW1wbC0+aXNTVkdQYWludCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxTVkdQYWludCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNTVkdDb2xvcigpKQorICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdDb2xvcio+KGltcGwpKTsKKyAgICByZXR1
cm4gVjhDU1NWYWx1ZTo6dG9WOEhlbHBlcihpbXBsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiA1MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDkgQEAKICNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUg
IlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4SFRNTEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdFbGVtZW50LmgiCiAKICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKQEAgLTEyNyw0ICsxMjksMTQgQEAKICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KEVsZW1lbnQqIGltcGwsIGJvb2wgZm9yY2VOZXdPYmplY3QpCit7
CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBpZiAoaW1w
bC0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKGltcGwtPmlzU1ZHRWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oaW1w
bCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICByZXR1cm4gVjhFbGVtZW50Ojp0b1Y4SGVscGVyKGlt
cGwsIGZvcmNlTmV3T2JqZWN0KTsKK30KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVjhTVkdEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiVjhJc29sYXRlZENv
bnRleHQuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRG9jdW1lbnQqIGltcGwsIGJvb2wgZm9yY2VO
ZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFNWR0RvY3VtZW50Ojp0b1Y4
SGVscGVyKGltcGwsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBpZiAoIVY4SXNvbGF0ZWRDb250ZXh0
OjpnZXRFbnRlcmVkKCkpIHsKKyAgICAgICAgaWYgKFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUoaW1wbC0+ZnJhbWUoKSkpCisgICAgICAgICAgICBwcm94eS0+d2luZG93U2hlbGwo
KS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOworICAgIH0KKyAgICByZXR1cm4gd3Jh
cHBlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTM3KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgog
I2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhMb2NhdGlvbi5o
IgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMzU4
LDUgKzM1OSwxOCBAQAogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJh
bWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KExvY2F0aW9uKiBpbXBsKQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkgeworICAgICAgICB3cmFwcGVyID0gVjhMb2NhdGlvbjo6dG9WOEhlbHBlcihp
bXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9N
V3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2lu
ZG93Ojpsb2NhdGlvbkluZGV4LCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiA1MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVj
dEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw2IEBACiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0
dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0g
ICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0g
VjhDbGFzc0luZGV4OjpOT0RFKTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gVjhIVE1MU2Vs
ZWN0RWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSktPml0ZW0oaW5kZXgpOwogICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVT
aGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVjhTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJWOENTU1N0eWxl
U2hlZXQuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTdHlsZVNoZWV0KiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlzQ1NTU3R5
bGVTaGVldCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0
Kj4oaW1wbCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4U3R5bGVT
aGVldDo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNlIGZy
b20gc3R5bGVzaGVldCBvYmplY3QgdG8gaXRzIG93bmVyIG5vZGUuCisgICAgTm9kZSogb3duZXJO
b2RlID0gaW1wbC0+b3duZXJOb2RlKCk7CisgICAgaWYgKG93bmVyTm9kZSAmJiAhd3JhcHBlci5J
c0VtcHR5KCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QodG9WOChvd25lck5vZGUpKTsKKyAgICAgICAgd3JhcHBl
ci0+U2V0SW50ZXJuYWxGaWVsZChWOFN0eWxlU2hlZXQ6Om93bmVyTm9kZUluZGV4LCBvd25lcik7
CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5j
cHAJKHJldmlzaW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0
b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOFBy
b3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5LDQgKzEwMCwxNyBAQAogICAgIHJl
dHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9u
bHkoKSwgaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChIaXN0b3J5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9N
T2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgeworICAg
ICAgICB3cmFwcGVyID0gVjhIaXN0b3J5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5X
aW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Omhpc3RvcnlJbmRleCwg
d3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29s
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDb25zb2xlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIlY4Q29uc29sZS5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8djguaD4KIApAQCAtNTQsNCArNTQsMTcgQEAKICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChD
b25zb2xlKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxs
KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFw
KCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICB3cmFw
cGVyID0gVjhDb25zb2xlOjp0b1Y4SGVscGVyKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKQorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZl
cmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OmNvbnNvbGVJbmRleCwgd3JhcHBlcik7
CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1
c3RvbS5jcHAJKHJldmlzaW9uIDUzOTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjxOb2RlPiBvYmplY3QsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3N0
YXRpYyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3QoUGFzc1JlZlB0cjxO
b2RlPiBvYmplY3QsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKIHsKICAgICBpZiAoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS0+ZXhjZXB0aW9uKCkp
OwpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRy
PE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnBhcmVudE5vZGUoJnN0YXRlKTsKLSAgICByZXR1
cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRy
PE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmZpcnN0Q2hpbGQoJnN0YXRlKTsKLSAgICByZXR1
cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRyZWVXYWxrZXI6Omxhc3RDaGlsZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CkBAIC04Miw3ICs4Miw3IEBACiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8
Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+bGFzdENoaWxkKCZzdGF0ZSk7Ci0gICAgcmV0dXJu
IHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChy
ZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhU
cmVlV2Fsa2VyOjpuZXh0Tm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC05Miw3ICs5Miw3IEBACiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9k
ZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+bmV4dE5vZGUoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3Vs
dC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVX
YWxrZXI6OnByZXZpb3VzTm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC0xMDIsNyArMTAyLDcgQEAKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxO
b2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5wcmV2aW91c05vZGUoJnN0YXRlKTsKLSAgICByZXR1
cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVm
UHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPm5leHRTaWJsaW5nKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9i
amVjdChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsK
ICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+cHJldmlvdXNTaWJsaW5nKCZz
dGF0ZSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICBy
ZXR1cm4gdG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
VW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1
MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFy
cmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1
cm4gc2V0V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkSW50QXJyYXksIFY4V2ViR0xVbnNpZ25lZElu
dEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWSk7CiB9CiAK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMVW5zaWduZWRJbnRBcnJheSogaW1wbCkK
K3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4V2ViR0xVbnNpZ25lZEludEFycmF5Ojp0b1Y4
SGVscGVyKGltcGwpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBw
ZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRk
cmVzcygpLCB2ODo6a0V4dGVybmFsVW5zaWduZWRJbnRBcnJheSwgaW1wbC0+bGVuZ3RoKCkpOwor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTVkdFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24iKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UiKSByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxTVkd0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSIpIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PFNWR3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUyIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0lOQ0xVRElORyIpIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFNWR0JVVCBOT1QKKyAqIExJTUlURUQgVE8iKSByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNUIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZH
SU5ESVJFQ1QiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdJTkNJREVOVEFMLAorICogU1BF
Q0lBTCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0VYRU1QTEFSWSIpIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFNWR09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIikgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQlVUIE5PVAorICogTElNSVRFRCBUTyIpIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFNWR1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R09SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR1dIRVRIRVIgSU4gQ09OVFJBQ1QiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdTVFJJ
Q1QgTElBQklMSVRZIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
U1ZHRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhTVkdFbGVtZW50LmgiCisKKyNp
ZiBFTkFCTEUoU1ZHKQorCisjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCisjaW5jbHVkZSAiVjhT
VkdBbmltYXRlQ29sb3JFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdBbmltYXRlRWxlbWVudC5o
IgorI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJW
OFNWR1NldEVsZW1lbnQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVk
ZSAiVjhTVkdGRUJsZW5kRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgiCisj
aW5jbHVkZSAiVjhTVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJWOFNWR0ZFRmxvb2RFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGRUZ1bmNBRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlY4U1ZHRkVGdW5jQkVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0ZF
RnVuY0dFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGRUZ1bmNSRWxlbWVudC5oIgorI2luY2x1
ZGUgIlY4U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGRUltYWdl
RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHRkVNZXJnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJW
OFNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHRkVPZmZzZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhT
VkdGRVBvaW50TGlnaHRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJWOFNWR0ZFVGlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0ZpbHRlckVsZW1lbnQuaCIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJWOFNWR0ZvbnRGYWNlRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlY4U1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGb250
RmFjZU5hbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdGb250RmFjZVNyY0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJWOFNWR0ZvbnRGYWNlVXJpRWxlbWVudC5oIgorI2VuZGlmCisKKyNpZiBFTkFC
TEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQorI2luY2x1ZGUgIlY4U1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWR19VU0UpCisjaW5jbHVkZSAiVjhTVkdVc2VF
bGVtZW50LmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlY4U1ZHQUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJWOFNWR0FsdEdseXBoRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHQ2lyY2xlRWxlbWVudC5o
IgorI2luY2x1ZGUgIlY4U1ZHQ2xpcFBhdGhFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdDdXJz
b3JFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdEZWZzRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4
U1ZHRGVzY0VsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0VsbGlwc2VFbGVtZW50LmgiCisjaW5j
bHVkZSAiVjhTVkdHRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHR2x5cGhFbGVtZW50LmgiCisj
aW5jbHVkZSAiVjhTVkdJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR0xpbmVFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNsdWRlICJW
OFNWR01hcmtlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR01hc2tFbGVtZW50LmgiCisjaW5j
bHVkZSAiVjhTVkdNZXRhZGF0YUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhTVkdQYXR0ZXJuRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHUG9s
eWdvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR1BvbHlsaW5lRWxlbWVudC5oIgorI2luY2x1
ZGUgIlY4U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdSZWN0RWxl
bWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHU2Ny
aXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHU3RvcEVsZW1lbnQuaCIKKyNpbmNsdWRlICJW
OFNWR1N0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHU3dpdGNoRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlY4U1ZHU3ltYm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHVFJlZkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJWOFNWR1RTcGFuRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4U1ZHVGV4dEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJWOFNWR1RleHRQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4
U1ZHVGl0bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhTVkdWaWV3RWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR0VsZW1lbnQq
IGltcGwsIGJvb2wgZm9yY2VOZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcgdGFnID0gaW1wbC0+bG9j
YWxOYW1lKCk7CisjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCisgICAgaWYgKHRhZyA9PSAiYW5p
bWF0ZUNvbG9yIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJhbmltYXRlIikgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiYW5pbWF0
ZVRyYW5zZm9ybSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gInNldCIpIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PFNWR1NldEVsZW1lbnQqPihpbXBsKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoRklMVEVS
UykKKyAgICBpZiAodGFnID09ICJmZUJsZW5kIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZH
RkVCbGVuZEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZmVDb2xvck1hdHJpeCIp
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Kj4oaW1wbCkp
OworICAgIGlmICh0YWcgPT0gImZlQ29tcG9uZW50VHJhbnNmZXIiKSByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAo
dGFnID09ICJmZUNvbXBvc2l0ZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9z
aXRlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmZURpZmZ1c2VMaWdodGluZyIp
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCo+KGlt
cGwpKTsKKyAgICBpZiAodGFnID09ICJmZURpc3BsYWNlbWVudE1hcCIpIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAo
dGFnID09ICJmZURpc3RhbnRMaWdodCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmZUZsb29kIikgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRkVGbG9vZEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYg
KHRhZyA9PSAiZmVGdW5jQSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZFRnVuY0FFbGVt
ZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImZlRnVuY0IiKSByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxTVkdGRUZ1bmNCRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmZUZ1
bmNHIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRkVGdW5jR0VsZW1lbnQqPihpbXBsKSk7
CisgICAgaWYgKHRhZyA9PSAiZmVGdW5jUiIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZF
RnVuY1JFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImZlR2F1c3NpYW5CbHVyIikg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Kj4oaW1wbCkp
OworICAgIGlmICh0YWcgPT0gImZlSW1hZ2UiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdG
RUltYWdlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmZU1lcmdlIikgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRh
ZyA9PSAiZmVNZXJnZU5vZGUiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZmVNb3JwaG9sb2d5IikgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCo+KGltcGwpKTsKKyAgICBp
ZiAodGFnID09ICJmZU9mZnNldCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0ZFT2Zmc2V0
RWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmZVBvaW50TGlnaHQiKSByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxTVkdGRVBvaW50TGlnaHRFbGVtZW50Kj4oaW1wbCkpOworICAgIGlm
ICh0YWcgPT0gImZlU3BlY3VsYXJMaWdodGluZyIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZmVT
cG90TGlnaHQiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdGRVNwb3RMaWdodEVsZW1lbnQq
PihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZmVUaWxlIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8U1ZHRkVUaWxlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmZVR1cmJ1bGVu
Y2UiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Kj4oaW1w
bCkpOworICAgIGlmICh0YWcgPT0gImZpbHRlciIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R0ZpbHRlckVsZW1lbnQqPihpbXBsKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGlmICh0YWcgPT0gImZvbnQtZmFjZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0Zv
bnRGYWNlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJmb250LWZhY2UtZm9ybWF0
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50Kj4oaW1w
bCkpOworICAgIGlmICh0YWcgPT0gImZvbnQtZmFjZS1uYW1lIikgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8U1ZHRm9udEZhY2VOYW1lRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJm
b250LWZhY2Utc3JjIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRm9udEZhY2VTcmNFbGVt
ZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImZvbnQtZmFjZS11cmkiKSByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdGb250RmFjZVVyaUVsZW1lbnQqPihpbXBsKSk7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQorICAgIGlmICh0YWcgPT0gImZvcmVpZ25PYmpl
Y3QiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdGb3JlaWduT2JqZWN0RWxlbWVudCo+KGlt
cGwpKTsKKyNlbmRpZgorI2lmIEVOQUJMRShTVkdfVVNFKQorICAgIGlmICh0YWcgPT0gInVzZSIp
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihpbXBsKSk7CisjZW5kaWYK
KyAgICBpZiAodGFnID09ICJhIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQUVsZW1lbnQq
PihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiYWx0R2x5cGgiKSByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiY2lyY2xl
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQ2lyY2xlRWxlbWVudCo+KGltcGwpKTsKKyAg
ICBpZiAodGFnID09ICJjbGlwUGF0aCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0NsaXBQ
YXRoRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJjdXJzb3IiKSByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdDdXJzb3JFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0g
ImRlZnMiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdEZWZzRWxlbWVudCo+KGltcGwpKTsK
KyAgICBpZiAodGFnID09ICJkZXNjIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRGVzY0Vs
ZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAiZWxsaXBzZSIpIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFNWR0VsbGlwc2VFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gImci
KSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdHRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAo
dGFnID09ICJnbHlwaCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0dseXBoRWxlbWVudCo+
KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJpbWFnZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR0ltYWdlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJsaW5lYXJHcmFkaWVu
dCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCo+KGlt
cGwpKTsKKyAgICBpZiAodGFnID09ICJsaW5lIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZH
TGluZUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAibWFya2VyIikgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09
ICJtYXNrIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihpbXBsKSk7
CisgICAgaWYgKHRhZyA9PSAibWV0YWRhdGEiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdN
ZXRhZGF0YUVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAicGF0aCIpIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0g
InBhdHRlcm4iKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KGlt
cGwpKTsKKyAgICBpZiAodGFnID09ICJwb2x5bGluZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR1BvbHlsaW5lRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJwb2x5Z29uIikg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUG9seWdvbkVsZW1lbnQqPihpbXBsKSk7CisgICAg
aWYgKHRhZyA9PSAicmFkaWFsR3JhZGllbnQiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAicmVjdCIpIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0
YWcgPT0gInNjcmlwdCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1NjcmlwdEVsZW1lbnQq
PihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAic3RvcCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR1N0b3BFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0gInN0eWxlIikgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8U1ZHU3R5bGVFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcg
PT0gInN2ZyIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihpbXBsKSk7
CisgICAgaWYgKHRhZyA9PSAic3dpdGNoIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHU3dp
dGNoRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJzeW1ib2wiKSByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdTeW1ib2xFbGVtZW50Kj4oaW1wbCkpOworICAgIGlmICh0YWcgPT0g
InRleHQiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGltcGwpKTsK
KyAgICBpZiAodGFnID09ICJ0ZXh0UGF0aCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1Rl
eHRQYXRoRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09ICJ0aXRsZSIpIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFNWR1RpdGxlRWxlbWVudCo+KGltcGwpKTsKKyAgICBpZiAodGFnID09
ICJ0cmVmIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHVFJlZkVsZW1lbnQqPihpbXBsKSk7
CisgICAgaWYgKHRhZyA9PSAidHNwYW4iKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdUU3Bh
bkVsZW1lbnQqPihpbXBsKSk7CisgICAgaWYgKHRhZyA9PSAidmlldyIpIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFNWR1ZpZXdFbGVtZW50Kj4oaW1wbCkpOworICAgIHJldHVybiBWOFNWR0VsZW1l
bnQ6OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VOZXdPYmplY3QpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lv
biA1MzkzNykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE2IEBACiAgICAgcmV0dXJuIHNl
dFdlYkdMQXJyYXk8V2ViR0xJbnRBcnJheSwgVjhXZWJHTEludEFycmF5PihhcmdzLCBWOENsYXNz
SW5kZXg6OldFQkdMSU5UQVJSQVkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChX
ZWJHTEludEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhXZWJHTElu
dEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisg
ICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShp
bXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsSW50QXJyYXksIGltcGwtPmxlbmd0aCgp
KTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUz
OTM3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNiBAQAogICAgIHJldHVybiBzZXRX
ZWJHTEFycmF5PFdlYkdMU2hvcnRBcnJheSwgVjhXZWJHTFNob3J0QXJyYXk+KGFyZ3MsIFY4Q2xh
c3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoV2ViR0xTaG9ydEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0
dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhX
ZWJHTFNob3J0QXJyYXk6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1w
dHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJy
YXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCksIHY4OjprRXh0ZXJuYWxTaG9ydEFycmF5LCBpbXBs
LT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4U2NyZWVuLmgi
CisKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNjcmVl
biogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdl
dChpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgd3JhcHBlciA9
IFY4U2NyZWVuOjp0b1Y4SGVscGVyKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uo
aW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OnNjcmVlbkluZGV4LCB3cmFwcGVyKTsKKyAgICB9
CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVjhCYXJJbmZvLmgiCisKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KEJhckluZm8qIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBn
ZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7
CisgICAgICAgIHdyYXBwZXIgPSBWOEJhckluZm86OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGlt
cGwtPmZyYW1lKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGltcGwtPnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKKyAgICAgICAgICAgICAgICBWOERPTVdy
YXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OmxvY2F0
aW9uYmFySW5kZXgsIHdyYXBwZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgorICAgICAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6
c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6bWVudWJhckluZGV4
LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmFy
SW5mbzo6UGVyc29uYWxiYXI6CisgICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRk
ZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93OjpwZXJzb25hbGJhckluZGV4LCB3
cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmFySW5m
bzo6U2Nyb2xsYmFyczoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnNjcm9sbGJhcnNJbmRleCwgd3JhcHBl
cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJhckluZm86OlN0
YXR1c2JhcjoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1Jl
ZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2JhckluZGV4LCB3cmFwcGVyKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6VG9vbGJhcjoK
KyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShm
cmFtZSwgVjhET01XaW5kb3c6OnRvb2xiYXJJbmRleCwgd3JhcHBlcik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHdy
YXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1Mzkz
NykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02NTAsNyArNjUw
LDEwIEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRUaHJlYWRET01EYXRhLmgnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0ckN1c3RvbS5jcHAnLAor
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhckluZm9DdXN0b20uY3BwJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5o
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFy
cmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHAnLApAQCAtNjYzLDcgKzY2NiwxMCBAQAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCisg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20u
Y3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3Vz
dG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVy
LmNwcCcsCkBAIC02ODksNiArNjk1LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01QYXJzZXJDb25zdHJ1Y3Rv
ci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9t
LmNwcCcsCkBAIC03MDUsNiArNzEyLDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEYXRhR3JpZEVsZW1lbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50
Q3VzdG9tLmNwcCcsCkBAIC03MzgsMTAgKzc0NiwxNSBAQAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAnLAorICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdMZW5ndGhDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNw
cCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2hhcmVkV29ya2VyQ3VzdG9tLmNw
cCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRMaXN0Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdENTU01h
dHJpeENvbnN0cnVjdG9yLmNwcCcsCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5t
awo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawkocmV2aXNpb24g
NTM5MzcpCisrKyBXZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpA
QCAtODcsOCArODcsMTMgQEAKIAlcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3Jr
ZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcCBcCisg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENTU1J1bGVDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhD
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1Zh
bHVlQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxB
cnJheUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3Vz
dG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcCBcCiAJ
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20uY3BwIFwKQEAgLTEwMiw2ICsx
MDcsNyBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5jcHAgXAog
CWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwIFwKIAli
aW5kaW5ncy92OC9jdXN0b20vVjhET01QYXJzZXJDb25zdHJ1Y3Rvci5jcHAgXAorICAgIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFH
cmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNl
Q3VzdG9tLmNwcCBcCkBAIC0xMjAsNiArMTI2LDcgQEAKIAliaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEYXRh
R3JpZEVsZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1l
bnRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3Rv
bS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAg
XAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwIFwKIAli
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCBcCkBAIC0x
NDEsMjAgKzE0OCwyNSBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVGaWx0ZXJDdXN0b20u
Y3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwIFwKIAli
aW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFJl
c3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFu
c2FjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3Rv
bS5jcHAKIAogaWZlcSAoJChFTkFCTEVfU1ZHKSwgdHJ1ZSkKIExPQ0FMX1NSQ19GSUxFUyArPSBc
CisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwIFwKKyAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0
cml4Q3VzdG9tLmNwcAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20u
Y3BwIFwKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxFUyArPSBcCiAJYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFn
ZUN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20u
Y3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAgXAog
CWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47576</attachid>
            <date>2010-01-27 16:51:14 -0800</date>
            <delta_ts>2010-01-29 10:39:19 -0800</delta_ts>
            <desc>toV8() Attempt #3.0</desc>
            <filename>tov8_2.txt</filename>
            <type>text/plain</type>
            <size>111212</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw4IEBACiB1c2UgU3dpdGNoOwogCiBt
eSAkcHJpbnRGYWN0b3J5ID0gMDsgCi1teSAkcHJpbnRXcmFwcGVyRmFjdG9yeSA9IDA7CitteSAk
cHJpbnRXcmFwcGVyRmFjdG9yeSA9IDA7IAorbXkgJHByaW50V3JhcHBlckZhY3RvcnlWOCA9IDA7
IAogbXkgJHRhZ3NGaWxlID0gIiI7CiBteSAkYXR0cnNGaWxlID0gIiI7CiBteSAkb3V0cHV0RGly
ID0gIi4iOwpAQCAtNTUsNyArNTYsOCBAQAogICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXRE
aXIsCiAgICAgJ2V4dHJhRGVmaW5lcz1zJyA9PiBcJGV4dHJhRGVmaW5lcywKICAgICAncHJlcHJv
Y2Vzc29yPXMnID0+IFwkcHJlcHJvY2Vzc29yLAotICAgICd3cmFwcGVyRmFjdG9yeScgPT4gXCRw
cmludFdyYXBwZXJGYWN0b3J5CisgICAgJ3dyYXBwZXJGYWN0b3J5JyA9PiBcJHByaW50V3JhcHBl
ckZhY3RvcnksCisgICAgJ3dyYXBwZXJGYWN0b3J5VjgnID0+IFwkcHJpbnRXcmFwcGVyRmFjdG9y
eVY4CiApOwogCiBkaWUgIllvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mIC0tdGFncyA8
ZmlsZT4gb3IgLS1hdHRycyA8ZmlsZT4iIHVubGVzcyAobGVuZ3RoKCR0YWdzRmlsZSkgfHwgbGVu
Z3RoKCRhdHRyc0ZpbGUpKTsKQEAgLTcxLDcgKzczLDcgQEAKIG1rcGF0aCgkb3V0cHV0RGlyKTsK
IG15ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5h
bWVzIjsKIG15ICRmYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudEZhY3RvcnkiOwotbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGggPSAiJG91
dHB1dERpci9KUyRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnkiOwor
bXkgJHdyYXBwZXJGYWN0b3J5RmlsZU5hbWUgPSAiJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnRXcmFwcGVyRmFjdG9yeSI7CiAKIHByaW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0
aC5oIik7CiBwcmludE5hbWVzQ3BwRmlsZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7CkBAIC04MSwx
MSArODMsMTkgQEAKICAgICBwcmludEZhY3RvcnlIZWFkZXJGaWxlKCIkZmFjdG9yeUJhc2VQYXRo
LmgiKTsKIH0KIAorZGllICJZb3UgY2Fubm90IHNwZWNpZnkgYm90aCAtLXdyYXBwZXJGYWN0b3J5
IGFuZCAtLXdyYXBwZXJGYWN0b3J5VjgiIGlmICRwcmludFdyYXBwZXJGYWN0b3J5ICYmICRwcmlu
dFdyYXBwZXJGYWN0b3J5Vjg7CitteSAkd3JhcHBlckZhY3RvcnlUeXBlID0gIiI7CiBpZiAoJHBy
aW50V3JhcHBlckZhY3RvcnkpIHsKLSAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgiJHdy
YXBwZXJGYWN0b3J5QmFzZVBhdGguY3BwIik7Ci0gICAgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRl
ckZpbGUoIiR3cmFwcGVyRmFjdG9yeUJhc2VQYXRoLmgiKTsKKyAgICAkd3JhcHBlckZhY3RvcnlU
eXBlID0gIkpTIjsKK30gZWxzaWYgKCRwcmludFdyYXBwZXJGYWN0b3J5VjgpIHsKKyAgICAkd3Jh
cHBlckZhY3RvcnlUeXBlID0gIlY4IjsKIH0KIAoraWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUpIHsK
KyAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgkb3V0cHV0RGlyLCAkd3JhcHBlckZhY3Rv
cnlUeXBlLCAkd3JhcHBlckZhY3RvcnlGaWxlTmFtZSk7CisgICAgcHJpbnRXcmFwcGVyRmFjdG9y
eUhlYWRlckZpbGUoJG91dHB1dERpciwgJHdyYXBwZXJGYWN0b3J5VHlwZSwgJHdyYXBwZXJGYWN0
b3J5RmlsZU5hbWUpOworfQorCiAjIyMgSGFzaCBpbml0aWFsaXphdGlvbgogCiBzdWIgZGVmYXVs
dFRhZ1Byb3BlcnR5SGFzaApAQCAtNTU1LDYgKzU2NSw3IEBACiBzdWIgcHJpbnRKU0VsZW1lbnRJ
bmNsdWRlcwogewogICAgIG15ICRGID0gc2hpZnQ7CisgICAgbXkgJHdyYXBwZXJGYWN0b3J5VHlw
ZSA9IHNoaWZ0OwogCiAgICAgbXkgJXRhZ3NTZWVuOwogICAgIGZvciBteSAkdGFnTmFtZSAoc29y
dCBrZXlzICV0YWdzKSB7CkBAIC01NjIsNyArNTczLDcgQEAKICAgICAgICAgbmV4dCBpZiBkZWZp
bmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIo
JHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCi0g
ICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMke0pTSW50ZXJmYWNlTmFtZX0uaFwiXG4iOwor
ICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcIiR7d3JhcHBlckZhY3RvcnlUeXBlfSR7SlNJbnRl
cmZhY2VOYW1lfS5oXCJcbiI7CiAgICAgfQogfQogCkBAIC03OTksNiArODEwLDcgQEAKIHN1YiBw
cmludFdyYXBwZXJGdW5jdGlvbnMKIHsKICAgICBteSAkRiA9IHNoaWZ0OworICAgIG15ICR3cmFw
cGVyRmFjdG9yeVR5cGUgPSBzaGlmdDsKIAogICAgIG15ICV0YWdzU2VlbjsKICAgICBmb3IgbXkg
JHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgewpAQCAtODEzLDEwICs4MjUsMTEgQEAKICAgICAg
ICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iOwogICAgICAgICB9
CiAKLSAgICAgICAgIyBIYWNrIGZvciB0aGUgbWVkaWEgdGFncwotICAgICAgICAjIEZJWE1FOiBU
aGlzIHNob3VsZCBoYXZlIGJlZW4gZG9uZSB2aWEgYSBDdXN0b21XcmFwcGVyIGF0dHJpYnV0ZSBh
bmQgYSBzZXBhcmF0ZSAqQ3VzdG9tIGZpbGUuCi0gICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17
d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7Ci0gICAgICAgICAgICBwcmludCBGIDw8
RU5ECisgICAgICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsKKyAgICAgICAg
ICAgICMgSGFjayBmb3IgdGhlIG1lZGlhIHRhZ3MKKyAgICAgICAgICAgICMgRklYTUU6IFRoaXMg
c2hvdWxkIGhhdmUgYmVlbiBkb25lIHZpYSBhIEN1c3RvbVdyYXBwZXIgYXR0cmlidXRlIGFuZCBh
IHNlcGFyYXRlICpDdXN0b20gZmlsZS4KKyAgICAgICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17
d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7CisgICAgICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAogc3RhdGljIEpTTm9kZSogY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgaWYgKCFN
ZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkKQEAgLTgyNiw4ICs4MzksOCBAQAogCiBFTkQKIDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogc3RhdGljIEpTTm9kZSog
Y3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNl
fUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIENSRUFURV9ET01fTk9ERV9XUkFQUEVS
KGV4ZWMsIGdsb2JhbE9iamVjdCwgJHtKU0ludGVyZmFjZU5hbWV9LCBlbGVtZW50LmdldCgpKTsK
QEAgLTgzNSw2ICs4NDgsMTYgQEAKIAogRU5ECiA7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgeworICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNl
TmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQp
KTsKK30KKworRU5ECis7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7
CkBAIC04NDUsOSArODY4LDExIEBACiAKIHN1YiBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZQog
ewotICAgIG15ICRjcHBQYXRoID0gc2hpZnQ7CisgICAgbXkgJG91dHB1dERpciA9IHNoaWZ0Owor
ICAgIG15ICR3cmFwcGVyRmFjdG9yeVR5cGUgPSBzaGlmdDsKKyAgICBteSAkd3JhcHBlckZhY3Rv
cnlGaWxlTmFtZSA9IHNoaWZ0OwogICAgIG15ICRGOwotICAgIG9wZW4gRiwgIj4kY3BwUGF0aCI7
CisgICAgb3BlbiBGLCAiPiIgLiAkb3V0cHV0RGlyIC4gIi8iIC4gJHdyYXBwZXJGYWN0b3J5VHlw
ZSAuICR3cmFwcGVyRmFjdG9yeUZpbGVOYW1lIC4gIi5jcHAiOwogCiAgICAgcHJpbnRMaWNlbnNl
SGVhZGVyKCRGKTsKIApAQCAtODU1LDM4ICs4ODAsNzMgQEAKIAogICAgIHByaW50IEYgIiNpZiAk
cGFyYW1ldGVyc3tndWFyZEZhY3RvcnlXaXRofVxuXG4iIGlmICRwYXJhbWV0ZXJze2d1YXJkRmFj
dG9yeVdpdGh9OwogCi0gICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJKUyRwYXJhbWV0ZXJze25hbWVz
cGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnkuaFwiXG4iOworICAgIHByaW50IEYgIiNpbmNsdWRl
IFwiJHdyYXBwZXJGYWN0b3J5VHlwZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBl
ckZhY3RvcnkuaFwiXG4iOwogCi0gICAgcHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRik7CisgICAg
cHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRiwgJHdyYXBwZXJGYWN0b3J5VHlwZSk7CiAKICAgICBw
cmludCBGICJcbiNpbmNsdWRlIFwiJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5hbWVzLmhcIlxuXG4i
OwogCiAgICAgcHJpbnRFbGVtZW50SW5jbHVkZXMoJEYpOwogCiAgICAgcHJpbnQgRiAiXG4jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPlxuXG4iOwotICAgIAotICAgIHByaW50IEYgPDxFTkQK
KworICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsgICAgCisgICAgICAgIHBy
aW50IEYgPDxFTkQKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CitFTkQKKzsKKyAgICB9IGVsc2lmICgk
d3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAorI2lu
Y2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQuaCIKKyAgICAgICAgCisjaW5j
bHVkZSA8djguaD4KK0VORAorOworICAgIH0KIAorICAgIHByaW50IEYgPDxFTkQKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5h
bWVzOwogCitFTkQKKzsKKyAgICBpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiSlMiKSB7Cisg
ICAgICAgIHByaW50IEYgPDxFTkQKIHR5cGVkZWYgSlNOb2RlKiAoKkNyZWF0ZSRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+KTsKIAog
RU5ECiA7CisgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CisgICAg
ICAgIHByaW50IEYgPDxFTkQKK3R5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICgqQ3JlYXRl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50Kik7CiAKLSAgICBwcmludFdyYXBwZXJGdW5jdGlvbnMoJEYpOwor
RU5ECis7CisgICAgfQogCi0gICAgcHJpbnQgRiA8PEVORAorICAgIHByaW50V3JhcHBlckZ1bmN0
aW9ucygkRiwgJHdyYXBwZXJGYWN0b3J5VHlwZSk7CisKKyAgICBpZiAoJHdyYXBwZXJGYWN0b3J5
VHlwZSBlcSAiSlMiKSB7CisgICAgICAgIHByaW50IEYgPDxFTkQKIEpTTm9kZSogY3JlYXRlSlMk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVs
ZW1lbnQ+IGVsZW1lbnQpCi17ICAgCit7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkF0
b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBw
ZXJGdW5jdGlvbj4gRnVuY3Rpb25NYXA7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlv
bk1hcCwgbWFwLCAoKSk7CiAgICAgaWYgKG1hcC5pc0VtcHR5KCkpIHsKIEVORAogOworICAgIH0g
ZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgeworICAgICAgICBwcmludCBGIDw8
RU5ECit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgYm9vbCBmb3Jj
ZU5ld09iamVjdCkKK3sKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBGdW5jdGlvbk1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZ1bmN0aW9uTWFwLCBtYXAs
ICgpKTsKKyAgICBpZiAobWFwLmlzRW1wdHkoKSkgeworRU5ECis7CisgICAgfQogCiAgICAgZm9y
IG15ICR0YWcgKHNvcnQga2V5cyAldGFncykgewogICAgICAgICAjIERvIG5vdCBhZGQgdGhlIG5h
bWUgdG8gdGhlIG1hcCBpZiBpdCBkb2VzIG5vdCBoYXZlIGEgSlMgd3JhcHBlciBjb25zdHJ1Y3Rv
ciBvciB1c2VzIHRoZSBkZWZhdWx0IHdyYXBwZXIuCkBAIC05MTAsOCArOTcwLDIyIEBACiAgICAg
fQogICAgIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
IGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9IG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKTsKICAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9uKQorRU5ECis7CisgICAgaWYgKCR3
cmFwcGVyRmFjdG9yeVR5cGUgZXEgIkpTIikgeworICAgICAgICBwcmludCBGIDw8RU5ECiAgICAg
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KTsKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCwgZWxlbWVudC5nZXQoKSk7CitFTkQK
KzsKKyAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAg
cHJpbnQgRiA8PEVORAorICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlckZ1bmN0aW9uKGVsZW1l
bnQpOworICAgIHJldHVybiBWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Ojp0b1Y4SGVs
cGVyKGVsZW1lbnQsIGZvcmNlTmV3T2JqZWN0KTsKK0VORAorOworICAgIH0KKyAgICBwcmludCBG
IDw8RU5ECiB9CiAKIH0KQEAgLTkyNiwxOCArMTAwMCwyMSBAQAogCiBzdWIgcHJpbnRXcmFwcGVy
RmFjdG9yeUhlYWRlckZpbGUKIHsKLSAgICBteSAkaGVhZGVyUGF0aCA9IHNoaWZ0OworICAgIG15
ICRvdXRwdXREaXIgPSBzaGlmdDsKKyAgICBteSAkd3JhcHBlckZhY3RvcnlUeXBlID0gc2hpZnQ7
CisgICAgbXkgJHdyYXBwZXJGYWN0b3J5RmlsZU5hbWUgPSBzaGlmdDsKICAgICBteSAkRjsKLSAg
ICBvcGVuIEYsICI+JGhlYWRlclBhdGgiOworICAgIG9wZW4gRiwgIj4iIC4gJG91dHB1dERpciAu
ICIvIiAuICR3cmFwcGVyRmFjdG9yeVR5cGUgLiAkd3JhcHBlckZhY3RvcnlGaWxlTmFtZSAuICIu
aCI7CiAKICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogCi0gICAgcHJpbnQgRiAiI2lmbmRl
ZiBKUyRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKLSAg
ICBwcmludCBGICIjZGVmaW5lIEpTJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVy
RmFjdG9yeV9oXG5cbiI7CisgICAgcHJpbnQgRiAiI2lmbmRlZiAkd3JhcHBlckZhY3RvcnlUeXBl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHBy
aW50IEYgIiNkZWZpbmUgJHdyYXBwZXJGYWN0b3J5VHlwZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1F
bGVtZW50V3JhcHBlckZhY3RvcnlfaFxuXG4iOwogCiAgICAgcHJpbnQgRiAiI2lmICRwYXJhbWV0
ZXJze2d1YXJkRmFjdG9yeVdpdGh9XG4iIGlmICRwYXJhbWV0ZXJze2d1YXJkRmFjdG9yeVdpdGh9
OwogCi0gICAgcHJpbnQgRiA8PEVORAorICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJK
UyIpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtOTU2LDEwICsxMDMzLDIzIEBACiAgCiBFTkQKIDsKKyAgICB9
IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAgcHJpbnQgRiA8
PEVORAorI2luY2x1ZGUgPHY4Lmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
ICRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50OworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUVsZW1lbnQqLCBib29sKTsKK30KK0VORAorOworICAgIH0KKwogICAgIHByaW50IEYg
IiNlbmRpZiAvLyAkcGFyYW1ldGVyc3tndWFyZEZhY3RvcnlXaXRofVxuXG4iIGlmICRwYXJhbWV0
ZXJze2d1YXJkRmFjdG9yeVdpdGh9OwogCi0gICAgcHJpbnQgRiAiI2VuZGlmIC8vIEpTJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYg
IiNlbmRpZiAvLyAkd3JhcHBlckZhY3RvcnlUeXBlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnRXcmFwcGVyRmFjdG9yeV9oXG4iOwogCiAgICAgY2xvc2UgRjsKIH0KSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA1Mzk1
OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAK
KzIwMTAtMDEtMjcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhdIEdlbmVyYXRlIHRv
VjgoKSBjb252ZXJ0ZXIgZm9yIG1vc3QgV2ViQ29yZS0+VjggY29udmVyc2lvbnMsCisgICAgICAg
IGFuZCBkZWZpbmVkIGN1c3RvbSBjb252ZXJ0ZXJzIGluIHRoZWlyIHJlc3BlY3RpdmUgVjg8Y2xh
c3M+Q3VzdG9tLmNwcC4KKyAgICAgICAgCisgICAgICAgIE9sZCBjb252ZXJ0ZXJzIGluIFY4RE9N
V3JhcHBlciB3aWxsIGJlIGRlbGV0ZWQgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2MworCisgICAg
ICAgICogQW5kcm9pZC52OGJpbmRpbmdzLm1rOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhCYXJJbmZvQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q1NTUnVsZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9j
dW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdFbGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRBcnJheUN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDdXN0b20uY3BwOgorCiAyMDEwLTAxLTI3ICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA1Mzk1OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw5ICszMDIsOCBAQAogICAgICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9IVE1MTmFtZXMuY3BwJywK
ICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTE5hbWVz
LmgnLAogICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9IVE1M
RWxlbWVudEZhY3RvcnkuY3BwJywKLSAgICAgICAgICAgICMgUGFzcyAtLXdyYXBwZXJGYWN0b3J5
IHRvIG1ha2VfbmFtZXMgdG8gZ2V0IHRoZXNlIChKU0MgYnVpbGQ/KQotICAgICAgICAgICAgIyc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0
b3J5LmNwcCcsCi0gICAgICAgICAgICAjJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtp
dC9KU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCcsCisgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0L1Y4SFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAn
LAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9WOEhUTUxF
bGVtZW50V3JhcHBlckZhY3RvcnkuaCcsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnYWN0aW9u
JzogWwogICAgICAgICAgICAgJ3B5dGhvbicsCkBAIC0zMTQsNiArMzEzLDcgQEAKICAgICAgICAg
ICAgICc8QChfaW5wdXRzKScsCiAgICAgICAgICAgICAnLS0nLAogICAgICAgICAgICAgJy0tZmFj
dG9yeScsCisgICAgICAgICAgICAnLS13cmFwcGVyRmFjdG9yeVY4JywKICAgICAgICAgICAgICct
LWV4dHJhRGVmaW5lcycsICc8KGZlYXR1cmVfZGVmaW5lcyknCiAgICAgICAgICAgXSwKICAgICAg
ICAgfSwKQEAgLTMyOSw5ICszMjksOCBAQAogICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIpL3dlYmtpdC9TVkdOYW1lcy5oJywKICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJraXQvU1ZHRWxlbWVudEZhY3RvcnkuY3BwJywKICAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvU1ZHRWxlbWVudEZhY3RvcnkuaCcs
Ci0gICAgICAgICAgICAjIFBhc3MgLS13cmFwcGVyRmFjdG9yeSB0byBtYWtlX25hbWVzIHRvIGdl
dCB0aGVzZSAoSlNDIGJ1aWxkPykKLSAgICAgICAgICAgICMnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2Via2l0L0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCcsCi0gICAgICAgICAg
ICAjJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9KU1NWR0VsZW1lbnRXcmFwcGVy
RmFjdG9yeS5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvVjhTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwJywKKyAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvVjhTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuaCcs
CiAgICAgICAgICAgXSwKICAgICAgICAgICAnYWN0aW9uJzogWwogICAgICAgICAgICAgJ3B5dGhv
bicsCkBAIC0zNDEsNiArMzQwLDcgQEAKICAgICAgICAgICAgICc8QChfaW5wdXRzKScsCiAgICAg
ICAgICAgICAnLS0nLAogICAgICAgICAgICAgJy0tZmFjdG9yeScsCisgICAgICAgICAgICAnLS13
cmFwcGVyRmFjdG9yeVY4JywKICAgICAgICAgICAgICctLWV4dHJhRGVmaW5lcycsICc8KGZlYXR1
cmVfZGVmaW5lcyknCiAgICAgICAgICAgXSwKICAgICAgICAgfSwKQEAgLTU4Niw2ICs1ODYsOCBA
QAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1NWR0VsZW1lbnRG
YWN0b3J5LmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQv
U1ZHTmFtZXMuY3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtp
dC9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwJywKKyAgICAgICAgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9WOEhUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwJywKKyAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9WOFNWR0VsZW1lbnRXcmFw
cGVyRmFjdG9yeS5jcHAnLAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0L1hMaW5rTmFtZXMuY3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmtpdC9YTUxOU05hbWVzLmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVf
RElSKS93ZWJraXQvWE1MTmFtZXMuY3BwJywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTQg
KzE1NiwxNSBAQAogCiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxl
LXBlci1jbGFzcwogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3Bl
Y2lhbCBjYXNlcy4KLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlw
ZSkgb3IgQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpKSB7Ci0gICAgfSBlbHNpZiAoJHR5cGUg
PX4gL1NWR1BhdGhTZWcvKSB7Ci0gICAgICAgICRqb2luZWROYW1lID0gJHR5cGU7Ci0gICAgICAg
ICRqb2luZWROYW1lID1+IHMvQWJzfFJlbC8vOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2pv
aW5lZE5hbWV9LmgifSA9IDE7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoISRjb2RlR2VuZXJhdG9y
LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIGFuZCAhQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUp
IGFuZCAkdHlwZSBuZSAiRGF0ZSIpIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBz
YW1lIG5hbWVkIGZpbGUKLSAgICAgICAgJGltcGxJbmNsdWRlc3tHZXRJbXBsZW1lbnRhdGlvbkZp
bGVOYW1lKCR7dHlwZX0pfSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7R2V0VjhIZWFkZXJO
YW1lKCR7dHlwZX0pfSA9IDE7CisKKyAgICAgICAgaWYgKCR0eXBlID1+IC9TVkdQYXRoU2VnLykg
eworICAgICAgICAgICAgJGpvaW5lZE5hbWUgPSAkdHlwZTsKKyAgICAgICAgICAgICRqb2luZWRO
YW1lID1+IHMvQWJzfFJlbC8vOworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWRO
YW1lfS5oIn0gPSAxOworICAgICAgICB9CiAgICAgfQogCiAgICAgIyBhZGRpdGlvbmFsIGluY2x1
ZGVzICh0aGluZ3MgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGJpbmRpbmdzIGJ1dCBub3QgdGhlIGhl
YWRlcikKQEAgLTIxMCwxNyArMjExLDYgQEAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xh
c3MgJGltcGxDbGFzc05hbWU7XG5cbiIpIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmlt
YXRlZFR5cGUoJGltcGxDbGFzc05hbWUpOwogfQogCi1zdWIgR2V0SW1wbGVtZW50YXRpb25GaWxl
TmFtZQotewotICAgIG15ICRpZmFjZSA9IHNoaWZ0OwotICAgIHJldHVybiAiRXZlbnQuaCIgaWYg
JGlmYWNlIGVxICJET01UaW1lU3RhbXAiOwotICAgIHJldHVybiAiTmFtZWRBdHRyTWFwLmgiIGlm
ICRpZmFjZSBlcSAiTmFtZWROb2RlTWFwIjsKLSAgICByZXR1cm4gIk5hbWVOb2RlTGlzdC5oIiBp
ZiAkaWZhY2UgZXEgIk5vZGVMaXN0IjsKLSAgICByZXR1cm4gIlhNTEh0dHBSZXF1ZXN0LmgiIGlm
ICRpZmFjZSBlcSAiWE1MSHR0cFJlcXVlc3QiOwotCi0gICAgcmV0dXJuICIke2lmYWNlfS5oIjsK
LX0KLQogIyBJZiB0aGUgbm9kZSBoYXMgYSBbQ29uZGl0aW9uYWw9WFhYXSBhdHRyaWJ1dGUsIHJl
dHVybnMgYW4gIkVOQUJMRShYWFgpIiBzdHJpbmcgZm9yIHVzZSBpbiBhbiAjaWYuCiBzdWIgR2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZwogewpAQCAtMjU4LDcgKzI0OCw2IEBACiAKICAgICAjIEdl
dCBjb3JyZWN0IHBhc3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKICAgICBt
eSAkcG9kVHlwZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsK
LSAgICBteSAkcGFzc1R5cGUgPSAkcG9kVHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RU
eXBlPioiIDogIiRpbXBsQ2xhc3NOYW1lKiI7CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
I2luY2x1ZGUgXCIkcG9kVHlwZS5oXCJcbiIpIGlmICRwb2RUeXBlIGFuZCAoJHBvZFR5cGUgbmUg
ImRvdWJsZSIgYW5kICRwb2RUeXBlIG5lICJmbG9hdCIgYW5kICRwb2RUeXBlIG5lICJSR0JBMzIi
KTsKIApAQCAtMjY4LDE1ICsyNTcsMjMgQEAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2lu
Y2x1ZGUgXCJWOEluZGV4LmhcIlxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2V0SGVh
ZGVyQ2xhc3NJbmNsdWRlKCRpbXBsQ2xhc3NOYW1lKSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlxubmFtZXNwYWNlIFdlYkNvcmUge1xuIik7CisgICAgaWYgKCRwb2RUeXBlKSB7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNs
YXNzIFY4U1ZHUE9EVHlwZVdyYXBwZXI7XG4iKTsKKyAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIlxuY2xhc3MgJGNsYXNzTmFtZSB7XG4iKTsKLSAgICAKLSAgICBteSAkdG9OYXRpdmVS
ZXR1cm5UeXBlID0gR2V0UmV0dXJuVHlwZUZvclRvTmF0aXZlKCRpbnRlcmZhY2VOYW1lKTsKKwor
ICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zKCRpbnRlcmZh
Y2VOYW1lKTsKKyAgICBpZiAoJHBvZFR5cGUpIHsKKyAgICAgICAgJG5hdGl2ZVR5cGUgPSAiVjhT
VkdQT0RUeXBlV3JhcHBlcjwke25hdGl2ZVR5cGV9ID4iOworICAgIH0KKyAgICBteSAkZm9yY2VO
ZXdPYmplY3RQYXJhbWV0ZXIgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIsIGJv
b2wgZm9yY2VOZXdPYmplY3QgPSBmYWxzZSIgOiAiIjsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCA8PEVORCk7CiAKICBwdWJsaWM6CiAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsKLSAgc3RhdGljICR7dG9OYXRpdmVSZXR1cm5U
eXBlfSogdG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgIHN0YXRpYyAke25hdGl2
ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgc3RhdGljIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gdG9WOEhlbHBlcigke25hdGl2ZVR5cGV9KiR7Zm9yY2VOZXdPYmpl
Y3RQYXJhbWV0ZXJ9KTsKIEVORAogCiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJET01XaW5k
b3ciKSB7CkBAIC0zNDAsNyArMzM3LDEzIEBACiAgIGZyaWVuZCBjbGFzcyBWOENsYXNzSW5kZXg7
CiB9OwogCisgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qJHtmb3Jj
ZU5ld09iamVjdFBhcmFtZXRlcn0pOwogRU5ECisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW1wbENs
YXNzTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCR7bmF0aXZlVHlwZX0gPiR7Zm9yY2VO
ZXdPYmplY3RQYXJhbWV0ZXJ9KTsKK0VORAorICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJ9XG5cbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJGNsYXNz
TmFtZSIgLiAiX0hcbiIpOwpAQCAtNjU4LDcgKzY2MSw3IEBACiAgICAgICAgICRhdHRySXNQb2RU
eXBlID0gMDsKICAgICB9CiAKLSAgICBteSAkZ2V0dGVyU3RyaW5nVXNlc0ltcCA9ICRpbXBsQ2xh
c3NOYW1lIG5lICJkb3VibGUiOworICAgIG15ICRnZXR0ZXJTdHJpbmdVc2VzSW1wID0gJGltcGxD
bGFzc05hbWUgbmUgImZsb2F0IjsKIAogICAjIEdldHRlcgogICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsIDw8RU5EKTsKQEAgLTgxNCwxMyArODE3LDE2IEBACiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZVNWR0NvbnRleHRBc3NpZ25tZW50KCRpbXBsQ2xhc3NO
YW1lLCAid3JhcHBlci5nZXQoKSIsICIgICAgIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVTVkdDb250ZXh0UmV0cmlldmFs
KCRpbXBsQ2xhc3NOYW1lLCAiICAgICIpKTsKLSAgICAgICAgICAgICRyZXN1bHQgPSAiVjhQcm94
eTo6d2l0aFNWR0NvbnRleHQoJHJlc3VsdCwgY29udGV4dCkiOworICAgICAgICAgICAgIyBUaGUg
dGVtcGxhdGluZyBhc3NvY2lhdGVkIHdpdGggcGFzc2luZyB3aXRoU1ZHQ29udGV4dCgpJ3MgcmV0
dXJuIHZhbHVlIGRpcmVjdGx5IGludG8gdG9WOCBjYW4gZ2V0IGNvbXBpbGVycyBjb25mdXNlZCwK
KyAgICAgICAgICAgICMgc28ganVzdCBtYW51YWxseSBzZXQgdGhlIHJldHVybiB2YWx1ZSB0byBh
IFBhc3NSZWZQdHIgb2YgdGhlIGV4cGVjdGVkIHR5cGUuCisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIFBhc3NSZWZQdHI8JGF0dHJUeXBlPiByZXN1bHRBc1Bhc3NSZWZQ
dHIgPSBWOFByb3h5Ojp3aXRoU1ZHQ29udGV4dCgkcmVzdWx0LCBjb250ZXh0KTtcbiIpOworICAg
ICAgICAgICAgJHJlc3VsdCA9ICJyZXN1bHRBc1Bhc3NSZWZQdHIiOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKCRhdHRySXNQb2RUeXBlKSB7Ci0gICAgICAgIG15ICRjbGFzc0luZGV4ID0g
dWMoJGF0dHJUeXBlKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0lu
ZGV4LCB3cmFwcGVyLnJlbGVhc2UoKSk7XG4iKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjgk
e2F0dHJUeXBlfS5oIn0gPSAxOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IHJldHVybiB0b1Y4KHdyYXBwZXIucmVsZWFzZSgpLmdldCgpKTtcbiIpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2ZVRv
SlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICIgICAgIikuIjtcbiIpOwog
ICAgIH0KQEAgLTkzNiw3ICs5NDIsNyBAQAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CiAgICAgfQogCi0gICAgaWYgKCRpbXBs
Q2xhc3NOYW1lIGVxICJkb3VibGUiKSB7CisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJmbG9h
dCIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAqaW1wID0gJHJlc3Vs
dDtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1l
ID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1lKTsKQEAgLTE0NjUsNyArMTQ3
MSw5IEBACiAgICAgICAgICAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iIC4KICAgICAgICAgICIj
aW5jbHVkZSBcIlY4UHJveHkuaFwiXG4iIC4KICAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGlu
Zy5oXCJcbiIgLgotICAgICAgICAgIiNpbmNsdWRlIFwiVjhCaW5kaW5nU3RhdGUuaFwiXG5cbiIg
LgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhCaW5kaW5nU3RhdGUuaFwiXG4iIC4KKyAgICAgICAg
ICIjaW5jbHVkZSBcIlY4RE9NV3JhcHBlci5oXCJcbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwi
VjhJc29sYXRlZENvbnRleHQuaFwiXG5cbiIgLgogICAgICAgICAgIiN1bmRlZiBMT0dcblxuIik7
CiAKICAgICBwdXNoKEBpbXBsRml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CkBAIC0xODYzLDcgKzE4NzEsMTAgQEAKIEVO
RAogICAgIH0KIAotICAgICR0b05hdGl2ZVJldHVyblR5cGUgPSBHZXRSZXR1cm5UeXBlRm9yVG9O
YXRpdmUoJGludGVyZmFjZU5hbWUpOworICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlw
ZUZvckNvbnZlcnNpb25zKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9KSB7CisgICAgICAgICRuYXRpdmVUeXBlID0gIlY4
U1ZHUE9EVHlwZVdyYXBwZXI8JHtuYXRpdmVUeXBlfT4iOworICAgIH0KICAgICBwdXNoKEBpbXBs
Q29udGVudCwgPDxFTkQpOwogICAKICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCkBAIC0x
ODgxLDggKzE4OTIsOCBAQAogICByZXR1cm4gJHtjbGFzc05hbWV9X2NhY2hlXzsKIH0KIAotJHt0
b05hdGl2ZVJldHVyblR5cGV9KiAke2NsYXNzTmFtZX06OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PCR7dG9OYXRpdmVS
ZXR1cm5UeXBlfSo+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3Jh
cHBlck9iamVjdEluZGV4KSk7IAorJHtuYXRpdmVUeXBlfSogJHtjbGFzc05hbWV9Ojp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsgCiB9CiAKIGJvb2wgJHtjbGFzc05hbWV9OjpIYXNJ
bnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpIHsKQEAgLTE5MDMsNiArMTkxNCw4
IEBACiB9CiBFTkQKICAgICB9CisgICAgCisgICAgR2VuZXJhdGVUb1Y4Q29udmVydGVycygkZGF0
YU5vZGUsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkbmF0aXZlVHlwZSk7CiAKICAgICBw
dXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtMTkx
MSw5ICsxOTI0LDE4MSBAQAogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAotc3ViIEdl
dFJldHVyblR5cGVGb3JUb05hdGl2ZQorc3ViIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMgCiB7Cisg
ICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsK
KyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJG5hdGl2ZVR5cGUgPSBzaGlmdDsK
KyAgICAKKyAgICBteSAkd3JhcHBlclR5cGUgPSAiVjhDbGFzc0luZGV4OjoiIC4gdWMoJGludGVy
ZmFjZU5hbWUpOworICAgIG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRk
YXRhTm9kZSwgJGludGVyZmFjZU5hbWUpOworICAgIG15ICRmb3JjZU5ld09iamVjdElucHV0ID0g
SXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2JqZWN0IiA6
ICIiOworICAgIG15ICRmb3JjZU5ld09iamVjdENhbGwgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZh
Y2VOYW1lKSA/ICIsIGZvcmNlTmV3T2JqZWN0IiA6ICIiOworICAgIAorICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7ICAgCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9
Ojp0b1Y4SGVscGVyKCR7bmF0aXZlVHlwZX0qIGltcGwke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7
CisgIC8vaWYgKCFpbXBsKQorICAvLyAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgVjhQcm94eSog
cHJveHkgPSAwOworICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CitFTkQKKworICAg
IGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsIDw8RU5EKTsKKyAgaWYgKGltcGwtPmRvY3VtZW50KCkpIHsKKyAgICBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKGltcGwtPmRvY3VtZW50KCktPmZyYW1lKCkpOworICAgIGlmIChwcm94eSAm
JiBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbC0+ZG9jdW1lbnQoKSkgPT0gc3RhdGljX2Nhc3Q8Tm9k
ZSo+KGltcGwpKQorICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVk
ZWQoKTsKKyAgfQorCitFTkQKKyAgICB9CisKKyAgICBpZiAoJGRvbU1hcEZ1bmN0aW9uKSB7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZm9yY2VOZXdPYmplY3QpIHtcbiIp
IGlmIElzRE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOworICB3cmFwcGVyID0gJHtkb21NYXBGdW5jdGlvbn0uZ2V0KGltcGwpOwor
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgIHJldHVybiB3cmFwcGVyOworRU5ECisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpIGlmIElzRE9NTm9kZVR5cGUoJGludGVy
ZmFjZU5hbWUpOworICAgIH0KKyAgICBpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisKKyAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY29udGV4dDsKKyAgaWYgKHByb3h5KQorICAgIGNvbnRleHQgPSBwcm94eS0+Y29udGV4
dCgpOworCisgIC8vIEVudGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFw
cGVyIGluIHRoYXQgY29udGV4dC4KKyAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKKyAgICBjb250
ZXh0LT5FbnRlcigpOworRU5ECisgICAgfQorCisgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7
CisgIGlmIChWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKQorICAgIHByb3h5ID0gMDsK
KyAgZWxzZSBpZiAoIXByb3h5KQorICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoKTsKKwor
ICBpZiAocHJveHkpCisgICAgd3JhcHBlciA9IHByb3h5LT53aW5kb3dTaGVsbCgpLT5jcmVhdGVX
cmFwcGVyRnJvbUNhY2hlKCR7d3JhcHBlclR5cGV9KTsKKyAgZWxzZQorICAgIHdyYXBwZXIgPSBT
YWZlQWxsb2NhdGlvbjo6bmV3SW5zdGFuY2UoVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZSgke3dy
YXBwZXJUeXBlfSktPkdldEZ1bmN0aW9uKCkpOworICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQor
ICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCBWOENsYXNzSW5kZXg6OlRv
SW50KCR7d3JhcHBlclR5cGV9KSwgaW1wbCk7CitFTkQKKworICAgIGlmIChJc05vZGVTdWJUeXBl
KCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgLy8g
RXhpdCB0aGUgbm9kZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQuCisgIGlmICghY29udGV4
dC5Jc0VtcHR5KCkpCisgICAgY29udGV4dC0+RXhpdCgpOworRU5ECisgICAgfQorICAgIAorICAg
IHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAg
ICByZXR1cm4gd3JhcHBlcjsKK0VORAorICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gIGltcGwt
PnJlZigpO1xuIikgaWYgSXNSZWZQdHJUeXBlKCRpbnRlcmZhY2VOYW1lKTsKKworICAgIGlmICgk
ZG9tTWFwRnVuY3Rpb24pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAg
JHtkb21NYXBGdW5jdGlvbn0uc2V0KGltcGwsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpO
ZXcod3JhcHBlcikpOworRU5ECisgICAgfQorCisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5E
KTsKKyAgcmV0dXJuIHdyYXBwZXI7Cit9CitFTkQKKworICAgIGlmIChJc1JlZlB0clR5cGUoJGlu
dGVyZmFjZU5hbWUpKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8JHtuYXRpdmVUeXBlfSA+IGltcGwk
e2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7CisgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkke2ZvcmNl
TmV3T2JqZWN0Q2FsbH0pOworfQorRU5ECisgICAgfQorICAgIAorICAgIGlmICghSGFzQ3VzdG9t
VG9WOEltcGxlbWVudGF0aW9uKCRkYXRhTm9kZSwgJGludGVyZmFjZU5hbWUpKSB7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KCR7bmF0aXZlVHlwZX0qIGltcGwke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7CisgIGlmICghaW1w
bCkKKyAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6dG9WOEhl
bHBlcihpbXBsJHtmb3JjZU5ld09iamVjdENhbGx9KTsKK30KK0VORAorICAgIH0KK30KKworc3Vi
IEhhc0N1c3RvbVRvVjhJbXBsZW1lbnRhdGlvbiB7CisgICAgJGRhdGFOb2RlID0gc2hpZnQ7Cisg
ICAgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICAKKyAgICAjIFdlIGdlbmVyYXRlIGEgY3Vz
dG9tIGNvbnZlcnRlciAoYnV0IEpTQyBkb2Vzbid0KSBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICBy
ZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQmFySW5mbyI7CisgICAgcmV0dXJuIDEgaWYg
JGludGVyZmFjZU5hbWUgZXEgIkNTU1N0eWxlU2hlZXQiOworICAgIHJldHVybiAxIGlmICRpbnRl
cmZhY2VOYW1lIGVxICJDYW52YXNQaXhlbEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJm
YWNlTmFtZSBlcSAiQ29uc29sZSI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEg
IkRPTVNlbGVjdGlvbiI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdp
bmRvdyI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiOworICAg
IHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJMb2NhdGlvbiI7CisgICAgcmV0dXJuIDEg
aWYgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxEb2N1bWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGlu
dGVyZmFjZU5hbWUgZXEgIkhUTUxFbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNl
TmFtZSBlcSAiSGlzdG9yeSI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5h
bWVkTm9kZU1hcCI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIk5hdmlnYXRv
ciI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNWR0RvY3VtZW50IjsKKyAg
ICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudCI7CisgICAgcmV0dXJu
IDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIlNjcmVlbiI7CisgICAgCisgICAgIyBXZSBkb24ndCBn
ZW5lcmF0ZSBhIGN1c3RvbSBjb252ZXJ0ZXIgKGJ1dCBKU0MgZG9lcykgZm9yIHRoZSBmb2xsb3dp
bmc6CisgICAgcmV0dXJuIDAgaWYgJGludGVyZmFjZU5hbWUgZXEgIkFic3RyYWN0V29ya2VyIjsK
KyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCI7CisgICAgcmV0dXJuIDAgaWYgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxDb2xsZWN0aW9uIjsK
KyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSW1hZ2VEYXRhIjsKKyAgICByZXR1
cm4gMCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKworICAgICMg
Rm9yIGV2ZXJ5dGhpbmcgZWxzZSwgZG8gd2hhdCBKU0MgZG9lcy4KKyAgICByZXR1cm4gJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tVG9KUyJ9OworfQorCitzdWIgR2V0RG9t
TWFwRnVuY3Rpb24KK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9
IHNoaWZ0OworICAgIHJldHVybiAiZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0
eXBlIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiOworICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgp
IiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7CisgICAgIyBPbmx5IHVzZSBnZXRET01TVkdP
YmplY3RXaXRoQ29udGV4dE1hcCgpIGZvciBub24tbm9kZSBzdmcgb2JqZWN0cworICAgIHJldHVy
biAiZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKSIgaWYgJHR5cGUgPX4gL1NWRy87Cisg
ICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01JbXBsZW1lbnRhdGlvbiI7CisgICAgcmV0dXJu
ICJnZXRBY3RpdmVET01PYmplY3RNYXAoKSIgaWYgSXNBY3RpdmVEb21UeXBlKCR0eXBlKTsKKyAg
ICByZXR1cm4gImdldERPTU9iamVjdE1hcCgpIjsKK30KKworc3ViIElzQWN0aXZlRG9tVHlwZQor
eworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIk1lc3Nh
Z2VQb3J0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiWE1MSHR0cFJlcXVlc3QiOworICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJTb2NrZXQiOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJXb3JrZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFyZWRXb3JrZXIiOwor
ICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zCit7Cisg
ICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gIkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEg
IlNWR1JlY3QiOwogICAgIHJldHVybiAiRmxvYXRQb2ludCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50
IjsKICAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0
cml4IjsKQEAgLTE5NjYsNyArMjE1MSw2IEBACiAKICAgICBteSAkZmlyc3QgPSAxOwogICAgIG15
ICRpbmRleCA9IDA7Ci0gICAgbXkgJG5vZGVUb1JldHVybiA9IDA7CiAKICAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBpZiAoJGlu
ZGV4IGVxICRudW1iZXJPZlBhcmFtZXRlcnMpIHsKQEAgLTE5ODgsMTAgKzIxNzIsNiBAQAogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICRwYXJhbU5hbWU7
CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlJldHVybiJ9KSB7Ci0gICAgICAgICAgICAkbm9kZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+
bmFtZTsKLSAgICAgICAgfQogICAgICAgICAkaW5kZXgrKzsKICAgICB9CiAKQEAgLTIwMTAsMTkg
KzIxOTAsNyBAQAogICAgIG15ICRyZXR1cm4gPSAicmVzdWx0IjsKICAgICBteSAkcmV0dXJuSXNS
ZWYgPSBJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpOwogCi0gICAgaWYgKCRub2RlVG9SZXR1cm4p
IHsKLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGluc2VydEJlZm9yZSwgcmVwbGFjZUNoaWxk
LCByZW1vdmVDaGlsZCBhbmQKLSAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBO
b2RlLgotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBzdWNjZXNzID0gJGZ1bmN0
aW9uU3RyaW5nO1xuIjsKLSAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25z
fSkgewotICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChVTkxJS0VMWShlYykp
IGdvdG8gZmFpbDtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4g
ImlmIChzdWNjZXNzKVxuIjsKLSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gIiAgICAiIC4K
LSAgICAgICAgICAgICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
JG5vZGVUb1JldHVybik7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJu
IHY4OjpOdWxsKCk7XG4iOwotICAgICAgICByZXR1cm4gJHJlc3VsdDsKLSAgICB9IGVsc2lmICgk
cmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICBpZiAoJHJldHVyblR5cGUgZXEgInZvaWQiKSB7
CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4iOwogICAg
IH0gZWxzaWYgKCRjb3B5Rmlyc3QpIHsKICAgICAgICAgJHJlc3VsdCAuPQpAQCAtMjA4MSw4ICsy
MjQ5LDggQEAKICAgICB9CiAKICAgICBpZiAoJHJldHVybnNQb2RUeXBlKSB7Ci0gICAgICAgIG15
ICRjbGFzc0luZGV4ID0gdWMoJHJldHVyblR5cGUpOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRl
bnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkpO1xuIjsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siVjgke3JldHVyblR5cGV9LmgifSA9IDE7CisgICAgICAgICRyZXN1bHQgLj0gJGluZGVu
dCAuICJyZXR1cm4gdG9WOCh3cmFwcGVyLnJlbGVhc2UoKSk7XG4iOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNSZWYpOwogICAgICAg
ICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5z
aWduYXR1cmUsICRyZXR1cm4sICRpbmRlbnQpIC4gIjtcbiI7CkBAIC0yMTQyLDYgKzIzMTAsNyBA
QAogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CiAgICAgcmV0dXJuIDAgaWYg
JHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNp
Z25lZCBzaG9ydCI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgIlNWR0FuaW1hdGVkUG9pbnRz
IjsKIAogICAgIHJldHVybiAxOwogfQpAQCAtMjE4Miw3ICsyMzUxLDcgQEAKICAgICByZXR1cm4g
IlNWR1RyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR1RyYW5zZm9ybSI7CiAgICAgcmV0dXJuICJT
VkdMZW5ndGgiIGlmICR0eXBlIGVxICJTVkdMZW5ndGgiOwogICAgIHJldHVybiAiU1ZHQW5nbGUi
IGlmICR0eXBlIGVxICJTVkdBbmdsZSI7Ci0gICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBlIGVx
ICJTVkdOdW1iZXIiOworICAgIHJldHVybiAiZmxvYXQiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIi
OwogICAgIHJldHVybiAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyIgaWYgJHR5cGUgZXEgIlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW8iOwogICAgIHJldHVybiAiU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSIg
aWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAgICAgcmV0dXJuICJET01UaW1lU3RhbXAiIGlm
ICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwpAQCAtMjM5Nyw3ICsyNTY2LDExIEBACiBzdWIgR2V0
VjhIZWFkZXJOYW1lCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICByZXR1cm4gIlY4IiAu
IEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUpOworICAgIHJldHVybiAiVjhFdmVudC5o
IiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIkV2ZW50TGlzdGVuZXIu
aCIgaWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOworICAgIHJldHVybiAiRXZlbnRUYXJnZXQu
aCIgaWYgJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1
cm4gIlY4JHt0eXBlfS5oIjsKIH0KIAogCkBAIC0yNTIyLDcgKzI2OTUsNiBAQAogICAgIG15ICR2
YWx1ZSA9IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IEdl
dFR5cGVGcm9tU2lnbmF0dXJlKCRzaWduYXR1cmUpOwotICAgIG15ICRjbGFzc05hbWU9ICJWOCR0
eXBlIjsKIAogICAgIHJldHVybiAicmV0dXJuIHY4OjpEYXRlOjpOZXcoc3RhdGljX2Nhc3Q8ZG91
YmxlPigkdmFsdWUpKSIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CiAgICAgcmV0dXJuICJy
ZXR1cm4gdjhCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKQEAgLTI1NDks
MjkgKzI3MjEsMjAgQEAKICAgICAgICAgcmV0dXJuICJyZXR1cm4gdjhTdHJpbmcoJHZhbHVlKSI7
CiAgICAgfQogCi0gICAgIyBWOCBzcGVjaWZpYy4KLSAgICBteSAkaW1wbENsYXNzTmFtZSA9ICR0
eXBlOwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICAjIHNwZWNpYWwgY2Fz
ZSBmb3Igbm9uLURPTSBub2RlIGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlw
ZSkpIHsKLSAgICAgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1
cm5zTmV3In0pIHsKLSAgICAgICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydE5ld05vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
JHZhbHVlKSI7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJyZXR1cm4gdG9WOCgke3ZhbHVl
fSIgLiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybnNOZXcifSA/ICIs
IHRydWUpIiA6ICIpIik7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIg
b3IgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICBpZiAoJHR5cGUgZXEgIkV2
ZW50VGFyZ2V0IikgewogICAgICAgICByZXR1cm4gInJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRFdmVudFRhcmdldFRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0eXBl
IGVxICJFdmVudCIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0RXZlbnRUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAgIH0KLQogICAgIGlmICgkdHlwZSBlcSAi
RXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksICR2YWx1ZSkiOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1cm4gInJldHVybiAke3ZhbHVlfSA/IHY4OjpIYW5k
bGU8djg6OlZhbHVlPihzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KCR7dmFs
dWV9KS0+Z2V0TGlzdGVuZXJPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSA6
IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKSI7CiAgICAgfQogCiAgICAgaWYgKCR0
eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CkBAIC0yNTkxLDE4ICsyNzU0LDE1IEBA
CiAgICAgICAgIHJldHVybiAicmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29u
dmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgJHZhbHVlKSI7CiAgICAg
fQogCi0gICAgZWxzZSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZDb3VudGVkLmgi
fSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQdHIuaCJ9ID0gMTsKLSAgICAg
ICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0gPSAxOwotICAgICAgICBteSAkY2xhc3NJ
bmRleCA9IHVjKCR0eXBlKTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0g
PSAxOworICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQdHIuaCJ9ID0gMTsKKyAgICAkaW1wbElu
Y2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CiAKLSAgICAgICAgaWYgKElzUG9kVHlwZSgkdHlw
ZSkpIHsKLSAgICAgICAgICAgICR2YWx1ZSA9IEdlbmVyYXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBw
ZXIoJHR5cGUsICR2YWx1ZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoSXNQb2RUeXBlKCR0eXBlKSkg
eworICAgICAgICAkdmFsdWUgPSBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyKCR0eXBl
LCAkdmFsdWUpIC4gIi5nZXQoKSI7CisgICAgfQogCi0gICAgICAgIHJldHVybiAicmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwg
JHZhbHVlKSI7Ci0gICAgfQorICAgIHJldHVybiAicmV0dXJuIHRvVjgoJHZhbHVlKSI7CiB9CiAK
IHN1YiBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFwcGVyIHsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAj
aW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhET01BcHBsaWNh
dGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOERPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKQEAgLTUyLDEyICs1MywxOCBA
QAogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2lu
Y2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCi0jaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5o
IgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VDaGFubmVsLmgi
CiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVNYXAuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNs
dWRlICJWOE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiVjhOb3RpZmljYXRpb24uaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdFbGVtZW50SW5zdGFuY2UuaCIKKyNpbmNsdWRl
ICJWOFNoYXJlZFdvcmtlci5oIgogI2luY2x1ZGUgIlY4U3R5bGVTaGVldC5oIgorI2luY2x1ZGUg
IlY4V2ViU29ja2V0LmgiCisjaW5jbHVkZSAiVjhXb3JrZXIuaCIKICNpbmNsdWRlICJXZWJHTEFy
cmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIldl
YkdMVW5pZm9ybUxvY2F0aW9uLmgiCkBAIC0xMTgzLDc1ICsxMTkwLDY0IEBACiAgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICBTVkdFbGVtZW50SW5zdGFu
Y2UqIGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpOwotICAgIGlmIChp
bnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
U1ZHRUxFTUVOVElOU1RBTkNFLCBpbnN0YW5jZSk7CisgICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5j
ZSogaW5zdGFuY2UgPSB0YXJnZXQtPnRvU1ZHRWxlbWVudEluc3RhbmNlKCkpCisgICAgICAgIHJl
dHVybiB0b1Y4KGluc3RhbmNlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdPUktFUlMpCi0gICAg
V29ya2VyKiB3b3JrZXIgPSB0YXJnZXQtPnRvV29ya2VyKCk7Ci0gICAgaWYgKHdvcmtlcikKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09SS0VSLCB3b3Jr
ZXIpOworICAgIGlmIChXb3JrZXIqIHdvcmtlciA9IHRhcmdldC0+dG9Xb3JrZXIoKSkKKyAgICAg
ICAgcmV0dXJuIHRvVjgod29ya2VyKTsKICNlbmRpZiAvLyBXT1JLRVJTCiAKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCi0gICAgU2hhcmVkV29ya2VyKiBzaGFyZWRXb3JrZXIgPSB0YXJnZXQt
PnRvU2hhcmVkV29ya2VyKCk7Ci0gICAgaWYgKHNoYXJlZFdvcmtlcikKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U0hBUkVEV09SS0VSLCBzaGFyZWRXb3Jr
ZXIpOworICAgIGlmIChTaGFyZWRXb3JrZXIqIHNoYXJlZFdvcmtlciA9IHRhcmdldC0+dG9TaGFy
ZWRXb3JrZXIoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc2hhcmVkV29ya2VyKTsKICNlbmRpZiAv
LyBTSEFSRURfV09SS0VSUwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgTm90aWZp
Y2F0aW9uKiBub3RpZmljYXRpb24gPSB0YXJnZXQtPnRvTm90aWZpY2F0aW9uKCk7Ci0gICAgaWYg
KG5vdGlmaWNhdGlvbikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6Tk9USUZJQ0FUSU9OLCBub3RpZmljYXRpb24pOworICAgIGlmIChOb3RpZmljYXRpb24q
IG5vdGlmaWNhdGlvbiA9IHRhcmdldC0+dG9Ob3RpZmljYXRpb24oKSkKKyAgICAgICAgcmV0dXJu
IHRvVjgobm90aWZpY2F0aW9uKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQot
ICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gdGFyZ2V0LT50b1dlYlNvY2tldCgpOwotICAgIGlm
ICh3ZWJTb2NrZXQpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OldFQlNPQ0tFVCwgd2ViU29ja2V0KTsKKyAgICBpZiAoV2ViU29ja2V0KiB3ZWJTb2NrZXQg
PSB0YXJnZXQtPnRvV2ViU29ja2V0KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHdlYlNvY2tldCk7
CiAjZW5kaWYKIAotICAgIE5vZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwotICAgIGlmIChu
b2RlKQotICAgICAgICByZXR1cm4gY29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgIGlm
IChOb2RlKiBub2RlID0gdGFyZ2V0LT50b05vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgobm9k
ZSk7CiAKICAgICBpZiAoRE9NV2luZG93KiBkb21XaW5kb3cgPSB0YXJnZXQtPnRvRE9NV2luZG93
KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgZG9tV2luZG93KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoZG9tV2luZG93KTsKIAogICAg
IC8vIFhNTEh0dHBSZXF1ZXN0IGlzIGNyZWF0ZWQgd2l0aGluIGl0cyBKUyBjb3VudGVycGFydC4K
LSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB0YXJnZXQtPnRvWE1MSHR0cFJl
cXVlc3QoKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3QpIHsKKyAgICBpZiAoWE1MSHR0cFJlcXVl
c3QqIHhtbEh0dHBSZXF1ZXN0ID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0KCkpIHsKICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFw
KCkuZ2V0KHhtbEh0dHBSZXF1ZXN0KTsKICAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzRW1wdHko
KSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KIAogICAgIC8vIE1lc3NhZ2VQb3J0
IGlzIGNyZWF0ZWQgd2l0aGluIGl0cyBKUyBjb3VudGVycGFydAotICAgIE1lc3NhZ2VQb3J0KiBw
b3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQb3J0KCk7Ci0gICAgaWYgKHBvcnQpIHsKKyAgICBpZiAo
TWVzc2FnZVBvcnQqIHBvcnQgPSB0YXJnZXQtPnRvTWVzc2FnZVBvcnQoKSkgewogICAgICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRBY3RpdmVET01PYmplY3RNYXAoKS5n
ZXQocG9ydCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2Fk
ID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBsb2FkKCk7Ci0gICAgaWYgKHVwbG9hZCkgewor
ICAgIGlmIChYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBS
ZXF1ZXN0VXBsb2FkKCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHVwbG9hZCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBl
ci5Jc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKICNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRv
bUFwcENhY2hlID0gdGFyZ2V0LT50b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAoZG9t
QXBwQ2FjaGUpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGRvbUFwcENhY2hlKTsKKyAgICBpZiAoRE9NQXBwbGljYXRp
b25DYWNoZSogZG9tQXBwQ2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQor
ICAgICAgICByZXR1cm4gdG9WOChkb21BcHBDYWNoZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShF
VkVOVFNPVVJDRSkKLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSB0YXJnZXQtPnRvRXZl
bnRTb3VyY2UoKTsKLSAgICBpZiAoZXZlbnRTb3VyY2UpCi0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkVWRU5UU09VUkNFLCBldmVudFNvdXJjZSk7CisgICAg
aWYgKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHRhcmdldC0+dG9FdmVudFNvdXJjZSgpKQor
ICAgICAgICByZXR1cm4gdG9WOChldmVudFNvdXJjZSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVCgw
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA1Mzk1OCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDkgQEAK
ICAgICAgICAgICAgIHNldFNWR0NvbnRleHQob2JqZWN0LmdldCgpLCBjb250ZXh0KTsKICAgICAg
ICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQqIHdp
dGhTVkdDb250ZXh0KHZvaWQqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgc3RhdGljIFQqIHdpdGhTVkdDb250ZXh0
KFQqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
c2V0U1ZHQ29udGV4dChvYmplY3QsIGNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkocmV2aXNpb24gNTM5NTgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTUsMTUgKzI1NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQpOwogI2VuZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICAv
LyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUu
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNv
bnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKLQogICAgICAg
ICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGh0bWxFbGVtZW50VHlwZShIVE1M
RWxlbWVudCopOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgc3ZnRWxlbWVudFR5cGUoU1ZHRWxlbWVudCopOwogI2VuZGlmCisgICAg
ICAgIC8vIFNldCBoaWRkZW4gcmVmZXJlbmNlcyBpbiBhIERPTVdpbmRvdyBvYmplY3Qgb2YgYSBm
cmFtZS4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKEZyYW1l
KiwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogCisg
ICAgcHJpdmF0ZToKKwogICAgICAgICAvLyBUaGUgZmlyc3QgVjhXcmFwcGVyVHlwZSBzcGVjaWZp
ZXMgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0b3IKICAgICAgICAgLy8gdXNlZCB0byBjcmVhdGUgSlMg
b2JqZWN0LiBUaGUgc2Vjb25kIFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzCiAgICAgICAgIC8vIHRo
ZSBhY3R1YWwgdHlwZSBvZiB0aGUgdm9pZCogZm9yIHR5cGUgY2FzdGluZy4KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9WOENvbGxlY3Rpb24uaAkocmV2aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6QXJy
YXk+IG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogICAgIHsKICAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5
YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBl
cjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsK
ICAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xs
ZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24t
Pmxlbmd0aCgpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4
OjpBcnJheTo6TmV3KGxlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1cm4gc2V0V2ViR0xB
cnJheTxXZWJHTEZsb2F0QXJyYXksIFY4V2ViR0xGbG9hdEFycmF5PihhcmdzLCBWOENsYXNzSW5k
ZXg6OldFQkdMRkxPQVRBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdl
YkdMRmxvYXRBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2
ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4V2ViR0xG
bG9hdEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkp
CisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0
YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsRmxvYXRBcnJheSwgaW1wbC0+bGVu
Z3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5NTgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJWOE5hdmlnYXRvci5oIgogCiAj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93
LmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDIsNCArNDQsMTcgQEAKIH0KICNlbmRpZgogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChOYXZpZ2F0b3IqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmpl
Y3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAg
IHdyYXBwZXIgPSBWOE5hdmlnYXRvcjo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2lu
ZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93OjpuYXZpZ2F0b3JJbmRleCwg
d3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRl
ICJWOFdlYkdMQXJyYXkuaCIKKworI2luY2x1ZGUgIlY4V2ViR0xCeXRlQXJyYXkuaCIKKyNpbmNs
dWRlICJWOFdlYkdMRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xJbnRBcnJheS5oIgor
I2luY2x1ZGUgIlY4V2ViR0xTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiVjhXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiVjhXZWJHTFVuc2lnbmVkSW50QXJyYXkuaCIKKyNpbmNs
dWRlICJWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV2ViR0xBcnJheSogaW1wbCkKK3sKKyAgICBp
ZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBsLT5pc0J5
dGVBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJHTEJ5dGVBcnJh
eSo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNGbG9hdEFycmF5KCkpCisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMRmxvYXRBcnJheSo+KGltcGwpKTsKKyAgICBpZiAoaW1w
bC0+aXNJbnRBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJHTElu
dEFycmF5Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc1Nob3J0QXJyYXkoKSkKKyAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xTaG9ydEFycmF5Kj4oaW1wbCkpOworICAgIGlm
IChpbXBsLT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PFdlYkdMVW5zaWduZWRCeXRlQXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlz
VW5zaWduZWRJbnRBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJH
TFVuc2lnbmVkSW50QXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzVW5zaWduZWRTaG9y
dEFycmF5KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5Kj4oaW1wbCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoY29uc3QgV2Vi
R0xHZXRJbmZvJiBpbmZvKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0
KGNvbnN0IFdlYkdMR2V0SW5mbyYgaW5mbykKIHsKICAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgp
KSB7CiAgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbDoKQEAgLTI2MSw3ICsyNjEsNyBA
QAogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1
cm4gdG9WOE9iamVjdChpbmZvKTsKIH0KIAogc3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0
b1dlYkdMVW5pZm9ybUxvY2F0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYg
b2spCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJu
IHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTM0Miw3ICszNDIsNyBAQAogICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9WOE9i
amVjdChpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTM2OCw3ICszNjgsNyBAQAogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1
cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvKTsKIH0KIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNDAwLDcgKzQw
MCw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8pOworICAg
IHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0
RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9
Ci0gICAgcmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9
CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlz
aW9uIDUzOTU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTgsNCArOTE4LDM3IEBACiAgICAgcmV0dXJuIFY4
QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCB0
YXJnZXQsIGZhbHNlKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRE9NV2luZG93
KiB3aW5kb3cpCit7CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OworICAgIC8vIEluaXRpYWxpemVzIGVudmlyb25tZW50IG9mIGEgZnJhbWUsIGFuZCByZXR1cm4g
dGhlIGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUgZnJhbWUuCisgICAgRnJhbWUqIGZyYW1l
ID0gd2luZG93LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2U6IEJlY2F1c2Ugb2Yg
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoKSBvbmUgRE9NV2luZG93IGNhbiBoYXZlCisgICAgLy8g
bXVsdGlwbGUgY29udGV4dHMgYW5kIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGFzc29jaWF0ZWQg
d2l0aCBpdC4gV2hlbgorICAgIC8vIGNvZGUgcnVubmluZyBpbiBvbmUgb2YgdGhvc2UgY29udGV4
dHMgYWNjZXNzZXMgdGhlIHdpbmRvdyBvYmplY3QsIHdlCisgICAgLy8gd2FudCB0byByZXR1cm4g
dGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29udGV4dCwgbm90CisgICAg
Ly8gbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRo
YXQgRE9NV2luZG93LgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGN1cnJlbnRDb250ZXh0
ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGN1cnJlbnRHbG9iYWwgPSBjdXJyZW50Q29udGV4dC0+R2xvYmFsKCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFw
cGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjdXJyZW50R2xvYmFsKTsKKyAgICBpZiAoIXdp
bmRvd1dyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChWOERPTVdpbmRvdzo6dG9OYXRp
dmUod2luZG93V3JhcHBlcikgPT0gd2luZG93KQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRH
bG9iYWw7CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGdsb2JhbCBvYmpl
Y3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJhbWUuCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUpOworICAgIGlmIChjb250ZXh0Lklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKKworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7CisgICAg
QVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgpKTsKKyAgICByZXR1cm4gZ2xvYmFsOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENh
bnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlY4Q2FudmFzUGl4ZWxBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KENhbnZhc1BpeGVsQXJyYXkqIGltcGwpCit7CisgICAgaWYgKCFp
bXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBWOENhbnZhc1BpeGVsQXJyYXk6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3Bl
cnRpZXNUb1BpeGVsRGF0YShpbXBsLT5kYXRhKCktPmRhdGEoKSwgaW1wbC0+bGVuZ3RoKCkpOwor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTEgQEAKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCisjaW5jbHVk
ZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4WFBhdGhO
U1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiVjhYUGF0aFJlc3VsdC5oIgogCkBAIC0xMzIsNCArMTM1
LDIwIEBACiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KERvY3VtZW50KiBpbXBsLCBib29sIGZvcmNlTmV3T2JqZWN0KQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlzSFRNTERvY3Vt
ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGlt
cGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKGltcGwtPmlzU1ZHRG9jdW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihpbXBsKSwgZm9yY2VO
ZXdPYmplY3QpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhEb2N1bWVu
dDo6dG9WOEhlbHBlcihpbXBsLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKCFWOElzb2xhdGVk
Q29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgICAgIGlmIChWOFByb3h5KiBwcm94eSA9IFY4
UHJveHk6OnJldHJpZXZlKGltcGwtPmZyYW1lKCkpKQorICAgICAgICAgICAgcHJveHktPndpbmRv
d1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0
dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1OCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxMCArMzQsMjggQEAKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNs
dWRlICJDbGlwYm9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlY4QmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDb21wb3NpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhFcnJvckV2ZW50LmgiCisjaW5jbHVkZSAiVjhL
ZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJW
OE1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJWOE11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJW
OE92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJWOFBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKKyNp
bmNsdWRlICJWOFBvcFN0YXRlRXZlbnQuaCIKKyNpbmNsdWRlICJWOFByb2dyZXNzRXZlbnQuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdab29tRXZlbnQuaCIKKyNpbmNs
dWRlICJWOFN0b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlY4VGV4dEV2ZW50LmgiCisjaW5jbHVk
ZSAiVjhVSUV2ZW50LmgiCisjaW5jbHVkZSAiVjhXZWJLaXRBbmltYXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgIlY4V2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiVjhXaGVlbEV2ZW50
LmgiCisjaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC02Nyw0ICs4NSw1NiBAQAogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEV2ZW50KiBpbXBsKQorewor
ICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwt
PmlzVUlFdmVudCgpKSB7CisgICAgICAgIGlmIChpbXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihpbXBsKSk7
CisgICAgICAgIGlmIChpbXBsLT5pc1RleHRFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oaW1wbCkpOworICAgICAgICBpZiAoaW1wbC0+aXNN
b3VzZUV2ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxNb3VzZUV2
ZW50Kj4oaW1wbCkpOworICAgICAgICBpZiAoaW1wbC0+aXNXaGVlbEV2ZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oaW1wbCkpOworI2lmIEVO
QUJMRShTVkcpCisgICAgICAgIGlmIChpbXBsLT5pc1NWR1pvb21FdmVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHWm9vbUV2ZW50Kj4oaW1wbCkpOworI2VuZGlm
CisgICAgICAgIGlmIChpbXBsLT5pc0NvbXBvc2l0aW9uRXZlbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PENvbXBvc2l0aW9uRXZlbnQqPihpbXBsKSk7CisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFVJRXZlbnQqPihpbXBsKSk7CisgICAgfQorICAgIGlm
IChpbXBsLT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8TXV0YXRpb25FdmVudCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNPdmVyZmxvd0V2ZW50
KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihpbXBs
KSk7CisgICAgaWYgKGltcGwtPmlzTWVzc2FnZUV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNQYWdl
VHJhbnNpdGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFBhZ2VU
cmFuc2l0aW9uRXZlbnQqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzUG9wU3RhdGVFdmVudCgp
KQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxQb3BTdGF0ZUV2ZW50Kj4oaW1wbCkp
OworICAgIGlmIChpbXBsLT5pc1Byb2dyZXNzRXZlbnQoKSkgeworICAgICAgICBpZiAoaW1wbC0+
aXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCo+KGltcGwpKTsKKyAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8UHJvZ3Jlc3NFdmVudCo+KGltcGwpKTsKKyAgICB9
CisgICAgaWYgKGltcGwtPmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0QW5pbWF0aW9uRXZlbnQqPihpbXBsKSk7CisgICAgaWYg
KGltcGwtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFdlYktpdFRyYW5zaXRpb25FdmVudCo+KGltcGwpKTsKKyNpZiBFTkFCTEUoV09S
S0VSUykKKyAgICBpZiAoaW1wbC0+aXNFcnJvckV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PEVycm9yRXZlbnQqPihpbXBsKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCisgICAgaWYgKGltcGwtPmlzU3RvcmFnZUV2ZW50KCkpCisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFN0b3JhZ2VFdmVudCo+KGltcGwpKTsKKyNlbmRpZgorICAgIGlm
IChpbXBsLT5pc0JlZm9yZUxvYWRFdmVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxCZWZvcmVMb2FkRXZlbnQqPihpbXBsKSk7CisgICAgcmV0dXJuIFY4RXZlbnQ6OnRvVjhI
ZWxwZXIoaW1wbCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAko
cmV2aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0
ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICBy
ZXR1cm4gc2V0V2ViR0xBcnJheTxXZWJHTEJ5dGVBcnJheSwgVjhXZWJHTEJ5dGVBcnJheT4oYXJn
cywgVjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFdlYkdMQnl0ZUFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gVjhXZWJHTEJ5dGVBcnJheTo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKQorICAgICAgICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJu
YWxBcnJheURhdGEoaW1wbC0+YmFzZUFkZHJlc3MoKSwgdjg6OmtFeHRlcm5hbEJ5dGVBcnJheSwg
aW1wbC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1OCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDExICszNSwyMyBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKIAogI2lu
Y2x1ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhBdHRyLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDREFUQVNlY3Rpb24uaCIKKyNpbmNs
dWRlICJWOENvbW1lbnQuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWOERvY3VtZW50LmgiCisjaW5j
bHVkZSAiVjhEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiVjhEb2N1bWVudFR5cGUuaCIK
KyNpbmNsdWRlICJWOEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOEVudGl0eS5oIgorI2luY2x1ZGUg
IlY4RW50aXR5UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCisjaW5jbHVkZSAiVjhO
b3RhdGlvbi5oIgorI2luY2x1ZGUgIlY4UHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VGV4dC5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC0xNTIsNCArMTY0LDM3IEBACiAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiB9CiAK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KE5vZGUqIGltcGwsIGJvb2wgZm9yY2VOZXdPYmpl
Y3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBz
d2l0Y2ggKGltcGwtPm5vZGVUeXBlKCkpIHsKKyAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToK
KyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGltcGwpLCBmb3JjZU5l
d09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8QXR0cio+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2Fz
ZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFRleHQq
PihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9O
T0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihpbXBs
KSwgZm9yY2VOZXdPYmplY3QpOworICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RF
OgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihpbXBs
KSwgZm9yY2VOZXdPYmplY3QpOworICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEVudGl0eSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7
CisgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KGltcGwpLCBmb3Jj
ZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PENvbW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICAg
IGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfVFlQRV9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVu
dFR5cGUqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRf
RlJBR01FTlRfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnRG
cmFnbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpOT1RBVElP
Tl9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxOb3RhdGlvbio+KGltcGwp
LCBmb3JjZU5ld09iamVjdCk7CisgICAgZGVmYXVsdDogYnJlYWs7IC8vIFhQQVRIX05BTUVTUEFD
RV9OT0RFCisgICAgfQorICAgIHJldHVybiBWOE5vZGU6OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VO
ZXdPYmplY3QpOworfQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJWOERPTVNlbGVjdGlvbi5oIgorCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNp
bmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChET01TZWxlY3Rpb24qIGltcGwpCit7CisgICAgaWYgKCFpbXBs
KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIu
SXNFbXB0eSgpKSB7CisgICAgICAgIHdyYXBwZXIgPSBWOERPTVNlbGVjdGlvbjo6dG9WOEhlbHBl
cihpbXBsKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uo
aW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OmRvbVNlbGVjdGlvbkluZGV4LCB3cmFwcGVyKTsK
KyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1h
cEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhFbGVtZW50LmgiCiAjaW5j
bHVkZSAiVjhQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNzIsNCArNzMs
MTggQEAKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVz
dWx0LnJlbGVhc2UoKSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KE5hbWVkTm9k
ZU1hcCogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4TmFtZWROb2RlTWFwOjp0
b1Y4SGVscGVyKGltcGwpOworICAgIC8vIEFkZCBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSBuYW1l
ZCBub2RlIG1hcCB0byBpdHMgb3duZXIgbm9kZS4KKyAgICBFbGVtZW50KiBlbGVtZW50ID0gaW1w
bC0+ZWxlbWVudCgpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkgJiYgZWxlbWVudCkgewor
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3duZXIgPSB0b1Y4KGVsZW1lbnQpOworICAg
ICAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4TmFtZWROb2RlTWFwOjpvd25lck5vZGVJ
bmRleCwgb3duZXIpOworICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHls
ZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOENTU1N0eWxlU2hl
ZXQuaCIKKworI2luY2x1ZGUgIlY4Tm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENTU1N0eWxlU2hlZXQqIGltcGwpCit7CisgICAgaWYg
KCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBWOENTU1N0eWxlU2hlZXQ6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAg
Ly8gQWRkIGEgaGlkZGVuIHJlZmVyZW5jZSBmcm9tIHN0eWxlc2hlZXQgb2JqZWN0IHRvIGl0cyBv
d25lciBub2RlLgorICAgIE5vZGUqIG93bmVyTm9kZSA9IGltcGwtPm93bmVyTm9kZSgpOworICAg
IGlmIChvd25lck5vZGUgJiYgIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICB3cmFwcGVyLT5T
ZXRJbnRlcm5hbEZpZWxkKFY4Q1NTU3R5bGVTaGVldDo6b3duZXJOb2RlSW5kZXgsIHRvVjgob3du
ZXJOb2RlKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4
dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMTk1LDQgKzE5NiwyMiBAQAogICAgIGluZm8u
SG9sZGVyKCktPlNldEludGVybmFsRmllbGQoVjhIVE1MRG9jdW1lbnQ6OnNoYWRvd0luZGV4LCB2
YWx1ZSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCogaW1w
bCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVy
biB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4SFRN
TERvY3VtZW50Ojp0b1Y4SGVscGVyKGltcGwsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBpZiAoIVY4
SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsKKyAgICAgICAgaWYgKFY4UHJveHkqIHBy
b3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW1wbC0+ZnJhbWUoKSkpCisgICAgICAgICAgICBwcm94
eS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOworICAgIH0K
KyAgICAvLyBDcmVhdGUgbWFya2VyIG9iamVjdCBhbmQgaW5zZXJ0IGl0IGluIHR3byBpbnRlcm5h
bCBmaWVsZHMuCisgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0ZW1wb3Jhcnkgc2hh
ZG93aW5nIG9mIGRvY3VtZW50LmFsbC4KKyAgICBBU1NFUlQod3JhcHBlci0+SW50ZXJuYWxGaWVs
ZENvdW50KCkgPT0gVjhIVE1MRG9jdW1lbnQ6OmludGVybmFsRmllbGRDb3VudCk7CisgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IG1hcmtlciA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgIHdyYXBw
ZXItPlNldEludGVybmFsRmllbGQoVjhIVE1MRG9jdW1lbnQ6Om1hcmtlckluZGV4LCBtYXJrZXIp
OworICAgIHdyYXBwZXItPlNldEludGVybmFsRmllbGQoVjhIVE1MRG9jdW1lbnQ6OnNoYWRvd0lu
ZGV4LCBtYXJrZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1
OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDYW52YXNT
dHlsZSogc3R5bGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3QoQ2Fu
dmFzU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkKICAg
ICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpDQU5WQVNHUkFESUVOVCwgc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpOwpAQCAtNzgsNyArNzgs
NyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VTdHlsZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogaW1wbCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKLSAgICByZXR1cm4gdG9WOChpbXBsLT5zdHJva2VTdHlsZSgpKTsKKyAgICByZXR1cm4g
dG9WOE9iamVjdChpbXBsLT5zdHJva2VTdHlsZSgpKTsKIH0KIAogdm9pZCBWOENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGVBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCkBAIC05MCw3ICs5MCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXBsLT5maWxs
U3R5bGUoKSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW1wbC0+ZmlsbFN0eWxlKCkpOwogfQog
CiB2b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nlc3NvclNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4U1ZH
UGF0aFNlZy5oIgorCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOERPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdBcmNBYnMuaCIKKyNpbmNsdWRlICJWOFNW
R1BhdGhTZWdBcmNSZWwuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdDbG9zZVBhdGguaCIKKyNp
bmNsdWRlICJWOFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMuaCIKKyNpbmNsdWRlICJWOFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWwuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGhBYnMuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhS
ZWwuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLmgiCisjaW5j
bHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5oIgorI2luY2x1ZGUgIlY4U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGlu
ZXRvQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5oIgor
I2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwuaCIKKyNpbmNsdWRlICJW
OFNWR1BhdGhTZWdMaW5ldG9SZWwuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbEFicy5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLmgiCisj
aW5jbHVkZSAiVjhTVkdQYXRoU2VnTW92ZXRvQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2Vn
TW92ZXRvUmVsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoU1ZHUGF0aFNlZyogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICAgIHN3aXRjaCAoaW1wbC0+cGF0aFNlZ1R5cGUoKSkgeworICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9TRVBBVEg6ICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ2xvc2VQYXRoKj4oaW1wbCkpOworICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fQUJTOiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJzKj4oaW1wbCkpOworICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fUkVMOiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvUmVsKj4oaW1wbCkpOworICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fQUJTOiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvQWJzKj4oaW1wbCkpOworICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fUkVMOiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvUmVsKj4oaW1wbCkpOworICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUzogICAgICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzKj4oaW1wbCkp
OworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDogICAgICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKj4o
aW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19B
QlM6ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Ficyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19R
VUFEUkFUSUNfUkVMOiAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNSZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VH
X0FSQ19BQlM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdBcmNBYnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FS
Q19SRUw6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdBcmNSZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVU
T19IT1JJWk9OVEFMX0FCUzogICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsQWJzKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFU
SFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUw6ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUzogICAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKj4oaW1wbCkpOworICAgIGNh
c2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOiAgICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwqPihpbXBsKSk7
CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUzog
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhB
YnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNf
U01PT1RIX1JFTDogICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NV
UlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlM6IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0
aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMOiByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCo+KGltcGwpKTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFY4U1ZHUGF0aFNl
Zzo6dG9WOEhlbHBlcihpbXBsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVu
c2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE2IEBACiAgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXksIFY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+KGFyZ3Ms
IFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRFNIT1JUQVJSQVkpOwogfQogCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSogaW1wbCkKK3sKKyAgICBp
ZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IFY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnRvVjhIZWxwZXIo
aW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0
SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCks
IHY4OjprRXh0ZXJuYWxVbnNpZ25lZFNob3J0QXJyYXksIGltcGwtPmxlbmd0aCgpKTsKKyAgICBy
ZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5o
IgorCisjaW5jbHVkZSAiVjhIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTEVsZW1lbnQqIGlt
cGwsIGJvb2wgZm9yY2VOZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKyAgICByZXR1cm4gY3JlYXRlVjhIVE1MV3JhcHBlcihpbXBsLCBmb3Jj
ZU5ld09iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhD
U1NSdWxlLmgiCisKKyNpbmNsdWRlICJWOENTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiVjhD
U1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJWOENTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRl
ICJWOENTU01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTUGFnZVJ1bGUuaCIKKyNpbmNsdWRl
ICJWOENTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTVmFyaWFibGVzUnVsZS5oIgorI2lu
Y2x1ZGUgIlY4V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCisjaW5jbHVkZSAiVjhXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoQ1NTUnVsZSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICAgIHN3aXRjaCAoaW1wbC0+dHlwZSgpKSB7CisgICAgY2FzZSBD
U1NSdWxlOjpTVFlMRV9SVUxFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NT
dHlsZVJ1bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpDSEFSU0VUX1JVTEU6CisgICAg
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU0NoYXJzZXRSdWxlKj4oaW1wbCkpOworICAg
IGNhc2UgQ1NTUnVsZTo6SU1QT1JUX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PENTU0ltcG9ydFJ1bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpNRURJQV9SVUxF
OgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihpbXBsKSk7
CisgICAgY2FzZSBDU1NSdWxlOjpGT05UX0ZBQ0VfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4oaW1wbCkpOworICAgIGNhc2UgQ1NTUnVsZTo6
UEFHRV9SVUxFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+
KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6OlZBUklBQkxFU19SVUxFOgorICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZXNSdWxlKj4oaW1wbCkpOworICAgIGNhc2Ug
Q1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PFdlYktpdENTU0tleWZyYW1lUnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6
OldFQktJVF9LRVlGUkFNRVNfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGltcGwpKTsKKyAgICB9CisgICAgcmV0dXJuIFY4Q1NT
UnVsZTo6dG9WOEhlbHBlcihpbXBsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
VW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1OCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE2IEBACiAgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSwgVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PihhcmdzLCBW
OENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVkpOwogfQogCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Ojp0b1Y4SGVscGVyKGltcGwp
OworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4
ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6
a0V4dGVybmFsVW5zaWduZWRCeXRlQXJyYXksIGltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4g
d3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NT
VmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhDU1NWYWx1ZS5oIgorCisjaW5jbHVkZSAiVjhD
U1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIlY4Q1NTVmFsdWVMaXN0LmgiCisjaW5jbHVk
ZSAiVjhTVkdDb2xvci5oIgorI2luY2x1ZGUgIlY4U1ZHUGFpbnQuaCIKKyNpbmNsdWRlICJWOFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NTVmFsdWUqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQor
ICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBpZiAoaW1wbC0+aXNXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNWYWx1ZUxpc3QoKSkKKyAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaW1wbCkpOworICAg
IGlmIChpbXBsLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc1NWR1Bh
aW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhaW50Kj4oaW1wbCkp
OworICAgIGlmIChpbXBsLT5pc1NWR0NvbG9yKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PFNWR0NvbG9yKj4oaW1wbCkpOworICAgIHJldHVybiBWOENTU1ZhbHVlOjp0b1Y4SGVs
cGVyKGltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsOSBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRl
ICJWOFNWR0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTI3LDQg
KzEyOSwxNCBAQAogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRWxl
bWVudCogaW1wbCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAg
ICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBsLT5pc0hUTUxFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oaW1wbCksIGZvcmNl
TmV3T2JqZWN0KTsKKyAgICBpZiAoaW1wbC0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOwor
ICAgIHJldHVybiBWOEVsZW1lbnQ6OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VOZXdPYmplY3QpOwor
fQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFNWR0Rv
Y3VtZW50LmgiCisKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4
UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChTVkdEb2N1bWVudCogaW1wbCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAo
IWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IFY4U1ZHRG9jdW1lbnQ6OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VOZXdP
YmplY3QpOworICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAg
ICAgICBpZiAoVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbXBsLT5mcmFtZSgp
KSkKKyAgICAgICAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBw
ZXIod3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExv
Y2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhE
T01XaW5kb3cuaCIKICNpbmNsdWRlICJWOExvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC0zNTgsNSArMzU5LDE4IEBACiAgICAgcmV0
dXJuIFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpLCBpbXAtPmZyYW1lKCksIGZhbHNlKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoTG9jYXRpb24qIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmpl
Y3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAg
IHdyYXBwZXIgPSBWOExvY2F0aW9uOjp0b1Y4SGVscGVyKGltcGwpOworICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5k
b3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OmxvY2F0aW9uSW5kZXgsIHdy
YXBwZXIpOworICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhU
TUxTZWxlY3RFbGVtZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6
bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICBBU1NFUlQoVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOwog
ICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBWOEhUTUxTZWxlY3RFbGVtZW50Ojp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKS0+aXRlbShpbmRleCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJl
dHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFN0
eWxlU2hlZXQuaCIKKworI2luY2x1ZGUgIlY4Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4
Tm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFN0eWxlU2hlZXQqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKKyAgICBpZiAoaW1wbC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihpbXBsKSk7CisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTdHlsZVNoZWV0Ojp0b1Y4SGVscGVyKGltcGwp
OworICAgIC8vIEFkZCBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSBzdHlsZXNoZWV0IG9iamVjdCB0
byBpdHMgb3duZXIgbm9kZS4KKyAgICBOb2RlKiBvd25lck5vZGUgPSBpbXBsLT5vd25lck5vZGUo
KTsKKyAgICBpZiAob3duZXJOb2RlICYmICF3cmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG93bmVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dCh0b1Y4KG93bmVyTm9kZSkpOworICAgICAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4
U3R5bGVTaGVldDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdy
YXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTM5NTgpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtOTksNCArMTAwLDE3IEBACiAgICAgcmV0dXJuIFY4QmluZGluZ1NlY3VyaXR5
OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBoaXN0b3J5LT5mcmFtZSgp
LCBmYWxzZSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhpc3RvcnkqIGltcGwp
Cit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7
CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHdyYXBwZXIgPSBWOEhpc3Rv
cnk6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisg
ICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShpbXBsLT5m
cmFtZSgpLCBWOERPTVdpbmRvdzo6aGlzdG9yeUluZGV4LCB3cmFwcGVyKTsKKyAgICB9CisgICAg
cmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24g
NTM5NTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiVjhDb25zb2xlLmgi
CiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRl
IDx2OC5oPgogCkBAIC01NCw0ICs1NCwxNyBAQAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENvbnNvbGUqIGltcGwpCit7CisgICAg
aWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYg
KHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHdyYXBwZXIgPSBWOENvbnNvbGU6OnRvVjhI
ZWxwZXIoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAg
ICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShpbXBsLT5mcmFtZSgpLCBW
OERPTVdpbmRvdzo6Y29uc29sZUluZGV4LCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdy
YXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTM5
NTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPE5v
ZGU+IG9iamVjdCwgU2NyaXB0U3RhdGUqIHN0YXRlKQorc3RhdGljIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOE9iamVjdChQYXNzUmVmUHRyPE5vZGU+IG9iamVjdCwgU2NyaXB0U3Rh
dGUqIHN0YXRlKQogewogICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKHN0YXRlLT5leGNlcHRpb24oKSk7CkBAIC02Miw3ICs2Miw3IEBACiAK
ICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdh
bGtlci0+cGFyZW50Tm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0
YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6Zmlyc3RDaGls
ZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC03Miw3ICs3Miw3IEBACiAK
ICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdh
bGtlci0+Zmlyc3RDaGlsZCgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0
YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bGFzdENoaWxk
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTgyLDcgKzgyLDcgQEAKIAog
ICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fs
a2VyLT5sYXN0Q2hpbGQoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgp
LCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0
ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6Om5leHROb2RlQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAg
IFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2Vy
LT5uZXh0Tm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZz
dGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsK
IH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAg
ICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxr
ZXItPnByZXZpb3VzTm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0
YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bmV4dFNpYmxp
bmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTEyLDcgKzExMiw3IEBA
CiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJl
ZVdhbGtlci0+bmV4dFNpYmxpbmcoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVs
ZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCks
ICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRyZWVXYWxrZXI6OnByZXZp
b3VzU2libGluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMjIsNyAr
MTIyLDcgQEAKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1
bHQgPSB0cmVlV2Fsa2VyLT5wcmV2aW91c1NpYmxpbmcoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3Vs
dC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5z
aWduZWRJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw2ICs2MywxNiBAQAogICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdM
VW5zaWduZWRJbnRBcnJheSwgVjhXZWJHTFVuc2lnbmVkSW50QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJ
bmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoV2ViR0xVbnNpZ25lZEludEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gVjhXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3BlcnRp
ZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCksIHY4OjprRXh0ZXJuYWxV
bnNpZ25lZEludEFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNW
R0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyIpIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR3dpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkd0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMiKSByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdJTkNMVURJTkciKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdC
VVQgTk9UCisgKiBMSU1JVEVEIFRPIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0lORElSRUNUIikgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwiKSByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxTVkdFWEVNUExBUlkiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R0JVVCBOT1QKKyAqIExJTUlURUQgVE8iKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFkiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdXSEVUSEVSIElOIENPTlRSQUNU
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHU1RSSUNUIExJQUJJTElUWSIpIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFNWR09SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0VWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlY4U1ZHRWxlbWVudC5oIgorCisjaWYgRU5BQkxFKFNWRykKKworI2luY2x1
ZGUgIlY4U1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRWxlbWVudCogaW1wbCwgYm9vbCBmb3Jj
ZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OworICAgIHJldHVybiBjcmVhdGVWOFNWR1dyYXBwZXIoaW1wbCwgZm9yY2VOZXdPYmplY3QpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50QXJyYXlD
dXN0b20uY3BwCShyZXZpc2lvbiA1Mzk1OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE2
IEBACiAgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8V2ViR0xJbnRBcnJheSwgVjhXZWJHTEludEFy
cmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJSQVkpOwogfQogCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChXZWJHTEludEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gVjhXZWJHTEludEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9F
eHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsSW50QXJy
YXksIGltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDUzOTU4KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNiBA
QAogICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdMU2hvcnRBcnJheSwgVjhXZWJHTFNob3J0
QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZKTsKIH0KIAordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoV2ViR0xTaG9ydEFycmF5KiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gVjhXZWJHTFNob3J0QXJyYXk6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3Bl
cnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCksIHY4OjprRXh0ZXJu
YWxTaG9ydEFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlY4U2NyZWVuLmgiCisKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFNjcmVlbiogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdl
dERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsK
KyAgICAgICAgd3JhcHBlciA9IFY4U2NyZWVuOjp0b1Y4SGVscGVyKGltcGwpOworICAgICAgICBp
ZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRk
ZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OnNjcmVlbkluZGV4
LCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJ
bmZvQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QmFySW5mb0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhCYXJJbmZvLmgiCisKKyNpbmNsdWRlICJWOERPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJhckluZm8qIGltcGwpCit7CisgICAgaWYg
KCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdy
YXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHdyYXBwZXIgPSBWOEJhckluZm86OnRvVjhIZWxw
ZXIoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGltcGwt
PnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKKyAgICAg
ICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwg
VjhET01XaW5kb3c6OmxvY2F0aW9uYmFySW5kZXgsIHdyYXBwZXIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgorICAgICAgICAgICAg
ICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdp
bmRvdzo6bWVudWJhckluZGV4LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQmFySW5mbzo6UGVyc29uYWxiYXI6CisgICAgICAgICAgICAgICAgVjhE
T01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93Ojpw
ZXJzb25hbGJhckluZGV4LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQmFySW5mbzo6U2Nyb2xsYmFyczoKKyAgICAgICAgICAgICAgICBWOERPTVdy
YXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnNjcm9s
bGJhcnNJbmRleCwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJhckluZm86OlN0YXR1c2JhcjoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6
OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2Jhcklu
ZGV4LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
QmFySW5mbzo6VG9vbGJhcjoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRl
bldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnRvb2xiYXJJbmRleCwgd3JhcHBl
cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA1Mzk1OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC02NTAsNyArNjUwLDEwIEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRU
aHJlYWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3Ry
YWN0V29ya2VyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
QXR0ckN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhcklu
Zm9DdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQ
aXhlbEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViR0xBcnJheUN1c3RvbS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViR0xBcnJheUJ1ZmZlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAnLApAQCAtNjYzLDcgKzY2NiwxMCBA
QAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2Fy
ZEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5h
dGVzQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVs
ZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxl
RGVjbGFyYXRpb25DdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDb25zb2xlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tQmluZGluZy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21FdmVudExpc3RlbmVyLmNwcCcsCkBAIC02ODksNiArNjk1LDcgQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9u
Q2FjaGVDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01T
ZWxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhE
T01QYXJzZXJDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERvY3VtZW50Q3VzdG9tLmNwcCcsCkBAIC03MDUsNiArNzEyLDcgQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEYXRhR3JpZEVsZW1lbnRDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVu
dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFt
ZUVsZW1lbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCcsCkBAIC03MzgsMTAgKzc0NiwxNSBAQAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0
b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1
c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50
SW5zdGFuY2VDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdMZW5ndGhDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdNYXRyaXhDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdQYXRoU2VnQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U2NyZWVuQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2hh
cmVkV29ya2VyQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U3R5bGVTaGVldEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCcsCkluZGV4OiBXZWJDb3JlL0Fu
ZHJvaWQudjhiaW5kaW5ncy5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQudjhiaW5k
aW5ncy5tawkocmV2aXNpb24gNTM5NTgpCisrKyBXZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5t
awkod29ya2luZyBjb3B5KQpAQCAtODcsOCArODcsMTMgQEAKIAlcCiAJYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhB
dHRyQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1c3RvbS5j
cHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1J1bGVDdXN0b20uY3BwIFwKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBcCisgICAgYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9W
OENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJv
YXJkQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0ZXNDdXN0b20u
Y3BwIFwKQEAgLTEwMiw2ICsxMDcsNyBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVZv
aWRDYWxsYmFjay5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2Fj
aGVDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhET01QYXJzZXJDb25zdHJ1Y3Rv
ci5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHAg
XAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgXAogCWJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcCBcCkBAIC0xMjAsNiArMTI2LDcgQEAKIAliaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEYXRhR3JpZEVsZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MRWxlbWVudEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3Jt
RWxlbWVudEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1l
bnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50
Q3VzdG9tLmNwcCBcCkBAIC0xNDEsMjAgKzE0OCwyNSBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVGaWx0ZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0
b3JDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAg
XAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92
OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKIAogaWZlcSAoJChFTkFCTEVfU1ZHKSwgdHJ1ZSkKIExP
Q0FMX1NSQ19GSUxFUyArPSBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRD
dXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNw
cCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCBc
CiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNWR1BhdGhTZWdDdXN0b20uY3BwIFwKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxFUyArPSBcCiAJ
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFN0eWxlU2hlZXRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20u
Y3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5j
cHAgXAo=
</data>
<flag name="review"
          id="30051"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47721</attachid>
            <date>2010-01-29 10:39:19 -0800</date>
            <delta_ts>2010-02-01 11:24:23 -0800</delta_ts>
            <desc>Attempt #3.1</desc>
            <filename>tov8_3.txt</filename>
            <type>text/plain</type>
            <size>111918</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw4IEBACiB1c2UgU3dpdGNoOwogCiBt
eSAkcHJpbnRGYWN0b3J5ID0gMDsgCi1teSAkcHJpbnRXcmFwcGVyRmFjdG9yeSA9IDA7CitteSAk
cHJpbnRXcmFwcGVyRmFjdG9yeSA9IDA7IAorbXkgJHByaW50V3JhcHBlckZhY3RvcnlWOCA9IDA7
IAogbXkgJHRhZ3NGaWxlID0gIiI7CiBteSAkYXR0cnNGaWxlID0gIiI7CiBteSAkb3V0cHV0RGly
ID0gIi4iOwpAQCAtNTUsNyArNTYsOCBAQAogICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXRE
aXIsCiAgICAgJ2V4dHJhRGVmaW5lcz1zJyA9PiBcJGV4dHJhRGVmaW5lcywKICAgICAncHJlcHJv
Y2Vzc29yPXMnID0+IFwkcHJlcHJvY2Vzc29yLAotICAgICd3cmFwcGVyRmFjdG9yeScgPT4gXCRw
cmludFdyYXBwZXJGYWN0b3J5CisgICAgJ3dyYXBwZXJGYWN0b3J5JyA9PiBcJHByaW50V3JhcHBl
ckZhY3RvcnksCisgICAgJ3dyYXBwZXJGYWN0b3J5VjgnID0+IFwkcHJpbnRXcmFwcGVyRmFjdG9y
eVY4CiApOwogCiBkaWUgIllvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mIC0tdGFncyA8
ZmlsZT4gb3IgLS1hdHRycyA8ZmlsZT4iIHVubGVzcyAobGVuZ3RoKCR0YWdzRmlsZSkgfHwgbGVu
Z3RoKCRhdHRyc0ZpbGUpKTsKQEAgLTcxLDcgKzczLDcgQEAKIG1rcGF0aCgkb3V0cHV0RGlyKTsK
IG15ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5h
bWVzIjsKIG15ICRmYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudEZhY3RvcnkiOwotbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGggPSAiJG91
dHB1dERpci9KUyRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnkiOwor
bXkgJHdyYXBwZXJGYWN0b3J5RmlsZU5hbWUgPSAiJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnRXcmFwcGVyRmFjdG9yeSI7CiAKIHByaW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0
aC5oIik7CiBwcmludE5hbWVzQ3BwRmlsZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7CkBAIC04MSwx
MSArODMsMTkgQEAKICAgICBwcmludEZhY3RvcnlIZWFkZXJGaWxlKCIkZmFjdG9yeUJhc2VQYXRo
LmgiKTsKIH0KIAorZGllICJZb3UgY2Fubm90IHNwZWNpZnkgYm90aCAtLXdyYXBwZXJGYWN0b3J5
IGFuZCAtLXdyYXBwZXJGYWN0b3J5VjgiIGlmICRwcmludFdyYXBwZXJGYWN0b3J5ICYmICRwcmlu
dFdyYXBwZXJGYWN0b3J5Vjg7CitteSAkd3JhcHBlckZhY3RvcnlUeXBlID0gIiI7CiBpZiAoJHBy
aW50V3JhcHBlckZhY3RvcnkpIHsKLSAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgiJHdy
YXBwZXJGYWN0b3J5QmFzZVBhdGguY3BwIik7Ci0gICAgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRl
ckZpbGUoIiR3cmFwcGVyRmFjdG9yeUJhc2VQYXRoLmgiKTsKKyAgICAkd3JhcHBlckZhY3RvcnlU
eXBlID0gIkpTIjsKK30gZWxzaWYgKCRwcmludFdyYXBwZXJGYWN0b3J5VjgpIHsKKyAgICAkd3Jh
cHBlckZhY3RvcnlUeXBlID0gIlY4IjsKIH0KIAoraWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUpIHsK
KyAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgkb3V0cHV0RGlyLCAkd3JhcHBlckZhY3Rv
cnlUeXBlLCAkd3JhcHBlckZhY3RvcnlGaWxlTmFtZSk7CisgICAgcHJpbnRXcmFwcGVyRmFjdG9y
eUhlYWRlckZpbGUoJG91dHB1dERpciwgJHdyYXBwZXJGYWN0b3J5VHlwZSwgJHdyYXBwZXJGYWN0
b3J5RmlsZU5hbWUpOworfQorCiAjIyMgSGFzaCBpbml0aWFsaXphdGlvbgogCiBzdWIgZGVmYXVs
dFRhZ1Byb3BlcnR5SGFzaApAQCAtNTU1LDYgKzU2NSw3IEBACiBzdWIgcHJpbnRKU0VsZW1lbnRJ
bmNsdWRlcwogewogICAgIG15ICRGID0gc2hpZnQ7CisgICAgbXkgJHdyYXBwZXJGYWN0b3J5VHlw
ZSA9IHNoaWZ0OwogCiAgICAgbXkgJXRhZ3NTZWVuOwogICAgIGZvciBteSAkdGFnTmFtZSAoc29y
dCBrZXlzICV0YWdzKSB7CkBAIC01NjIsNyArNTczLDcgQEAKICAgICAgICAgbmV4dCBpZiBkZWZp
bmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIo
JHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCi0g
ICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMke0pTSW50ZXJmYWNlTmFtZX0uaFwiXG4iOwor
ICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcIiR7d3JhcHBlckZhY3RvcnlUeXBlfSR7SlNJbnRl
cmZhY2VOYW1lfS5oXCJcbiI7CiAgICAgfQogfQogCkBAIC03OTksNiArODEwLDcgQEAKIHN1YiBw
cmludFdyYXBwZXJGdW5jdGlvbnMKIHsKICAgICBteSAkRiA9IHNoaWZ0OworICAgIG15ICR3cmFw
cGVyRmFjdG9yeVR5cGUgPSBzaGlmdDsKIAogICAgIG15ICV0YWdzU2VlbjsKICAgICBmb3IgbXkg
JHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgewpAQCAtODEzLDEwICs4MjUsMTEgQEAKICAgICAg
ICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iOwogICAgICAgICB9
CiAKLSAgICAgICAgIyBIYWNrIGZvciB0aGUgbWVkaWEgdGFncwotICAgICAgICAjIEZJWE1FOiBU
aGlzIHNob3VsZCBoYXZlIGJlZW4gZG9uZSB2aWEgYSBDdXN0b21XcmFwcGVyIGF0dHJpYnV0ZSBh
bmQgYSBzZXBhcmF0ZSAqQ3VzdG9tIGZpbGUuCi0gICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17
d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7Ci0gICAgICAgICAgICBwcmludCBGIDw8
RU5ECisgICAgICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsKKyAgICAgICAg
ICAgICMgSGFjayBmb3IgdGhlIG1lZGlhIHRhZ3MKKyAgICAgICAgICAgICMgRklYTUU6IFRoaXMg
c2hvdWxkIGhhdmUgYmVlbiBkb25lIHZpYSBhIEN1c3RvbVdyYXBwZXIgYXR0cmlidXRlIGFuZCBh
IHNlcGFyYXRlICpDdXN0b20gZmlsZS4KKyAgICAgICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17
d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7CisgICAgICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAogc3RhdGljIEpTTm9kZSogY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgaWYgKCFN
ZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkKQEAgLTgyNiw4ICs4MzksOCBAQAogCiBFTkQKIDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogc3RhdGljIEpTTm9kZSog
Y3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNl
fUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIENSRUFURV9ET01fTk9ERV9XUkFQUEVS
KGV4ZWMsIGdsb2JhbE9iamVjdCwgJHtKU0ludGVyZmFjZU5hbWV9LCBlbGVtZW50LmdldCgpKTsK
QEAgLTgzNSw2ICs4NDgsMTYgQEAKIAogRU5ECiA7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgeworICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNl
TmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQp
KTsKK30KKworRU5ECis7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7
CkBAIC04NDUsOSArODY4LDExIEBACiAKIHN1YiBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZQog
ewotICAgIG15ICRjcHBQYXRoID0gc2hpZnQ7CisgICAgbXkgJG91dHB1dERpciA9IHNoaWZ0Owor
ICAgIG15ICR3cmFwcGVyRmFjdG9yeVR5cGUgPSBzaGlmdDsKKyAgICBteSAkd3JhcHBlckZhY3Rv
cnlGaWxlTmFtZSA9IHNoaWZ0OwogICAgIG15ICRGOwotICAgIG9wZW4gRiwgIj4kY3BwUGF0aCI7
CisgICAgb3BlbiBGLCAiPiIgLiAkb3V0cHV0RGlyIC4gIi8iIC4gJHdyYXBwZXJGYWN0b3J5VHlw
ZSAuICR3cmFwcGVyRmFjdG9yeUZpbGVOYW1lIC4gIi5jcHAiOwogCiAgICAgcHJpbnRMaWNlbnNl
SGVhZGVyKCRGKTsKIApAQCAtODU1LDM4ICs4ODAsNzMgQEAKIAogICAgIHByaW50IEYgIiNpZiAk
cGFyYW1ldGVyc3tndWFyZEZhY3RvcnlXaXRofVxuXG4iIGlmICRwYXJhbWV0ZXJze2d1YXJkRmFj
dG9yeVdpdGh9OwogCi0gICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJKUyRwYXJhbWV0ZXJze25hbWVz
cGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnkuaFwiXG4iOworICAgIHByaW50IEYgIiNpbmNsdWRl
IFwiJHdyYXBwZXJGYWN0b3J5VHlwZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBl
ckZhY3RvcnkuaFwiXG4iOwogCi0gICAgcHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRik7CisgICAg
cHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRiwgJHdyYXBwZXJGYWN0b3J5VHlwZSk7CiAKICAgICBw
cmludCBGICJcbiNpbmNsdWRlIFwiJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5hbWVzLmhcIlxuXG4i
OwogCiAgICAgcHJpbnRFbGVtZW50SW5jbHVkZXMoJEYpOwogCiAgICAgcHJpbnQgRiAiXG4jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPlxuXG4iOwotICAgIAotICAgIHByaW50IEYgPDxFTkQK
KworICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsgICAgCisgICAgICAgIHBy
aW50IEYgPDxFTkQKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CitFTkQKKzsKKyAgICB9IGVsc2lmICgk
d3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAorI2lu
Y2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQuaCIKKyAgICAgICAgCisjaW5j
bHVkZSA8djguaD4KK0VORAorOworICAgIH0KIAorICAgIHByaW50IEYgPDxFTkQKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5h
bWVzOwogCitFTkQKKzsKKyAgICBpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiSlMiKSB7Cisg
ICAgICAgIHByaW50IEYgPDxFTkQKIHR5cGVkZWYgSlNOb2RlKiAoKkNyZWF0ZSRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+KTsKIAog
RU5ECiA7CisgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CisgICAg
ICAgIHByaW50IEYgPDxFTkQKK3R5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICgqQ3JlYXRl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50Kik7CiAKLSAgICBwcmludFdyYXBwZXJGdW5jdGlvbnMoJEYpOwor
RU5ECis7CisgICAgfQogCi0gICAgcHJpbnQgRiA8PEVORAorICAgIHByaW50V3JhcHBlckZ1bmN0
aW9ucygkRiwgJHdyYXBwZXJGYWN0b3J5VHlwZSk7CisKKyAgICBpZiAoJHdyYXBwZXJGYWN0b3J5
VHlwZSBlcSAiSlMiKSB7CisgICAgICAgIHByaW50IEYgPDxFTkQKIEpTTm9kZSogY3JlYXRlSlMk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVs
ZW1lbnQ+IGVsZW1lbnQpCi17ICAgCit7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkF0
b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBw
ZXJGdW5jdGlvbj4gRnVuY3Rpb25NYXA7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlv
bk1hcCwgbWFwLCAoKSk7CiAgICAgaWYgKG1hcC5pc0VtcHR5KCkpIHsKIEVORAogOworICAgIH0g
ZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgeworICAgICAgICBwcmludCBGIDw8
RU5ECit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgYm9vbCBmb3Jj
ZU5ld09iamVjdCkKK3sKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBGdW5jdGlvbk1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZ1bmN0aW9uTWFwLCBtYXAs
ICgpKTsKKyAgICBpZiAobWFwLmlzRW1wdHkoKSkgeworRU5ECis7CisgICAgfQogCiAgICAgZm9y
IG15ICR0YWcgKHNvcnQga2V5cyAldGFncykgewogICAgICAgICAjIERvIG5vdCBhZGQgdGhlIG5h
bWUgdG8gdGhlIG1hcCBpZiBpdCBkb2VzIG5vdCBoYXZlIGEgSlMgd3JhcHBlciBjb25zdHJ1Y3Rv
ciBvciB1c2VzIHRoZSBkZWZhdWx0IHdyYXBwZXIuCkBAIC05MTAsOCArOTcwLDIyIEBACiAgICAg
fQogICAgIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
IGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9IG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKTsKICAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9uKQorRU5ECis7CisgICAgaWYgKCR3
cmFwcGVyRmFjdG9yeVR5cGUgZXEgIkpTIikgeworICAgICAgICBwcmludCBGIDw8RU5ECiAgICAg
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KTsKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCwgZWxlbWVudC5nZXQoKSk7CitFTkQK
KzsKKyAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAg
cHJpbnQgRiA8PEVORAorICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlckZ1bmN0aW9uKGVsZW1l
bnQpOworICAgIHJldHVybiBWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Ojp0b1Y4SGVs
cGVyKGVsZW1lbnQsIGZvcmNlTmV3T2JqZWN0KTsKK0VORAorOworICAgIH0KKyAgICBwcmludCBG
IDw8RU5ECiB9CiAKIH0KQEAgLTkyNiwxOCArMTAwMCwyMSBAQAogCiBzdWIgcHJpbnRXcmFwcGVy
RmFjdG9yeUhlYWRlckZpbGUKIHsKLSAgICBteSAkaGVhZGVyUGF0aCA9IHNoaWZ0OworICAgIG15
ICRvdXRwdXREaXIgPSBzaGlmdDsKKyAgICBteSAkd3JhcHBlckZhY3RvcnlUeXBlID0gc2hpZnQ7
CisgICAgbXkgJHdyYXBwZXJGYWN0b3J5RmlsZU5hbWUgPSBzaGlmdDsKICAgICBteSAkRjsKLSAg
ICBvcGVuIEYsICI+JGhlYWRlclBhdGgiOworICAgIG9wZW4gRiwgIj4iIC4gJG91dHB1dERpciAu
ICIvIiAuICR3cmFwcGVyRmFjdG9yeVR5cGUgLiAkd3JhcHBlckZhY3RvcnlGaWxlTmFtZSAuICIu
aCI7CiAKICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogCi0gICAgcHJpbnQgRiAiI2lmbmRl
ZiBKUyRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKLSAg
ICBwcmludCBGICIjZGVmaW5lIEpTJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVy
RmFjdG9yeV9oXG5cbiI7CisgICAgcHJpbnQgRiAiI2lmbmRlZiAkd3JhcHBlckZhY3RvcnlUeXBl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHBy
aW50IEYgIiNkZWZpbmUgJHdyYXBwZXJGYWN0b3J5VHlwZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1F
bGVtZW50V3JhcHBlckZhY3RvcnlfaFxuXG4iOwogCiAgICAgcHJpbnQgRiAiI2lmICRwYXJhbWV0
ZXJze2d1YXJkRmFjdG9yeVdpdGh9XG4iIGlmICRwYXJhbWV0ZXJze2d1YXJkRmFjdG9yeVdpdGh9
OwogCi0gICAgcHJpbnQgRiA8PEVORAorICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJK
UyIpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtOTU2LDEwICsxMDMzLDIzIEBACiAgCiBFTkQKIDsKKyAgICB9
IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAgcHJpbnQgRiA8
PEVORAorI2luY2x1ZGUgPHY4Lmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
ICRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50OworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZVY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUVsZW1lbnQqLCBib29sKTsKK30KK0VORAorOworICAgIH0KKwogICAgIHByaW50IEYg
IiNlbmRpZiAvLyAkcGFyYW1ldGVyc3tndWFyZEZhY3RvcnlXaXRofVxuXG4iIGlmICRwYXJhbWV0
ZXJze2d1YXJkRmFjdG9yeVdpdGh9OwogCi0gICAgcHJpbnQgRiAiI2VuZGlmIC8vIEpTJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYg
IiNlbmRpZiAvLyAkd3JhcHBlckZhY3RvcnlUeXBlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnRXcmFwcGVyRmFjdG9yeV9oXG4iOwogCiAgICAgY2xvc2UgRjsKIH0KSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDA3
MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAK
KzIwMTAtMDEtMjkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhdIEdlbmVyYXRlIHRv
VjgoKSBjb252ZXJ0ZXIgZm9yIG1vc3QgV2ViQ29yZS0+VjggY29udmVyc2lvbnMsCisgICAgICAg
IGFuZCBkZWZpbmVkIGN1c3RvbSBjb252ZXJ0ZXJzIGluIHRoZWlyIHJlc3BlY3RpdmUgVjg8Y2xh
c3M+Q3VzdG9tLmNwcC4KKyAgICAgICAgCisgICAgICAgIE9sZCBjb252ZXJ0ZXJzIGluIFY4RE9N
V3JhcHBlciB3aWxsIGJlIGRlbGV0ZWQgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2MworCisgICAg
ICAgICogQW5kcm9pZC52OGJpbmRpbmdzLm1rOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhCYXJJbmZvQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q1NTUnVsZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9j
dW1lbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdFbGVtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRBcnJheUN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDdXN0b20uY3BwOgorCiAyMDEwLTAxLTI5ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29u
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw5ICszMDIsOCBAQAogICAg
ICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9IVE1MTmFtZXMuY3Bw
JywKICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTE5h
bWVzLmgnLAogICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9I
VE1MRWxlbWVudEZhY3RvcnkuY3BwJywKLSAgICAgICAgICAgICMgUGFzcyAtLXdyYXBwZXJGYWN0
b3J5IHRvIG1ha2VfbmFtZXMgdG8gZ2V0IHRoZXNlIChKU0MgYnVpbGQ/KQotICAgICAgICAgICAg
Iyc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSlNIVE1MRWxlbWVudFdyYXBwZXJG
YWN0b3J5LmNwcCcsCi0gICAgICAgICAgICAjJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dl
YmtpdC9KU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCcsCisgICAgICAgICAgICAnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1Y4SFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5j
cHAnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9WOEhU
TUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCcsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnYWN0
aW9uJzogWwogICAgICAgICAgICAgJ3B5dGhvbicsCkBAIC0zMTQsNiArMzEzLDcgQEAKICAgICAg
ICAgICAgICc8QChfaW5wdXRzKScsCiAgICAgICAgICAgICAnLS0nLAogICAgICAgICAgICAgJy0t
ZmFjdG9yeScsCisgICAgICAgICAgICAnLS13cmFwcGVyRmFjdG9yeVY4JywKICAgICAgICAgICAg
ICctLWV4dHJhRGVmaW5lcycsICc8KGZlYXR1cmVfZGVmaW5lcyknCiAgICAgICAgICAgXSwKICAg
ICAgICAgfSwKQEAgLTMyOSw5ICszMjksOCBAQAogICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9TVkdOYW1lcy5oJywKICAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJraXQvU1ZHRWxlbWVudEZhY3RvcnkuY3BwJywKICAgICAgICAg
ICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvU1ZHRWxlbWVudEZhY3Rvcnku
aCcsCi0gICAgICAgICAgICAjIFBhc3MgLS13cmFwcGVyRmFjdG9yeSB0byBtYWtlX25hbWVzIHRv
IGdldCB0aGVzZSAoSlNDIGJ1aWxkPykKLSAgICAgICAgICAgICMnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2Via2l0L0pTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCcsCi0gICAgICAg
ICAgICAjJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9KU1NWR0VsZW1lbnRXcmFw
cGVyRmFjdG9yeS5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93
ZWJraXQvVjhTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwJywKKyAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvVjhTVkdFbGVtZW50V3JhcHBlckZhY3Rvcnku
aCcsCiAgICAgICAgICAgXSwKICAgICAgICAgICAnYWN0aW9uJzogWwogICAgICAgICAgICAgJ3B5
dGhvbicsCkBAIC0zNDEsNiArMzQwLDcgQEAKICAgICAgICAgICAgICc8QChfaW5wdXRzKScsCiAg
ICAgICAgICAgICAnLS0nLAogICAgICAgICAgICAgJy0tZmFjdG9yeScsCisgICAgICAgICAgICAn
LS13cmFwcGVyRmFjdG9yeVY4JywKICAgICAgICAgICAgICctLWV4dHJhRGVmaW5lcycsICc8KGZl
YXR1cmVfZGVmaW5lcyknCiAgICAgICAgICAgXSwKICAgICAgICAgfSwKQEAgLTU4Niw2ICs1ODYs
OCBAQAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1NWR0VsZW1l
bnRGYWN0b3J5LmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvU1ZHTmFtZXMuY3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dl
YmtpdC9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwJywKKyAgICAgICAgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdC9WOEhUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwJywK
KyAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9WOFNWR0VsZW1lbnRX
cmFwcGVyRmFjdG9yeS5jcHAnLAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0L1hMaW5rTmFtZXMuY3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmtpdC9YTUxOU05hbWVzLmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElB
VEVfRElSKS93ZWJraXQvWE1MTmFtZXMuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1NDA3MCkKKysr
IFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02NTAsNyArNjUwLDEwIEBA
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRUaHJlYWRET01EYXRhLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0ckN1c3RvbS5jcHAnLAorICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhckluZm9DdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5oJywKKyAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJh
eUN1c3RvbS5jcHAnLApAQCAtNjYzLDcgKzY2NiwxMCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVzQ3VzdG9tLmNwcCcsCisgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNw
cCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21FdmVudExpc3RlbmVyLmNwcCcs
CkBAIC02ODksNiArNjk1LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhE
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25DdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwJywKQEAgLTcw
NCw2ICs3MTEsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TERhdGFHcmlkRWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwJywK
QEAgLTczNywxMCArNzQ1LDE1IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U3RvcmFnZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNR
TFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAnLAorICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0
b3IuY3BwJywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMTQgKzE1NiwxNSBAQAogCiAgICAg
IyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMg
cmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KLSAgICBp
ZiAoJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgQXZvaWRJbmNsdXNp
b25PZlR5cGUoJHR5cGUpKSB7Ci0gICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhTZWcvKSB7
Ci0gICAgICAgICRqb2luZWROYW1lID0gJHR5cGU7Ci0gICAgICAgICRqb2luZWROYW1lID1+IHMv
QWJzfFJlbC8vOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2pvaW5lZE5hbWV9LmgifSA9IDE7
Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoISRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUo
JHR5cGUpIGFuZCAhQXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUpIGFuZCAkdHlwZSBuZSAiRGF0
ZSIpIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKLSAg
ICAgICAgJGltcGxJbmNsdWRlc3tHZXRJbXBsZW1lbnRhdGlvbkZpbGVOYW1lKCR7dHlwZX0pfSA9
IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7R2V0VjhIZWFkZXJOYW1lKCR7dHlwZX0pfSA9IDE7
CisKKyAgICAgICAgaWYgKCR0eXBlID1+IC9TVkdQYXRoU2VnLykgeworICAgICAgICAgICAgJGpv
aW5lZE5hbWUgPSAkdHlwZTsKKyAgICAgICAgICAgICRqb2luZWROYW1lID1+IHMvQWJzfFJlbC8v
OworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWROYW1lfS5oIn0gPSAxOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgIyBhZGRpdGlvbmFsIGluY2x1ZGVzICh0aGluZ3MgbmVlZGVk
IHRvIGNvbXBpbGUgdGhlIGJpbmRpbmdzIGJ1dCBub3QgdGhlIGhlYWRlcikKQEAgLTIxMCwxNyAr
MjExLDYgQEAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGltcGxDbGFzc05hbWU7
XG5cbiIpIHVubGVzcyAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJGltcGxDbGFz
c05hbWUpOwogfQogCi1zdWIgR2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZQotewotICAgIG15ICRp
ZmFjZSA9IHNoaWZ0OwotICAgIHJldHVybiAiRXZlbnQuaCIgaWYgJGlmYWNlIGVxICJET01UaW1l
U3RhbXAiOwotICAgIHJldHVybiAiTmFtZWRBdHRyTWFwLmgiIGlmICRpZmFjZSBlcSAiTmFtZWRO
b2RlTWFwIjsKLSAgICByZXR1cm4gIk5hbWVOb2RlTGlzdC5oIiBpZiAkaWZhY2UgZXEgIk5vZGVM
aXN0IjsKLSAgICByZXR1cm4gIlhNTEh0dHBSZXF1ZXN0LmgiIGlmICRpZmFjZSBlcSAiWE1MSHR0
cFJlcXVlc3QiOwotCi0gICAgcmV0dXJuICIke2lmYWNlfS5oIjsKLX0KLQogIyBJZiB0aGUgbm9k
ZSBoYXMgYSBbQ29uZGl0aW9uYWw9WFhYXSBhdHRyaWJ1dGUsIHJldHVybnMgYW4gIkVOQUJMRShY
WFgpIiBzdHJpbmcgZm9yIHVzZSBpbiBhbiAjaWYuCiBzdWIgR2VuZXJhdGVDb25kaXRpb25hbFN0
cmluZwogewpAQCAtMjU4LDcgKzI0OCw2IEBACiAKICAgICAjIEdldCBjb3JyZWN0IHBhc3Mvc3Rv
cmUgdHlwZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKICAgICBteSAkcG9kVHlwZSA9ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsKLSAgICBteSAkcGFzc1R5cGUg
PSAkcG9kVHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPioiIDogIiRpbXBsQ2xh
c3NOYW1lKiI7CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCIkcG9kVHlw
ZS5oXCJcbiIpIGlmICRwb2RUeXBlIGFuZCAoJHBvZFR5cGUgbmUgImRvdWJsZSIgYW5kICRwb2RU
eXBlIG5lICJmbG9hdCIgYW5kICRwb2RUeXBlIG5lICJSR0JBMzIiKTsKIApAQCAtMjY4LDE1ICsy
NTcsMjMgQEAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2luY2x1ZGUgXCJWOEluZGV4Lmhc
IlxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2V0SGVhZGVyQ2xhc3NJbmNsdWRlKCRp
bXBsQ2xhc3NOYW1lKSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNwYWNlIFdl
YkNvcmUge1xuIik7CisgICAgaWYgKCRwb2RUeXBlKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJcbnRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+IGNsYXNzIFY4U1ZHUE9EVHlwZVdy
YXBwZXI7XG4iKTsKKyAgICB9CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNs
YXNzTmFtZSB7XG4iKTsKLSAgICAKLSAgICBteSAkdG9OYXRpdmVSZXR1cm5UeXBlID0gR2V0UmV0
dXJuVHlwZUZvclRvTmF0aXZlKCRpbnRlcmZhY2VOYW1lKTsKKworICAgIG15ICRuYXRpdmVUeXBl
ID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBpZiAo
JHBvZFR5cGUpIHsKKyAgICAgICAgJG5hdGl2ZVR5cGUgPSAiVjhTVkdQT0RUeXBlV3JhcHBlcjwk
e25hdGl2ZVR5cGV9ID4iOworICAgIH0KKyAgICBteSAkZm9yY2VOZXdPYmplY3RQYXJhbWV0ZXIg
PSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIsIGJvb2wgZm9yY2VOZXdPYmplY3Qg
PSBmYWxzZSIgOiAiIjsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKICBwdWJs
aWM6CiAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSk7CiAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3
VGVtcGxhdGUoKTsKLSAgc3RhdGljICR7dG9OYXRpdmVSZXR1cm5UeXBlfSogdG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgIHN0YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
dG9WOEhlbHBlcigke25hdGl2ZVR5cGV9KiR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9KTsKIEVO
RAogCiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0zNDYsNyAr
MzQzLDEzIEBACiAgIGZyaWVuZCBjbGFzcyBWOENsYXNzSW5kZXg7CiB9OwogCisgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qJHtmb3JjZU5ld09iamVjdFBhcmFtZXRl
cn0pOwogRU5ECisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW1wbENsYXNzTmFtZSkpIHsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChQYXNzUmVmUHRyPCR7bmF0aXZlVHlwZX0gPiR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9
KTsKK0VORAorICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9XG5cbiIpOwogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYgLy8gJGNsYXNzTmFtZSIgLiAiX0hcbiIpOwpA
QCAtNjY0LDcgKzY2Nyw3IEBACiAgICAgICAgICRhdHRySXNQb2RUeXBlID0gMDsKICAgICB9CiAK
LSAgICBteSAkZ2V0dGVyU3RyaW5nVXNlc0ltcCA9ICRpbXBsQ2xhc3NOYW1lIG5lICJkb3VibGUi
OworICAgIG15ICRnZXR0ZXJTdHJpbmdVc2VzSW1wID0gJGltcGxDbGFzc05hbWUgbmUgImZsb2F0
IjsKIAogICAjIEdldHRlcgogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKQEAg
LTgyMCwxMyArODIzLDE2IEBACiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBH
ZW5lcmF0ZVNWR0NvbnRleHRBc3NpZ25tZW50KCRpbXBsQ2xhc3NOYW1lLCAid3JhcHBlci5nZXQo
KSIsICIgICAgIikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgR2VuZXJhdGVTVkdDb250ZXh0UmV0cmlldmFsKCRpbXBsQ2xhc3NOYW1lLCAi
ICAgICIpKTsKLSAgICAgICAgICAgICRyZXN1bHQgPSAiVjhQcm94eTo6d2l0aFNWR0NvbnRleHQo
JHJlc3VsdCwgY29udGV4dCkiOworICAgICAgICAgICAgIyBUaGUgdGVtcGxhdGluZyBhc3NvY2lh
dGVkIHdpdGggcGFzc2luZyB3aXRoU1ZHQ29udGV4dCgpJ3MgcmV0dXJuIHZhbHVlIGRpcmVjdGx5
IGludG8gdG9WOCBjYW4gZ2V0IGNvbXBpbGVycyBjb25mdXNlZCwKKyAgICAgICAgICAgICMgc28g
anVzdCBtYW51YWxseSBzZXQgdGhlIHJldHVybiB2YWx1ZSB0byBhIFBhc3NSZWZQdHIgb2YgdGhl
IGV4cGVjdGVkIHR5cGUuCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IFBhc3NSZWZQdHI8JGF0dHJUeXBlPiByZXN1bHRBc1Bhc3NSZWZQdHIgPSBWOFByb3h5Ojp3aXRo
U1ZHQ29udGV4dCgkcmVzdWx0LCBjb250ZXh0KTtcbiIpOworICAgICAgICAgICAgJHJlc3VsdCA9
ICJyZXN1bHRBc1Bhc3NSZWZQdHIiOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCRhdHRy
SXNQb2RUeXBlKSB7Ci0gICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJGF0dHJUeXBlKTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyLnJlbGVh
c2UoKSk7XG4iKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke2F0dHJUeXBlfS5oIn0gPSAx
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KHdyYXBw
ZXIucmVsZWFzZSgpLmdldCgpKTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsICRyZXN1bHQsICIgICAgIikuIjtcbiIpOwogICAgIH0KQEAgLTk0Miw3ICs5
NDgsNyBAQAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwO1xuIik7CiAgICAgfQogCi0gICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJkb3Vi
bGUiKSB7CisgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJmbG9hdCIpIHsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICAqaW1wID0gJHJlc3VsdDtcbiIpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3It
PldLX3VjZmlyc3QoJGF0dHJOYW1lKTsKQEAgLTE0NzEsNyArMTQ3Nyw5IEBACiAgICAgICAgICAi
I2luY2x1ZGUgXCJjb25maWcuaFwiXG4iIC4KICAgICAgICAgICIjaW5jbHVkZSBcIlY4UHJveHku
aFwiXG4iIC4KICAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGluZy5oXCJcbiIgLgotICAgICAg
ICAgIiNpbmNsdWRlIFwiVjhCaW5kaW5nU3RhdGUuaFwiXG5cbiIgLgorICAgICAgICAgIiNpbmNs
dWRlIFwiVjhCaW5kaW5nU3RhdGUuaFwiXG4iIC4KKyAgICAgICAgICIjaW5jbHVkZSBcIlY4RE9N
V3JhcHBlci5oXCJcbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhJc29sYXRlZENvbnRleHQu
aFwiXG5cbiIgLgogICAgICAgICAgIiN1bmRlZiBMT0dcblxuIik7CiAKICAgICBwdXNoKEBpbXBs
Rml4ZWRIZWFkZXIsICJcbiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CkBAIC0xODg3LDcgKzE4OTUsMTAgQEAKIEVORAogICAgIH0KIAotICAgICR0
b05hdGl2ZVJldHVyblR5cGUgPSBHZXRSZXR1cm5UeXBlRm9yVG9OYXRpdmUoJGludGVyZmFjZU5h
bWUpOworICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zKCRp
bnRlcmZhY2VOYW1lKTsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UE9EVHlwZSJ9KSB7CisgICAgICAgICRuYXRpdmVUeXBlID0gIlY4U1ZHUE9EVHlwZVdyYXBwZXI8
JHtuYXRpdmVUeXBlfT4iOworICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwog
ICAKICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCkBAIC0xOTA1LDggKzE5MTYsOCBAQAog
ICByZXR1cm4gJHtjbGFzc05hbWV9X2NhY2hlXzsKIH0KIAotJHt0b05hdGl2ZVJldHVyblR5cGV9
KiAke2NsYXNzTmFtZX06OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KSB7
Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PCR7dG9OYXRpdmVSZXR1cm5UeXBlfSo+KG9iamVj
dC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7
IAorJHtuYXRpdmVUeXBlfSogJHtjbGFzc05hbWV9Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9
Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0
SW5kZXgpKTsgCiB9CiAKIGJvb2wgJHtjbGFzc05hbWV9OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUpIHsKQEAgLTE5MjcsNiArMTkzOCw4IEBACiB9CiBFTkQKICAgICB9
CisgICAgCisgICAgR2VuZXJhdGVUb1Y4Q29udmVydGVycygkZGF0YU5vZGUsICRpbnRlcmZhY2VO
YW1lLCAkY2xhc3NOYW1lLCAkbmF0aXZlVHlwZSk7CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtMTkzNSw5ICsxOTQ4LDE2OSBAQAog
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31c
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAotc3ViIEdldFJldHVyblR5cGVGb3JUb05h
dGl2ZQorc3ViIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMgCiB7CisgICAgbXkgJGRhdGFOb2RlID0g
c2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NOYW1l
ID0gc2hpZnQ7CisgICAgbXkgJG5hdGl2ZVR5cGUgPSBzaGlmdDsKKyAgICAKKyAgICBteSAkd3Jh
cHBlclR5cGUgPSAiVjhDbGFzc0luZGV4OjoiIC4gdWMoJGludGVyZmFjZU5hbWUpOworICAgIG15
ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRhTm9kZSwgJGludGVyZmFj
ZU5hbWUpOworICAgIG15ICRmb3JjZU5ld09iamVjdElucHV0ID0gSXNET01Ob2RlVHlwZSgkaW50
ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2JqZWN0IiA6ICIiOworICAgIG15ICRmb3Jj
ZU5ld09iamVjdENhbGwgPSBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIsIGZvcmNl
TmV3T2JqZWN0IiA6ICIiOworICAgIAorICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7ICAg
CisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp0b1Y4SGVscGVyKCR7bmF0
aXZlVHlwZX0qIGltcGwke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KSB7CisgIFY4UHJveHkqIHByb3h5
ID0gMDsKKyAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOworRU5ECisKKyAgICBpZiAo
SXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8
PEVORCk7CisgIGlmIChpbXBsLT5kb2N1bWVudCgpKSB7CisgICAgcHJveHkgPSBWOFByb3h5Ojpy
ZXRyaWV2ZShpbXBsLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBpZiAocHJveHkgJiYgc3Rh
dGljX2Nhc3Q8Tm9kZSo+KGltcGwtPmRvY3VtZW50KCkpID09IHN0YXRpY19jYXN0PE5vZGUqPihp
bXBsKSkKKyAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4dElmTmVlZGVkKCk7
CisgIH0KKworRU5ECisgICAgfQorCisgICAgaWYgKCRkb21NYXBGdW5jdGlvbikgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWZvcmNlTmV3T2JqZWN0KSB7XG4iKSBpZiBJ
c0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKKyAgd3JhcHBlciA9ICR7ZG9tTWFwRnVuY3Rpb259LmdldChpbXBsKTsKKyAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICByZXR1cm4gd3JhcHBlcjsKK0VORAorICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKSBpZiBJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VO
YW1lKTsKKyAgICB9CisgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworCisgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQ7CisgIGlmIChwcm94eSkKKyAgICBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsK
KworICAvLyBFbnRlciB0aGUgbm9kZSdzIGNvbnRleHQgYW5kIGNyZWF0ZSB0aGUgd3JhcHBlciBp
biB0aGF0IGNvbnRleHQuCisgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisgICAgY29udGV4dC0+
RW50ZXIoKTsKK0VORAorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cisg
IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICR7d3Jh
cHBlclR5cGV9LCBpbXBsKTsKK0VORAorCisgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2Rl
KSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAvLyBFeGl0IHRoZSBu
b2RlJ3MgY29udGV4dCBpZiBpdCB3YXMgZW50ZXJlZC4KKyAgaWYgKCFjb250ZXh0LklzRW1wdHko
KSkKKyAgICBjb250ZXh0LT5FeGl0KCk7CitFTkQKKyAgICB9CisgICAgCisgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKyAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgIHJldHVybiB3
cmFwcGVyOworRU5ECisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgaW1wbC0+cmVmKCk7XG4i
KSBpZiBJc1JlZlB0clR5cGUoJGludGVyZmFjZU5hbWUpOworCisgICAgaWYgKCRkb21NYXBGdW5j
dGlvbikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAke2RvbU1hcEZ1
bmN0aW9ufS5zZXQoaW1wbCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVy
KSk7CitFTkQKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICByZXR1
cm4gd3JhcHBlcjsKK30KK0VORAorCisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW50ZXJmYWNlTmFt
ZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwke25hdGl2ZVR5cGV9ID4gaW1wbCR7Zm9yY2VOZXdP
YmplY3RJbnB1dH0pIHsKKyAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSR7Zm9yY2VOZXdPYmplY3RD
YWxsfSk7Cit9CitFTkQKKyAgICB9CisgICAgCisgICAgaWYgKCFIYXNDdXN0b21Ub1Y4SW1wbGVt
ZW50YXRpb24oJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRpdmVU
eXBlfSogaW1wbCR7Zm9yY2VOZXdPYmplY3RJbnB1dH0pIHsKKyAgaWYgKCFpbXBsKQorICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICByZXR1cm4gJHtjbGFzc05hbWV9Ojp0b1Y4SGVscGVyKGltcGwk
e2ZvcmNlTmV3T2JqZWN0Q2FsbH0pOworfQorRU5ECisgICAgfQorfQorCitzdWIgSGFzQ3VzdG9t
VG9WOEltcGxlbWVudGF0aW9uIHsKKyAgICAjIEZJWE1FOiBUaGlzIHN1YnJvdXRpbmUgaXMgbGFt
ZS4gUHJvYmFibHkgc2hvdWxkIGJlIGFuIC5pZGwgYXR0cmlidXRlIChDdXN0b21Ub1Y4KT8KKyAg
ICAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIAor
ICAgICMgV2UgZ2VuZXJhdGUgYSBjdXN0b20gY29udmVydGVyIChidXQgSlNDIGRvZXNuJ3QpIGZv
ciB0aGUgZm9sbG93aW5nOgorICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJCYXJJ
bmZvIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQ1NTU3R5bGVTaGVldCI7
CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkNhbnZhc1BpeGVsQXJyYXkiOwor
ICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJDb25zb2xlIjsKKyAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NU2VsZWN0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNl
TmFtZSBlcSAiRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkxv
Y2F0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTERvY3VtZW50
IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTEVsZW1lbnQiOworICAg
IHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJIaXN0b3J5IjsKKyAgICByZXR1cm4gMSBp
ZiAkaW50ZXJmYWNlTmFtZSBlcSAiTmFtZWROb2RlTWFwIjsKKyAgICByZXR1cm4gMSBpZiAkaW50
ZXJmYWNlTmFtZSBlcSAiTmF2aWdhdG9yIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiU1ZHRG9jdW1lbnQiOworICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJT
VkdFbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU2NyZWVuIjsK
KyAgICAKKyAgICAjIFdlIGRvbid0IGdlbmVyYXRlIGEgY3VzdG9tIGNvbnZlcnRlciAoYnV0IEpT
QyBkb2VzKSBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiQWJzdHJhY3RXb3JrZXIiOworICAgIHJldHVybiAwIGlmICRpbnRlcmZhY2VOYW1lIGVx
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0IjsKKyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiSW1hZ2VEYXRhIjsKKyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZH
RWxlbWVudEluc3RhbmNlIjsKKworICAgICMgRm9yIGV2ZXJ5dGhpbmcgZWxzZSwgZG8gd2hhdCBK
U0MgZG9lcy4KKyAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tVG9KUyJ9OworfQorCitzdWIgR2V0RG9tTWFwRnVuY3Rpb24KK3sKKyAgICBteSAkZGF0YU5v
ZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAiZ2V0RE9NU1ZH
RWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0eXBlIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiOwor
ICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgpIiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7
CisgICAgIyBPbmx5IHVzZSBnZXRET01TVkdPYmplY3RXaXRoQ29udGV4dE1hcCgpIGZvciBub24t
bm9kZSBzdmcgb2JqZWN0cworICAgIHJldHVybiAiZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRN
YXAoKSIgaWYgJHR5cGUgPX4gL1NWRy87CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01J
bXBsZW1lbnRhdGlvbiI7CisgICAgcmV0dXJuICJnZXRBY3RpdmVET01PYmplY3RNYXAoKSIgaWYg
SXNBY3RpdmVEb21UeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImdldERPTU9iamVjdE1hcCgpIjsK
K30KKworc3ViIElzQWN0aXZlRG9tVHlwZQoreworICAgICMgRklYTUU6IENvbnNpZGVyIG1ha2lu
ZyB0aGlzIGFuIC5pZGwgYXR0cmlidXRlLgorICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIk1lc3NhZ2VQb3J0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiWE1MSHR0cFJlcXVlc3QiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJTb2NrZXQi
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXb3JrZXIiOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJTaGFyZWRXb3JrZXIiOworICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZl
VHlwZUZvckNvbnZlcnNpb25zCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4g
IkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEgIlNWR1JlY3QiOwogICAgIHJldHVybiAiRmxvYXRQb2lu
dCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKICAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0
cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKQEAgLTE5OTAsNyArMjE2Myw2IEBACiAKICAg
ICBteSAkZmlyc3QgPSAxOwogICAgIG15ICRpbmRleCA9IDA7Ci0gICAgbXkgJG5vZGVUb1JldHVy
biA9IDA7CiAKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSkgewogICAgICAgICBpZiAoJGluZGV4IGVxICRudW1iZXJPZlBhcmFtZXRlcnMpIHsKQEAg
LTIwMTIsMTAgKzIxODQsNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGZ1bmN0
aW9uU3RyaW5nIC49ICRwYXJhbU5hbWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybiJ9KSB7Ci0gICAgICAgICAgICAkbm9k
ZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAgICAgfQogICAgICAgICAkaW5kZXgr
KzsKICAgICB9CiAKQEAgLTIwMzQsMTkgKzIyMDIsNyBAQAogICAgIG15ICRyZXR1cm4gPSAicmVz
dWx0IjsKICAgICBteSAkcmV0dXJuSXNSZWYgPSBJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpOwog
Ci0gICAgaWYgKCRub2RlVG9SZXR1cm4pIHsKLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGlu
c2VydEJlZm9yZSwgcmVwbGFjZUNoaWxkLCByZW1vdmVDaGlsZCBhbmQKLSAgICAgICAgIyBhcHBl
bmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBOb2RlLgotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQg
LiAiYm9vbCBzdWNjZXNzID0gJGZ1bmN0aW9uU3RyaW5nO1xuIjsKLSAgICAgICAgaWYgKEB7JGZ1
bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgewotICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5k
ZW50IC4gImlmIChVTkxJS0VMWShlYykpIGdvdG8gZmFpbDtcbiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChzdWNjZXNzKVxuIjsKLSAgICAgICAgJHJlc3Vs
dCAuPSAkaW5kZW50IC4gIiAgICAiIC4KLSAgICAgICAgICAgICJyZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJG5vZGVUb1JldHVybik7XG4iOwotICAgICAgICAkcmVz
dWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIHY4OjpOdWxsKCk7XG4iOwotICAgICAgICByZXR1cm4g
JHJlc3VsdDsKLSAgICB9IGVsc2lmICgkcmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICBpZiAo
JHJldHVyblR5cGUgZXEgInZvaWQiKSB7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIk
ZnVuY3Rpb25TdHJpbmc7XG4iOwogICAgIH0gZWxzaWYgKCRjb3B5Rmlyc3QpIHsKICAgICAgICAg
JHJlc3VsdCAuPQpAQCAtMjEwNSw4ICsyMjYxLDggQEAKICAgICB9CiAKICAgICBpZiAoJHJldHVy
bnNQb2RUeXBlKSB7Ci0gICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHJldHVyblR5cGUpOwot
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkp
O1xuIjsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke3JldHVyblR5cGV9LmgifSA9IDE7Cisg
ICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gdG9WOCh3cmFwcGVyLnJlbGVhc2Uo
KSk7XG4iOwogICAgIH0gZWxzZSB7CiAgICAgICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlm
ICgkcmV0dXJuSXNSZWYpOwogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRp
dmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICRpbmRlbnQpIC4gIjtc
biI7CkBAIC0yMTY2LDYgKzIzMjIsNyBAQAogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNp
Z25lZCI7CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOwogICAgIHJl
dHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuIDAgaWYgJHR5
cGUgZXEgIlNWR0FuaW1hdGVkUG9pbnRzIjsKIAogICAgIHJldHVybiAxOwogfQpAQCAtMjIwNiw3
ICsyMzYzLDcgQEAKICAgICByZXR1cm4gIlNWR1RyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR1Ry
YW5zZm9ybSI7CiAgICAgcmV0dXJuICJTVkdMZW5ndGgiIGlmICR0eXBlIGVxICJTVkdMZW5ndGgi
OwogICAgIHJldHVybiAiU1ZHQW5nbGUiIGlmICR0eXBlIGVxICJTVkdBbmdsZSI7Ci0gICAgcmV0
dXJuICJkb3VibGUiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOworICAgIHJldHVybiAiZmxvYXQi
IGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOwogICAgIHJldHVybiAiU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbyIgaWYgJHR5cGUgZXEgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8iOwogICAgIHJldHVybiAi
U1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAgICAg
cmV0dXJuICJET01UaW1lU3RhbXAiIGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwpAQCAtMjQy
MSw3ICsyNTc4LDExIEBACiBzdWIgR2V0VjhIZWFkZXJOYW1lCiB7CiAgICAgbXkgJHR5cGUgPSBz
aGlmdDsKLSAgICByZXR1cm4gIlY4IiAuIEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUp
OworICAgIHJldHVybiAiVjhFdmVudC5oIiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAg
ICByZXR1cm4gIkV2ZW50TGlzdGVuZXIuaCIgaWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOwor
ICAgIHJldHVybiAiRXZlbnRUYXJnZXQuaCIgaWYgJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAg
ICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1cm4gIlY4JHt0eXBlfS5oIjsKIH0KIAogCkBAIC0yNTQ2
LDcgKzI3MDcsNiBAQAogICAgIG15ICR2YWx1ZSA9IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBz
aGlmdDsKICAgICBteSAkdHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRzaWduYXR1cmUpOwot
ICAgIG15ICRjbGFzc05hbWU9ICJWOCR0eXBlIjsKIAogICAgIHJldHVybiAicmV0dXJuIHY4OjpE
YXRlOjpOZXcoc3RhdGljX2Nhc3Q8ZG91YmxlPigkdmFsdWUpKSIgaWYgJHR5cGUgZXEgIkRPTVRp
bWVTdGFtcCI7CiAgICAgcmV0dXJuICJyZXR1cm4gdjhCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBl
IGVxICJib29sZWFuIjsKQEAgLTI1NzMsMjkgKzI3MzMsMjAgQEAKICAgICAgICAgcmV0dXJuICJy
ZXR1cm4gdjhTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgIyBWOCBzcGVjaWZpYy4KLSAg
ICBteSAkaW1wbENsYXNzTmFtZSA9ICR0eXBlOwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlw
ZSk7CiAKICAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURPTSBub2RlIGludGVyZmFjZXMKICAg
ICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgaWYgKCRzaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm5zTmV3In0pIHsKLSAgICAgICAgICAgIHJldHVybiAi
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJHZhbHVlKSI7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuICJyZXR1cm4gdG9WOCgke3ZhbHVlfSIgLiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJldHVybnNOZXcifSA/ICIsIHRydWUpIiA6ICIpIik7CiAgICAgfQogCi0gICAgaWYg
KCR0eXBlIGVxICJFdmVudFRhcmdldCIgb3IgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIp
IHsKKyAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IikgewogICAgICAgICByZXR1cm4gInJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoJHZhbHVlKSI7
CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudCIpIHsKLSAgICAgICAgcmV0dXJuICJy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAg
IH0KLQogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgcmV0dXJu
ICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoaW1w
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICR2YWx1ZSkiOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1cm4gInJl
dHVybiAke3ZhbHVlfSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPihzdGF0aWNfY2FzdDxWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcio+KCR7dmFsdWV9KS0+Z2V0TGlzdGVuZXJPYmplY3QoaW1wLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgp
KSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7
CkBAIC0yNjE1LDE4ICsyNzY2LDE1IEBACiAgICAgICAgIHJldHVybiAicmV0dXJuIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xh
c3NJbmRleCwgJHZhbHVlKSI7CiAgICAgfQogCi0gICAgZWxzZSB7Ci0gICAgICAgICRpbXBsSW5j
bHVkZXN7Ind0Zi9SZWZDb3VudGVkLmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0
Zi9SZWZQdHIuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0g
PSAxOwotICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCR0eXBlKTsKKyAgICAkaW1wbEluY2x1
ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQ
dHIuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CiAKLSAg
ICAgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgICAgICR2YWx1ZSA9IEdlbmVy
YXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIoJHR5cGUsICR2YWx1ZSk7Ci0gICAgICAgIH0KKyAg
ICBpZiAoSXNQb2RUeXBlKCR0eXBlKSkgeworICAgICAgICAkdmFsdWUgPSBHZW5lcmF0ZVNWR1N0
YXRpY1BvZFR5cGVXcmFwcGVyKCR0eXBlLCAkdmFsdWUpIC4gIi5nZXQoKSI7CisgICAgfQogCi0g
ICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjokY2xhc3NJbmRleCwgJHZhbHVlKSI7Ci0gICAgfQorICAgIHJldHVybiAicmV0
dXJuIHRvVjgoJHZhbHVlKSI7CiB9CiAKIHN1YiBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFw
cGVyIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDU0
MDcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiVjhET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiVjhET01NYXAu
aCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxp
c3QuaCIKQEAgLTUyLDEyICs1MywxOCBAQAogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCiAj
aW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCi0jaW5j
bHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKKyNpbmNs
dWRlICJWOE1lc3NhZ2VDaGFubmVsLmgiCiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVNYXAuaCIKKyNp
bmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiVjhO
b3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdFbGVt
ZW50SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJWOFNoYXJlZFdvcmtlci5oIgogI2luY2x1ZGUgIlY4
U3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4V2ViU29ja2V0LmgiCisjaW5jbHVkZSAiVjhXb3Jr
ZXIuaCIKICNpbmNsdWRlICJXZWJHTEFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCkBAIC0xMDk0LDc1
ICsxMTAxLDY0IEBACiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCiAjaWYgRU5BQkxFKFNW
RykKLSAgICBTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1l
bnRJbnN0YW5jZSgpOwotICAgIGlmIChpbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFLCBpbnN0YW5jZSk7Cisg
ICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB0YXJnZXQtPnRvU1ZHRWxlbWVu
dEluc3RhbmNlKCkpCisgICAgICAgIHJldHVybiB0b1Y4KGluc3RhbmNlKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2VyKiB3b3JrZXIgPSB0YXJnZXQtPnRvV29ya2Vy
KCk7Ci0gICAgaWYgKHdvcmtlcikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6V09SS0VSLCB3b3JrZXIpOworICAgIGlmIChXb3JrZXIqIHdvcmtlciA9IHRh
cmdldC0+dG9Xb3JrZXIoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgod29ya2VyKTsKICNlbmRpZiAv
LyBXT1JLRVJTCiAKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAgU2hhcmVkV29ya2Vy
KiBzaGFyZWRXb3JrZXIgPSB0YXJnZXQtPnRvU2hhcmVkV29ya2VyKCk7Ci0gICAgaWYgKHNoYXJl
ZFdvcmtlcikKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
U0hBUkVEV09SS0VSLCBzaGFyZWRXb3JrZXIpOworICAgIGlmIChTaGFyZWRXb3JrZXIqIHNoYXJl
ZFdvcmtlciA9IHRhcmdldC0+dG9TaGFyZWRXb3JrZXIoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgo
c2hhcmVkV29ya2VyKTsKICNlbmRpZiAvLyBTSEFSRURfV09SS0VSUwogCiAjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCi0gICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSB0YXJnZXQtPnRv
Tm90aWZpY2F0aW9uKCk7Ci0gICAgaWYgKG5vdGlmaWNhdGlvbikKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBub3RpZmljYXRpb24p
OworICAgIGlmIChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IHRhcmdldC0+dG9Ob3RpZmlj
YXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gdGFyZ2V0
LT50b1dlYlNvY2tldCgpOwotICAgIGlmICh3ZWJTb2NrZXQpCi0gICAgICAgIHJldHVybiBjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgd2ViU29ja2V0KTsKKyAgICBp
ZiAoV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB0YXJnZXQtPnRvV2ViU29ja2V0KCkpCisgICAgICAg
IHJldHVybiB0b1Y4KHdlYlNvY2tldCk7CiAjZW5kaWYKIAotICAgIE5vZGUqIG5vZGUgPSB0YXJn
ZXQtPnRvTm9kZSgpOwotICAgIGlmIChub2RlKQotICAgICAgICByZXR1cm4gY29udmVydE5vZGVU
b1Y4T2JqZWN0KG5vZGUpOworICAgIGlmIChOb2RlKiBub2RlID0gdGFyZ2V0LT50b05vZGUoKSkK
KyAgICAgICAgcmV0dXJuIHRvVjgobm9kZSk7CiAKICAgICBpZiAoRE9NV2luZG93KiBkb21XaW5k
b3cgPSB0YXJnZXQtPnRvRE9NV2luZG93KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZG9tV2luZG93KTsKKyAgICAgICAgcmV0dXJu
IHRvVjgoZG9tV2luZG93KTsKIAogICAgIC8vIFhNTEh0dHBSZXF1ZXN0IGlzIGNyZWF0ZWQgd2l0
aGluIGl0cyBKUyBjb3VudGVycGFydC4KLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVl
c3QgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3QoKTsKLSAgICBpZiAoeG1sSHR0cFJlcXVlc3Qp
IHsKKyAgICBpZiAoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gdGFyZ2V0LT50b1hN
TEh0dHBSZXF1ZXN0KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuZ2V0KHhtbEh0dHBSZXF1ZXN0KTsKICAgICAgICAg
QVNTRVJUKCF3cmFwcGVyLklzRW1wdHkoKSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAg
IH0KIAogICAgIC8vIE1lc3NhZ2VQb3J0IGlzIGNyZWF0ZWQgd2l0aGluIGl0cyBKUyBjb3VudGVy
cGFydAotICAgIE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQb3J0KCk7Ci0g
ICAgaWYgKHBvcnQpIHsKKyAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSB0YXJnZXQtPnRvTWVz
c2FnZVBvcnQoKSkgewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBn
ZXRBY3RpdmVET01PYmplY3RNYXAoKS5nZXQocG9ydCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBl
ci5Jc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAKLSAgICBYTUxI
dHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
KCk7Ci0gICAgaWYgKHVwbG9hZCkgeworICAgIGlmIChYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBs
b2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBsb2FkKCkpIHsKICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHVwbG9hZCk7
CiAgICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICB9CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUFwcENhY2hlID0gdGFyZ2V0LT50b0RPTUFwcGxpY2F0
aW9uQ2FjaGUoKTsKLSAgICBpZiAoZG9tQXBwQ2FjaGUpCi0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGRvbUFwcENhY2hl
KTsKKyAgICBpZiAoRE9NQXBwbGljYXRpb25DYWNoZSogZG9tQXBwQ2FjaGUgPSB0YXJnZXQtPnRv
RE9NQXBwbGljYXRpb25DYWNoZSgpKQorICAgICAgICByZXR1cm4gdG9WOChkb21BcHBDYWNoZSk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKLSAgICBFdmVudFNvdXJjZSogZXZl
bnRTb3VyY2UgPSB0YXJnZXQtPnRvRXZlbnRTb3VyY2UoKTsKLSAgICBpZiAoZXZlbnRTb3VyY2Up
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkVWRU5UU09V
UkNFLCBldmVudFNvdXJjZSk7CisgICAgaWYgKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHRh
cmdldC0+dG9FdmVudFNvdXJjZSgpKQorICAgICAgICByZXR1cm4gdG9WOChldmVudFNvdXJjZSk7
CiAjZW5kaWYKIAogICAgIEFTU0VSVCgwKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZp
c2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTEsNyArMTkxLDkgQEAKICAgICAgICAgICAgIHNldFNWR0NvbnRleHQob2JqZWN0
LmdldCgpLCBjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0K
LSAgICAgICAgc3RhdGljIHZvaWQqIHdpdGhTVkdDb250ZXh0KHZvaWQqIG9iamVjdCwgU1ZHRWxl
bWVudCogY29udGV4dCkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAg
c3RhdGljIFQqIHdpdGhTVkdDb250ZXh0KFQqIG9iamVjdCwgU1ZHRWxlbWVudCogY29udGV4dCkK
ICAgICAgICAgewogICAgICAgICAgICAgc2V0U1ZHQ29udGV4dChvYmplY3QsIGNvbnRleHQpOwog
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuaAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsMTUgKzI1NiwyMCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOwogI2VuZGlmCiAK
LSAgICBwcml2YXRlOgotICAgICAgICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01X
aW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KTsKLQogICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlIGh0bWxFbGVtZW50VHlwZShIVE1MRWxlbWVudCopOwogI2lmIEVOQUJMRShTVkcpCiAgICAg
ICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgc3ZnRWxlbWVudFR5cGUoU1ZH
RWxlbWVudCopOwogI2VuZGlmCisgICAgICAgIC8vIFNldCBoaWRkZW4gcmVmZXJlbmNlcyBpbiBh
IERPTVdpbmRvdyBvYmplY3Qgb2YgYSBmcmFtZS4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKEZyYW1lKiwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4pOwogCisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gaW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlIHR5cGUsIHZvaWQqIGltcGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpbnN0YW50aWF0ZVY4T2JqZWN0KHByb3h5LCB0eXBlLCB0eXBlLCBpbXBsKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKwogICAgICAgICAvLyBUaGUgZmlyc3QgVjhXcmFwcGVyVHlwZSBz
cGVjaWZpZXMgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0b3IKICAgICAgICAgLy8gdXNlZCB0byBjcmVh
dGUgSlMgb2JqZWN0LiBUaGUgc2Vjb25kIFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzCiAgICAgICAg
IC8vIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdm9pZCogZm9yIHR5cGUgY2FzdGluZy4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5
LDYgQEAKICAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6QXJyYXk+IG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogICAgIHsKICAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBl
cjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQVNTRVJUKFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpO
T0RFKTsKICAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlv
bjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxl
Y3Rpb24tPmxlbmd0aCgpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGll
cyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1
NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1cm4gc2V0
V2ViR0xBcnJheTxXZWJHTEZsb2F0QXJyYXksIFY4V2ViR0xGbG9hdEFycmF5PihhcmdzLCBWOENs
YXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFdlYkdMRmxvYXRBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4
V2ViR0xGbG9hdEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFy
cmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsRmxvYXRBcnJheSwgaW1w
bC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQw
NzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJWOE5hdmlnYXRvci5o
IgogCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlY4RE9N
V2luZG93LmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDIsNCArNDQsMTcgQEAKIH0KICNlbmRpZgogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChOYXZpZ2F0b3IqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRE
T01PYmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIHdyYXBwZXIgPSBWOE5hdmlnYXRvcjo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93OjpuYXZpZ2F0b3JJ
bmRleCwgd3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyNp
bmNsdWRlICJWOFdlYkdMQXJyYXkuaCIKKworI2luY2x1ZGUgIlY4V2ViR0xCeXRlQXJyYXkuaCIK
KyNpbmNsdWRlICJWOFdlYkdMRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xJbnRBcnJh
eS5oIgorI2luY2x1ZGUgIlY4V2ViR0xTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiVjhXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiVjhXZWJHTFVuc2lnbmVkSW50QXJyYXkuaCIK
KyNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV2ViR0xBcnJheSogaW1wbCkKK3sK
KyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBs
LT5pc0J5dGVBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJHTEJ5
dGVBcnJheSo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNGbG9hdEFycmF5KCkpCisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMRmxvYXRBcnJheSo+KGltcGwpKTsKKyAgICBp
ZiAoaW1wbC0+aXNJbnRBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxX
ZWJHTEludEFycmF5Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc1Nob3J0QXJyYXkoKSkKKyAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xTaG9ydEFycmF5Kj4oaW1wbCkpOwor
ICAgIGlmIChpbXBsLT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpCisgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFdlYkdMVW5zaWduZWRCeXRlQXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGlt
cGwtPmlzVW5zaWduZWRJbnRBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxXZWJHTFVuc2lnbmVkSW50QXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzVW5zaWdu
ZWRTaG9ydEFycmF5KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMVW5z
aWduZWRTaG9ydEFycmF5Kj4oaW1wbCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MDcwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoY29u
c3QgV2ViR0xHZXRJbmZvJiBpbmZvKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
T2JqZWN0KGNvbnN0IFdlYkdMR2V0SW5mbyYgaW5mbykKIHsKICAgICBzd2l0Y2ggKGluZm8uZ2V0
VHlwZSgpKSB7CiAgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbDoKQEAgLTI2MSw3ICsy
NjEsNyBAQAogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAg
ICByZXR1cm4gdG9WOE9iamVjdChpbmZvKTsKIH0KIAogc3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiB0b1dlYkdMVW5pZm9ybUxvY2F0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwg
Ym9vbCYgb2spCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAg
cmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVy
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTM0Miw3ICszNDIsNyBAQAog
ICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4g
dG9WOE9iamVjdChpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKQEAgLTM2OCw3ICszNjgsNyBAQAogICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAg
ICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvKTsKIH0KIAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNDAw
LDcgKzQwMCw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGluZm8p
OworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlckNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5m
byk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VmVydGV4QXR0cmliQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDU0MDcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTgsNCArOTE4LDM3IEBACiAgICAgcmV0
dXJuIFY4QmluZGluZ1NlY3VyaXR5OjpjYW5BY2Nlc3NGcmFtZShWOEJpbmRpbmdTdGF0ZTo6T25s
eSgpLCB0YXJnZXQsIGZhbHNlKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRE9N
V2luZG93KiB3aW5kb3cpCit7CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybiB2ODo6
TnVsbCgpOworICAgIC8vIEluaXRpYWxpemVzIGVudmlyb25tZW50IG9mIGEgZnJhbWUsIGFuZCBy
ZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUgZnJhbWUuCisgICAgRnJhbWUq
IGZyYW1lID0gd2luZG93LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2U6IEJlY2F1
c2Ugb2YgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoKSBvbmUgRE9NV2luZG93IGNhbiBoYXZlCisg
ICAgLy8gbXVsdGlwbGUgY29udGV4dHMgYW5kIG11bHRpcGxlIGdsb2JhbCBvYmplY3RzIGFzc29j
aWF0ZWQgd2l0aCBpdC4gV2hlbgorICAgIC8vIGNvZGUgcnVubmluZyBpbiBvbmUgb2YgdGhvc2Ug
Y29udGV4dHMgYWNjZXNzZXMgdGhlIHdpbmRvdyBvYmplY3QsIHdlCisgICAgLy8gd2FudCB0byBy
ZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29udGV4dCwgbm90
CisgICAgLy8gbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3
aXRoIHRoYXQgRE9NV2luZG93LgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGN1cnJlbnRD
b250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGN1cnJlbnRHbG9iYWwgPSBjdXJyZW50Q29udGV4dC0+R2xvYmFsKCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBE
T01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjdXJyZW50R2xvYmFsKTsKKyAgICBp
ZiAoIXdpbmRvd1dyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChWOERPTVdpbmRvdzo6
dG9OYXRpdmUod2luZG93V3JhcHBlcikgPT0gd2luZG93KQorICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnRHbG9iYWw7CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGdsb2Jh
bCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJhbWUuCisgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUpOworICAgIGlmIChjb250
ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsK
KworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7
CisgICAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgpKTsKKyAgICByZXR1cm4gZ2xvYmFsOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlY4Q2FudmFzUGl4ZWxBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENhbnZhc1BpeGVsQXJyYXkqIGltcGwpCit7CisgICAg
aWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBWOENhbnZhc1BpeGVsQXJyYXk6OnRvVjhIZWxwZXIoaW1wbCk7
CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhl
ZFByb3BlcnRpZXNUb1BpeGVsRGF0YShpbXBsLT5kYXRhKCktPmRhdGEoKSwgaW1wbC0+bGVuZ3Ro
KCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3Vt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTEgQEAKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCisj
aW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4
WFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiVjhYUGF0aFJlc3VsdC5oIgogCkBAIC0xMzIs
NCArMTM1LDIwIEBACiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KERvY3VtZW50KiBpbXBsLCBib29sIGZvcmNlTmV3T2JqZWN0KQoreworICAgIGlm
ICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlzSFRN
TERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKGltcGwtPmlzU1ZHRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihpbXBsKSwg
Zm9yY2VOZXdPYmplY3QpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhE
b2N1bWVudDo6dG9WOEhlbHBlcihpbXBsLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKCFWOElz
b2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgICAgIGlmIChWOFByb3h5KiBwcm94
eSA9IFY4UHJveHk6OnJldHJpZXZlKGltcGwtPmZyYW1lKCkpKQorICAgICAgICAgICAgcHJveHkt
PndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0
b20uY3BwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNp
bmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhUTUxBbGxDb2xsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVzQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKIApAQCAtMTM4LDQgKzEzOSwxMSBAQAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxDb2xsZWN0aW9uKiBpbXBsKQor
eworICAgIGlmIChpbXBsLT50eXBlKCkgPT0gRG9jQWxsKQorICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxIVE1MQWxsQ29sbGVjdGlvbio+KGltcGwpKTsKKyAgICByZXR1cm4gVjhIVE1M
Q29sbGVjdGlvbjo6dG9WOEhlbHBlcihpbXBsKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDU0MDcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwyOCBAQAogI2luY2x1ZGUgIkNs
aXBib2FyZC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiVjhCZWZvcmVMb2FkRXZlbnQu
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENvbXBvc2l0aW9uRXZlbnQu
aCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEVycm9yRXZlbnQu
aCIKKyNpbmNsdWRlICJWOEtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VFdmVu
dC5oIgorI2luY2x1ZGUgIlY4TW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlY4TXV0YXRpb25FdmVu
dC5oIgorI2luY2x1ZGUgIlY4T3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlY4UGFnZVRyYW5z
aXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlY4UG9wU3RhdGVFdmVudC5oIgorI2luY2x1ZGUgIlY4
UHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFNWR1pv
b21FdmVudC5oIgorI2luY2x1ZGUgIlY4U3RvcmFnZUV2ZW50LmgiCisjaW5jbHVkZSAiVjhUZXh0
RXZlbnQuaCIKKyNpbmNsdWRlICJWOFVJRXZlbnQuaCIKKyNpbmNsdWRlICJWOFdlYktpdEFuaW1h
dGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiVjhXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKKyNpbmNs
dWRlICJWOFdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY3LDQgKzg1LDU2IEBACiAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
RXZlbnQqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwo
KTsKKyAgICBpZiAoaW1wbC0+aXNVSUV2ZW50KCkpIHsKKyAgICAgICAgaWYgKGltcGwtPmlzS2V5
Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8S2V5Ym9h
cmRFdmVudCo+KGltcGwpKTsKKyAgICAgICAgaWYgKGltcGwtPmlzVGV4dEV2ZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihpbXBsKSk7CisgICAg
ICAgIGlmIChpbXBsLT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihpbXBsKSk7CisgICAgICAgIGlmIChpbXBsLT5pc1doZWVs
RXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdoZWVsRXZlbnQq
PihpbXBsKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgaWYgKGltcGwtPmlzU1ZHWm9vbUV2
ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdab29tRXZlbnQq
PihpbXBsKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGltcGwtPmlzQ29tcG9zaXRpb25FdmVudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q29tcG9zaXRpb25FdmVudCo+
KGltcGwpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8VUlFdmVudCo+KGltcGwp
KTsKKyAgICB9CisgICAgaWYgKGltcGwtPmlzTXV0YXRpb25FdmVudCgpKQorICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50Kj4oaW1wbCkpOworICAgIGlmIChpbXBs
LT5pc092ZXJmbG93RXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8T3Zl
cmZsb3dFdmVudCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNNZXNzYWdlRXZlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oaW1wbCkpOworICAg
IGlmIChpbXBsLT5pc1BhZ2VUcmFuc2l0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8UGFnZVRyYW5zaXRpb25FdmVudCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+
aXNQb3BTdGF0ZUV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFBvcFN0
YXRlRXZlbnQqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzUHJvZ3Jlc3NFdmVudCgpKSB7Cisg
ICAgICAgIGlmIChpbXBsLT5pc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
Kj4oaW1wbCkpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxQcm9ncmVzc0V2ZW50
Kj4oaW1wbCkpOworICAgIH0KKyAgICBpZiAoaW1wbC0+aXNXZWJLaXRBbmltYXRpb25FdmVudCgp
KQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJLaXRBbmltYXRpb25FdmVudCo+
KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0VHJhbnNpdGlvbkV2ZW50Kj4oaW1wbCkp
OworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGlmIChpbXBsLT5pc0Vycm9yRXZlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RXJyb3JFdmVudCo+KGltcGwpKTsKKyNlbmRp
ZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBpZiAoaW1wbC0+aXNTdG9yYWdlRXZlbnQo
KSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oaW1wbCkp
OworI2VuZGlmCisgICAgaWYgKGltcGwtPmlzQmVmb3JlTG9hZEV2ZW50KCkpCisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PEJlZm9yZUxvYWRFdmVudCo+KGltcGwpKTsKKyAgICByZXR1
cm4gVjhFdmVudDo6dG9WOEhlbHBlcihpbXBsKTsKK30KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xCeXRl
QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2
ICs2MywxNiBAQAogICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdMQnl0ZUFycmF5LCBWOFdl
YkdMQnl0ZUFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMQllURUFSUkFZKTsKIH0KIAor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV2ViR0xCeXRlQXJyYXkqIGltcGwpCit7CisgICAg
aWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFdlYkdMQnl0ZUFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOwor
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQ
cm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4
dGVybmFsQnl0ZUFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDU0MDcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDIzIEBACiAjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgogCiAjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJWOEF0dHIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENEQVRB
U2VjdGlvbi5oIgorI2luY2x1ZGUgIlY4Q29tbWVudC5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJWOERvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJW
OERvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIlY4RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4RW50
aXR5LmgiCisjaW5jbHVkZSAiVjhFbnRpdHlSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJWOE5vZGUu
aCIKKyNpbmNsdWRlICJWOE5vdGF0aW9uLmgiCisjaW5jbHVkZSAiVjhQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhUZXh0LmgiCiAKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTE1Miw0ICsxNjQsMzcgQEAKICAgICByZXR1cm4g
djg6Ok51bGwoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwg
Ym9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2
ODo6TnVsbCgpOworICAgIHN3aXRjaCAoaW1wbC0+bm9kZVR5cGUoKSkgeworICAgIGNhc2UgTm9k
ZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RF
OgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxBdHRyKj4oaW1wbCksIGZvcmNlTmV3
T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8VGV4dCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2Rl
OjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENE
QVRBU2VjdGlvbio+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfUkVGRVJFTkNFX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEVudGl0
eVJlZmVyZW5jZSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RW50aXR5Kj4oaW1wbCks
IGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05f
Tk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0
aW9uKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9E
RToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q29tbWVudCo+KGltcGwpLCBmb3Jj
ZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7Cisg
ICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2Fz
ZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0
aWNfY2FzdDxEb2N1bWVudEZyYWdtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBj
YXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PE5vdGF0aW9uKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBkZWZhdWx0OiBicmVhazsg
Ly8gWFBBVEhfTkFNRVNQQUNFX05PREUKKyAgICB9CisgICAgcmV0dXJuIFY4Tm9kZTo6dG9WOEhl
bHBlcihpbXBsLCBmb3JjZU5ld09iamVjdCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxlY3Rpb25D
dXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
T01TZWxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4RE9NU2VsZWN0aW9uLmgiCisKKyNpbmNsdWRlICJW
OERPTVdpbmRvdy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVNlbGVjdGlvbiogaW1wbCkK
K3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsK
KyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgd3JhcHBlciA9IFY4RE9NU2Vs
ZWN0aW9uOjp0b1Y4SGVscGVyKGltcGwpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRl
bldpbmRvd1JlZmVyZW5jZShpbXBsLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6ZG9tU2VsZWN0aW9u
SW5kZXgsIHdyYXBwZXIpOworICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1l
ZE5vZGVNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OEVsZW1lbnQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CkBAIC03Miw0ICs3MywxOCBAQAogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoTmFtZWROb2RlTWFwKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAg
cmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0g
VjhOYW1lZE5vZGVNYXA6OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgLy8gQWRkIGEgaGlkZGVuIHJl
ZmVyZW5jZSBmcm9tIG5hbWVkIG5vZGUgbWFwIHRvIGl0cyBvd25lciBub2RlLgorICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBpbXBsLT5lbGVtZW50KCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSAmJiBlbGVtZW50KSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvd25lciA9IHRv
VjgoZWxlbWVudCk7CisgICAgICAgIHdyYXBwZXItPlNldEludGVybmFsRmllbGQoVjhOYW1lZE5v
ZGVNYXA6Om93bmVyTm9kZUluZGV4LCBvd25lcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVy
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlU2hlZXRDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlY4Q1NTU3R5bGVTaGVldC5oIgorCisjaW5jbHVkZSAiVjhOb2RlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NTU3R5bGVTaGVldCog
aW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4Q1NTU3R5bGVTaGVldDo6dG9WOEhl
bHBlcihpbXBsKTsKKyAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20gc3R5bGVzaGVl
dCBvYmplY3QgdG8gaXRzIG93bmVyIG5vZGUuCisgICAgTm9kZSogb3duZXJOb2RlID0gaW1wbC0+
b3duZXJOb2RlKCk7CisgICAgaWYgKG93bmVyTm9kZSAmJiAhd3JhcHBlci5Jc0VtcHR5KCkpCisg
ICAgICAgIHdyYXBwZXItPlNldEludGVybmFsRmllbGQoVjhDU1NTdHlsZVNoZWV0Ojpvd25lck5v
ZGVJbmRleCwgdG9WOChvd25lck5vZGUpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0xOTUsNCArMTk2
LDIyIEBACiAgICAgaW5mby5Ib2xkZXIoKS0+U2V0SW50ZXJuYWxGaWVsZChWOEhUTUxEb2N1bWVu
dDo6c2hhZG93SW5kZXgsIHZhbHVlKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
SFRNTERvY3VtZW50KiBpbXBsLCBib29sIGZvcmNlTmV3T2JqZWN0KQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gVjhIVE1MRG9jdW1lbnQ6OnRvVjhIZWxwZXIoaW1wbCwgZm9yY2VOZXdPYmpl
Y3QpOworICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgeworICAgICAg
ICBpZiAoVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbXBsLT5mcmFtZSgpKSkK
KyAgICAgICAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIo
d3JhcHBlcik7CisgICAgfQorICAgIC8vIENyZWF0ZSBtYXJrZXIgb2JqZWN0IGFuZCBpbnNlcnQg
aXQgaW4gdHdvIGludGVybmFsIGZpZWxkcy4KKyAgICAvLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVt
ZW50IHRlbXBvcmFyeSBzaGFkb3dpbmcgb2YgZG9jdW1lbnQuYWxsLgorICAgIEFTU0VSVCh3cmFw
cGVyLT5JbnRlcm5hbEZpZWxkQ291bnQoKSA9PSBWOEhUTUxEb2N1bWVudDo6aW50ZXJuYWxGaWVs
ZENvdW50KTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbWFya2VyID0gdjg6Ok9iamVjdDo6
TmV3KCk7CisgICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVsZChWOEhUTUxEb2N1bWVudDo6bWFy
a2VySW5kZXgsIG1hcmtlcik7CisgICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVsZChWOEhUTUxE
b2N1bWVudDo6c2hhZG93SW5kZXgsIG1hcmtlcik7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAJKHJldmlzaW9uIDU0MDcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KENhbnZhc1N0eWxlKiBzdHlsZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOE9iamVjdChDYW52YXNTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5jYW52
YXNHcmFkaWVudCgpKQogICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OkNBTlZBU0dSQURJRU5ULCBzdHlsZS0+Y2FudmFzR3JhZGllbnQo
KSk7CkBAIC03OCw3ICs3OCw3IEBACiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcGwtPnN0cm9rZVN0eWxl
KCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGltcGwtPnN0cm9rZVN0eWxlKCkpOwogfQogCiB2
b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VTdHlsZUFjY2Vzc29yU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTkwLDcgKzkwLDcgQEAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlQWNjZXNz
b3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCiB7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB0b1Y4KGltcGwtPmZpbGxTdHlsZSgpKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbXBsLT5m
aWxsU3R5bGUoKSk7CiB9CiAKIHZvaWQgVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxT
dHlsZUFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1
c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnLmgiCisKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0FyY0Ficy5o
IgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0FyY1JlbC5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNl
Z0Nsb3NlUGF0aC5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5oIgor
I2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5oIgorI2luY2x1ZGUgIlY4U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aFJlbC5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNBYnMuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLmgi
CisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5oIgorI2lu
Y2x1ZGUgIlY4U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwuaCIKKyNpbmNsdWRl
ICJWOFNWR1BhdGhTZWdMaW5ldG9BYnMuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJl
bC5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b1JlbC5oIgorI2luY2x1ZGUgIlY4U1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRv
VmVydGljYWxSZWwuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdNb3ZldG9BYnMuaCIKKyNpbmNs
dWRlICJWOFNWR1BhdGhTZWdNb3ZldG9SZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdQYXRoU2VnKiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgc3dpdGNoIChpbXBsLT5wYXRo
U2VnVHlwZSgpKSB7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NMT1NFUEFUSDogICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDbG9zZVBh
dGgqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19BQlM6ICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9B
YnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX01PVkVUT19SRUw6ICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9S
ZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19BQlM6ICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9B
YnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19SRUw6ICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9S
ZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNf
QUJTOiAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNBYnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9f
Q1VCSUNfUkVMOiAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNSZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NV
UlZFVE9fUVVBRFJBVElDX0FCUzogICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6
UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw6ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCo+KGltcGwpKTsKKyAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfQVJDX0FCUzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY0Ficyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfQVJDX1JFTDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY1JlbCo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhT
ZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTOiAgICAgICAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMqPihpbXBsKSk7CisgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTDogICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKj4oaW1wbCkp
OworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOiAgICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMq
PihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9S
RUw6ICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbFJlbCo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19D
VUJJQ19TTU9PVEhfQUJTOiAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aEFicyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhT
RUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMOiAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUzogcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMqPihpbXBsKSk7
CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9S
RUw6IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoUmVsKj4oaW1wbCkpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gVjhTVkdQYXRoU2VnOjp0b1Y4SGVscGVyKGltcGwpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWdu
ZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQw
NzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1
cm4gc2V0V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSwgVjhXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEU0hPUlRBUlJBWSk7
CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheTo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAg
ICAgICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheURhdGEoaW1w
bC0+YmFzZUFkZHJlc3MoKSwgdjg6OmtFeHRlcm5hbFVuc2lnbmVkU2hvcnRBcnJheSwgaW1wbC0+
bGVuZ3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOEhUTUxFbGVtZW50LmgiCisKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChIVE1MRWxlbWVudCogaW1wbCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWlt
cGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHJldHVybiBjcmVhdGVWOEhUTUxX
cmFwcGVyKGltcGwsIGZvcmNlTmV3T2JqZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1J1bGVDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxl
Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWOENTU1J1bGUuaCIKKworI2luY2x1ZGUgIlY4Q1NTQ2hhcnNldFJ1bGUu
aCIKKyNpbmNsdWRlICJWOENTU0ZvbnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTSW1wb3J0
UnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTTWVkaWFSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NQYWdl
UnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NWYXJp
YWJsZXNSdWxlLmgiCisjaW5jbHVkZSAiVjhXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNs
dWRlICJWOFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDU1NSdWxlKiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgc3dpdGNoIChpbXBsLT50eXBl
KCkpIHsKKyAgICBjYXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6OkNI
QVJTRVRfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpJTVBPUlRfUlVMRToKKyAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENT
U1J1bGU6Ok1FRElBX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU01l
ZGlhUnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgorICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpbXBsKSk7Cisg
ICAgY2FzZSBDU1NSdWxlOjpQQUdFX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PENTU1BhZ2VSdWxlKj4oaW1wbCkpOworICAgIGNhc2UgQ1NTUnVsZTo6VkFSSUFCTEVTX1JV
TEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlc1J1bGUqPihp
bXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4oaW1wbCkpOwor
ICAgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FU19SVUxFOgorICAgICAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oaW1wbCkpOworICAgIH0K
KyAgICByZXR1cm4gVjhDU1NSdWxlOjp0b1Y4SGVscGVyKGltcGwpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5z
aWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU0
MDcwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1
cm4gc2V0V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LCBWOFdlYkdMVW5zaWduZWRC
eXRlQXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FREJZVEVBUlJBWSk7CiB9
CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMVW5zaWduZWRCeXRlQXJyYXkqIGlt
cGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6
OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAg
d3JhcHBlci0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJh
c2VBZGRyZXNzKCksIHY4OjprRXh0ZXJuYWxVbnNpZ25lZEJ5dGVBcnJheSwgaW1wbC0+bGVuZ3Ro
KCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOENTU1ZhbHVlLmgi
CisKKyNpbmNsdWRlICJWOENTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAiVjhDU1NWYWx1
ZUxpc3QuaCIKKyNpbmNsdWRlICJWOFNWR0NvbG9yLmgiCisjaW5jbHVkZSAiVjhTVkdQYWludC5o
IgorI2luY2x1ZGUgIlY4V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDU1NWYWx1ZSogaW1wbCkKK3sK
KyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBs
LT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5p
c1ZhbHVlTGlzdCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpbXBsKSk7CisgICAg
aWYgKGltcGwtPmlzU1ZHUGFpbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
U1ZHUGFpbnQqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzU1ZHQ29sb3IoKSkKKyAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPihpbXBsKSk7CisgICAgcmV0dXJuIFY4
Q1NTVmFsdWU6OnRvVjhIZWxwZXIoaW1wbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1l
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw5IEBACiAjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOEN1
c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhQ
cm94eS5oIgorI2luY2x1ZGUgIlY4U1ZHRWxlbWVudC5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC0xMjcsNCArMTI5LDE0IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChFbGVtZW50KiBpbXBsLCBib29sIGZvcmNlTmV3T2JqZWN0KQoreworICAg
IGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlz
SFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPihpbXBsKSwgZm9yY2VOZXdPYmplY3QpOworICAgIGlmIChpbXBsLT5pc1NWR0VsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGltcGwpLCBm
b3JjZU5ld09iamVjdCk7CisgICAgcmV0dXJuIFY4RWxlbWVudDo6dG9WOEhlbHBlcihpbXBsLCBm
b3JjZU5ld09iamVjdCk7Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlY4U1ZHRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR0RvY3VtZW50KiBpbXBsLCBib29sIGZvcmNlTmV3T2Jq
ZWN0KQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTVkdEb2N1bWVudDo6dG9WOEhlbHBl
cihpbXBsLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKCFWOElzb2xhdGVkQ29udGV4dDo6Z2V0
RW50ZXJlZCgpKSB7CisgICAgICAgIGlmIChWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKGltcGwtPmZyYW1lKCkpKQorICAgICAgICAgICAgcHJveHktPndpbmRvd1NoZWxsKCktPnVw
ZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKICNp
bmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKQEAgLTM1OCw1ICsz
NTksMTggQEAKICAgICByZXR1cm4gVjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4
QmluZGluZ1N0YXRlOjpPbmx5KCksIGltcC0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChMb2NhdGlvbiogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisg
ICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpIHsKKyAgICAgICAgd3JhcHBlciA9IFY4TG9jYXRpb246OnRvVjhIZWxwZXIoaW1wbCk7
CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICBWOERPTVdyYXBw
ZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShpbXBsLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6
bG9jYXRpb25JbmRleCwgd3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQor
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTQwNzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNiBAQAogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4SFRNTFNlbGVjdEVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eUdldHRlcih1
aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBBU1NF
UlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwotICAgIEFT
U0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xh
c3NJbmRleDo6Tk9ERSk7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IFY4SFRNTFNlbGVjdEVs
ZW1lbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpLT5pdGVtKGluZGV4KTsKICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRD
dXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlY4U3R5bGVTaGVldC5oIgorCisjaW5jbHVkZSAiVjhDU1NTdHlsZVNoZWV0
LmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoU3R5bGVTaGVldCogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBsLT5pc0NTU1N0eWxlU2hl
ZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGlt
cGwpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFN0eWxlU2hlZXQ6
OnRvVjhIZWxwZXIoaW1wbCk7CisgICAgLy8gQWRkIGEgaGlkZGVuIHJlZmVyZW5jZSBmcm9tIHN0
eWxlc2hlZXQgb2JqZWN0IHRvIGl0cyBvd25lciBub2RlLgorICAgIE5vZGUqIG93bmVyTm9kZSA9
IGltcGwtPm93bmVyTm9kZSgpOworICAgIGlmIChvd25lck5vZGUgJiYgIXdyYXBwZXIuSXNFbXB0
eSgpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb3duZXIgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KHRvVjgob3duZXJOb2RlKSk7CisgICAgICAgIHdyYXBwZXItPlNl
dEludGVybmFsRmllbGQoVjhTdHlsZVNoZWV0Ojpvd25lck5vZGVJbmRleCwgb3duZXIpOworICAg
IH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCShy
ZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OSw0ICsxMDAsMTcgQEAKICAgICByZXR1cm4g
VjhCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKFY4QmluZGluZ1N0YXRlOjpPbmx5KCks
IGhpc3RvcnktPmZyYW1lKCksIGZhbHNlKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoSGlzdG9yeSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6
TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVj
dE1hcCgpLmdldChpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAg
d3JhcHBlciA9IFY4SGlzdG9yeTo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93
UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93OjpoaXN0b3J5SW5kZXgsIHdyYXBw
ZXIpOworICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0
b20uY3BwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q29uc29sZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJWOENvbnNvbGUuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4
Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhQ
cm94eS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAKQEAgLTU0LDQgKzU0LDE3IEBACiAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ29uc29s
ZSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdl
dChpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgd3JhcHBlciA9
IFY4Q29uc29sZTo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1w
dHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNl
KGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojpjb25zb2xlSW5kZXgsIHdyYXBwZXIpOworICAg
IH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJl
ZVdhbGtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFBhc3NSZWZQdHI8Tm9kZT4gb2JqZWN0LCBTY3JpcHRTdGF0ZSogc3RhdGUpCitzdGF0aWMg
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KFBhc3NSZWZQdHI8Tm9kZT4g
b2JqZWN0LCBTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUtPmV4Y2VwdGlvbigpKTsKQEAg
LTYyLDcgKzYyLDcgQEAKIAogICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRy
PE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnBhcmVudE5vZGUoJnN0YXRlKTsKLSAgICByZXR1
cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0b1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBS
ZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+Zmlyc3RDaGlsZCgmc3RhdGUpOwotICAg
IHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhP
YmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4VHJlZVdhbGtlcjo6bGFzdENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CiAg
ICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmxhc3RDaGlsZCgmc3RhdGUpOwot
ICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRv
VjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4VHJlZVdhbGtlcjo6bmV4dE5vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsK
ICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+bmV4dE5vZGUoJnN0YXRlKTsK
LSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOworICAgIHJldHVybiB0
b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogICAgIEVtcHR5U2NyaXB0U3RhdGUg
c3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnByZXZpb3VzTm9k
ZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7Cisg
ICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKIH0KIAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6bmV4dFNpYmxpbmdDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTEyLDcgKzExMiw3IEBACiAKICAgICBFbXB0eVNj
cmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5u
ZXh0U2libGluZygmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksICZz
dGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsK
IH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5n
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEyMiw3ICsxMjIsNyBAQAog
CiAgICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0g
dHJlZVdhbGtlci0+cHJldmlvdXNTaWJsaW5nKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHRvVjgocmVz
dWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChyZXN1bHQucmVs
ZWFzZSgpLCAmc3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVk
SW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1cm4gc2V0V2ViR0xBcnJheTxXZWJHTFVuc2ln
bmVkSW50QXJyYXksIFY4V2ViR0xVbnNpZ25lZEludEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6
OldFQkdMVU5TSUdORURJTlRBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KFdlYkdMVW5zaWduZWRJbnRBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IFY4V2ViR0xVbnNpZ25lZEludEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9F
eHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsVW5zaWdu
ZWRJbnRBcnJheSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMiKSByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxTVkd3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiIpIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR2FyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR3RoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTIikgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8U1ZHSU5DTFVESU5HIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHQlVUIE5P
VAorICogTElNSVRFRCBUTyIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1RIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qi
KSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdJTkRJUkVDVCIpIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PFNWR0lOQ0lERU5UQUwsCisgKiBTUEVDSUFMIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8U1ZHRVhFTVBMQVJZIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkciKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
IikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHV0hFVEhFUiBJTiBDT05UUkFDVCIpIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1NUUklDVCBMSUFCSUxJVFkiKSByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxTVkdPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJWOFNWR0VsZW1lbnQuaCIKKworI2lmIEVOQUJMRShTVkcpCisKKyNpbmNsdWRlICJW
OFNWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR0VsZW1lbnQqIGltcGwsIGJvb2wgZm9yY2VOZXdP
YmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAg
ICByZXR1cm4gY3JlYXRlVjhTVkdXcmFwcGVyKGltcGwsIGZvcmNlTmV3T2JqZWN0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNiBAQAog
ICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdMSW50QXJyYXksIFY4V2ViR0xJbnRBcnJheT4o
YXJncywgVjhDbGFzc0luZGV4OjpXRUJHTElOVEFSUkFZKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoV2ViR0xJbnRBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAg
ICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IFY4V2ViR0xJbnRBcnJheTo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICBpZiAoIXdyYXBwZXIu
SXNFbXB0eSgpKQorICAgICAgICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJu
YWxBcnJheURhdGEoaW1wbC0+YmFzZUFkZHJlc3MoKSwgdjg6OmtFeHRlcm5hbEludEFycmF5LCBp
bXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NDA3MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xT
aG9ydEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAg
ICByZXR1cm4gc2V0V2ViR0xBcnJheTxXZWJHTFNob3J0QXJyYXksIFY4V2ViR0xTaG9ydEFycmF5
PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMU0hPUlRBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFdlYkdMU2hvcnRBcnJheSogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IFY4V2ViR0xTaG9ydEFycmF5Ojp0b1Y4SGVscGVyKGltcGwpOworICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVz
VG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVybmFsU2hv
cnRBcnJheSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOFNjcmVlbi5oIgorCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOERP
TVdyYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChTY3JlZW4qIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01P
YmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAg
ICAgIHdyYXBwZXIgPSBWOFNjcmVlbjo6dG9WOEhlbHBlcihpbXBsKTsKKyAgICAgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2lu
ZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93OjpzY3JlZW5JbmRleCwgd3Jh
cHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhckluZm9DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5mb0N1
c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJh
ckluZm9DdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlY4QmFySW5mby5oIgorCisjaW5jbHVkZSAiVjhET01XaW5kb3cu
aCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChCYXJJbmZvKiBpbXBsKQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkgeworICAgICAgICB3cmFwcGVyID0gVjhCYXJJbmZvOjp0b1Y4SGVscGVyKGlt
cGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGcmFt
ZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpOworICAgICAgICAgICAgc3dpdGNoIChpbXBsLT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6TG9jYXRpb25iYXI6CisgICAgICAgICAg
ICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9N
V2luZG93Ojpsb2NhdGlvbmJhckluZGV4LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6TWVudWJhcjoKKyAgICAgICAgICAgICAgICBW
OERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6
Om1lbnViYXJJbmRleCwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEJhckluZm86OlBlcnNvbmFsYmFyOgorICAgICAgICAgICAgICAgIFY4RE9NV3Jh
cHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6cGVyc29u
YWxiYXJJbmRleCwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEJhckluZm86OlNjcm9sbGJhcnM6CisgICAgICAgICAgICAgICAgVjhET01XcmFwcGVy
OjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93OjpzY3JvbGxiYXJz
SW5kZXgsIHdyYXBwZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBCYXJJbmZvOjpTdGF0dXNiYXI6CisgICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRI
aWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93OjpzdGF0dXNiYXJJbmRleCwg
d3JhcHBlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJhcklu
Zm86OlRvb2xiYXI6CisgICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5k
b3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93Ojp0b29sYmFySW5kZXgsIHdyYXBwZXIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJv
aWQudjhiaW5kaW5ncy5tawkocmV2aXNpb24gNTQwNzApCisrKyBXZWJDb3JlL0FuZHJvaWQudjhi
aW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpAQCAtODcsOCArODcsMTMgQEAKIAlcCiAJYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9j
dXN0b20vVjhBdHRyQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5m
b0N1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1J1bGVDdXN0b20uY3Bw
IFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCBc
CisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAgXAorICAg
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBcCisgICAgYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4
L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29vcmRpbmF0
ZXNDdXN0b20uY3BwIFwKQEAgLTEwMSw2ICsxMDYsNyBAQAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVZvaWRDYWxsYmFjay5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERP
TUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhE
T01TZWxlY3Rpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dD
dXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0
b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAgXApAQCAt
MTE5LDYgKzEyNSw3IEBACiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0
b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRGF0YUdyaWRFbGVtZW50Q3VzdG9t
LmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcCBcCisg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgXApAQCAtMTQwLDIwICsxNDcsMjUgQEAK
IAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlRmlsdGVyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUxpc3RDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5D
dXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0Q3Vz
dG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3Bw
IFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCiAKIGlmZXEgKCQo
RU5BQkxFX1NWRyksIHRydWUpCiBMT0NBTF9TUkNfRklMRVMgKz0gXAorICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1l
bnRJbnN0YW5jZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1
c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHAKKyAg
ICBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcCBcCiBlbmRpZgogCiBM
T0NBTF9TUkNfRklMRVMgKz0gXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNoYXJlZFdvcmtlckN1
c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwIFwKKyAg
ICBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0
b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0
Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47864</attachid>
            <date>2010-02-01 12:32:44 -0800</date>
            <delta_ts>2010-02-02 08:29:24 -0800</delta_ts>
            <desc>Attempt #3.2</desc>
            <filename>tov8_4.txt</filename>
            <type>text/plain</type>
            <size>112640</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNTQxMzYpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw4IEBACiB1c2UgU3dpdGNoOwogCiBt
eSAkcHJpbnRGYWN0b3J5ID0gMDsgCi1teSAkcHJpbnRXcmFwcGVyRmFjdG9yeSA9IDA7CitteSAk
cHJpbnRXcmFwcGVyRmFjdG9yeSA9IDA7IAorbXkgJHByaW50V3JhcHBlckZhY3RvcnlWOCA9IDA7
IAogbXkgJHRhZ3NGaWxlID0gIiI7CiBteSAkYXR0cnNGaWxlID0gIiI7CiBteSAkb3V0cHV0RGly
ID0gIi4iOwpAQCAtNTUsNyArNTYsOCBAQAogICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXRE
aXIsCiAgICAgJ2V4dHJhRGVmaW5lcz1zJyA9PiBcJGV4dHJhRGVmaW5lcywKICAgICAncHJlcHJv
Y2Vzc29yPXMnID0+IFwkcHJlcHJvY2Vzc29yLAotICAgICd3cmFwcGVyRmFjdG9yeScgPT4gXCRw
cmludFdyYXBwZXJGYWN0b3J5CisgICAgJ3dyYXBwZXJGYWN0b3J5JyA9PiBcJHByaW50V3JhcHBl
ckZhY3RvcnksCisgICAgJ3dyYXBwZXJGYWN0b3J5VjgnID0+IFwkcHJpbnRXcmFwcGVyRmFjdG9y
eVY4CiApOwogCiBkaWUgIllvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mIC0tdGFncyA8
ZmlsZT4gb3IgLS1hdHRycyA8ZmlsZT4iIHVubGVzcyAobGVuZ3RoKCR0YWdzRmlsZSkgfHwgbGVu
Z3RoKCRhdHRyc0ZpbGUpKTsKQEAgLTcxLDcgKzczLDcgQEAKIG1rcGF0aCgkb3V0cHV0RGlyKTsK
IG15ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5h
bWVzIjsKIG15ICRmYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudEZhY3RvcnkiOwotbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGggPSAiJG91
dHB1dERpci9KUyRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnkiOwor
bXkgJHdyYXBwZXJGYWN0b3J5RmlsZU5hbWUgPSAiJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnRXcmFwcGVyRmFjdG9yeSI7CiAKIHByaW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0
aC5oIik7CiBwcmludE5hbWVzQ3BwRmlsZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7CkBAIC04MSwx
MSArODMsMTkgQEAKICAgICBwcmludEZhY3RvcnlIZWFkZXJGaWxlKCIkZmFjdG9yeUJhc2VQYXRo
LmgiKTsKIH0KIAorZGllICJZb3UgY2Fubm90IHNwZWNpZnkgYm90aCAtLXdyYXBwZXJGYWN0b3J5
IGFuZCAtLXdyYXBwZXJGYWN0b3J5VjgiIGlmICRwcmludFdyYXBwZXJGYWN0b3J5ICYmICRwcmlu
dFdyYXBwZXJGYWN0b3J5Vjg7CitteSAkd3JhcHBlckZhY3RvcnlUeXBlID0gIiI7CiBpZiAoJHBy
aW50V3JhcHBlckZhY3RvcnkpIHsKLSAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgiJHdy
YXBwZXJGYWN0b3J5QmFzZVBhdGguY3BwIik7Ci0gICAgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRl
ckZpbGUoIiR3cmFwcGVyRmFjdG9yeUJhc2VQYXRoLmgiKTsKKyAgICAkd3JhcHBlckZhY3RvcnlU
eXBlID0gIkpTIjsKK30gZWxzaWYgKCRwcmludFdyYXBwZXJGYWN0b3J5VjgpIHsKKyAgICAkd3Jh
cHBlckZhY3RvcnlUeXBlID0gIlY4IjsKIH0KIAoraWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUpIHsK
KyAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgkb3V0cHV0RGlyLCAkd3JhcHBlckZhY3Rv
cnlUeXBlLCAkd3JhcHBlckZhY3RvcnlGaWxlTmFtZSk7CisgICAgcHJpbnRXcmFwcGVyRmFjdG9y
eUhlYWRlckZpbGUoJG91dHB1dERpciwgJHdyYXBwZXJGYWN0b3J5VHlwZSwgJHdyYXBwZXJGYWN0
b3J5RmlsZU5hbWUpOworfQorCiAjIyMgSGFzaCBpbml0aWFsaXphdGlvbgogCiBzdWIgZGVmYXVs
dFRhZ1Byb3BlcnR5SGFzaApAQCAtNTU1LDYgKzU2NSw3IEBACiBzdWIgcHJpbnRKU0VsZW1lbnRJ
bmNsdWRlcwogewogICAgIG15ICRGID0gc2hpZnQ7CisgICAgbXkgJHdyYXBwZXJGYWN0b3J5VHlw
ZSA9IHNoaWZ0OwogCiAgICAgbXkgJXRhZ3NTZWVuOwogICAgIGZvciBteSAkdGFnTmFtZSAoc29y
dCBrZXlzICV0YWdzKSB7CkBAIC01NjIsNyArNTczLDcgQEAKICAgICAgICAgbmV4dCBpZiBkZWZp
bmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIo
JHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCi0g
ICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMke0pTSW50ZXJmYWNlTmFtZX0uaFwiXG4iOwor
ICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcIiR7d3JhcHBlckZhY3RvcnlUeXBlfSR7SlNJbnRl
cmZhY2VOYW1lfS5oXCJcbiI7CiAgICAgfQogfQogCkBAIC03OTksNiArODEwLDcgQEAKIHN1YiBw
cmludFdyYXBwZXJGdW5jdGlvbnMKIHsKICAgICBteSAkRiA9IHNoaWZ0OworICAgIG15ICR3cmFw
cGVyRmFjdG9yeVR5cGUgPSBzaGlmdDsKIAogICAgIG15ICV0YWdzU2VlbjsKICAgICBmb3IgbXkg
JHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgewpAQCAtODEzLDEwICs4MjUsMTEgQEAKICAgICAg
ICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iOwogICAgICAgICB9
CiAKLSAgICAgICAgIyBIYWNrIGZvciB0aGUgbWVkaWEgdGFncwotICAgICAgICAjIEZJWE1FOiBU
aGlzIHNob3VsZCBoYXZlIGJlZW4gZG9uZSB2aWEgYSBDdXN0b21XcmFwcGVyIGF0dHJpYnV0ZSBh
bmQgYSBzZXBhcmF0ZSAqQ3VzdG9tIGZpbGUuCi0gICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17
d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7Ci0gICAgICAgICAgICBwcmludCBGIDw8
RU5ECisgICAgICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsKKyAgICAgICAg
ICAgICMgSGFjayBmb3IgdGhlIG1lZGlhIHRhZ3MKKyAgICAgICAgICAgICMgRklYTUU6IFRoaXMg
c2hvdWxkIGhhdmUgYmVlbiBkb25lIHZpYSBhIEN1c3RvbVdyYXBwZXIgYXR0cmlidXRlIGFuZCBh
IHNlcGFyYXRlICpDdXN0b20gZmlsZS4KKyAgICAgICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17
d3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGV9KSB7CisgICAgICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAogc3RhdGljIEpTTm9kZSogY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgaWYgKCFN
ZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkKQEAgLTgyNiw4ICs4MzksOCBAQAogCiBFTkQKIDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogc3RhdGljIEpTTm9kZSog
Y3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNl
fUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIENSRUFURV9ET01fTk9ERV9XUkFQUEVS
KGV4ZWMsIGdsb2JhbE9iamVjdCwgJHtKU0ludGVyZmFjZU5hbWV9LCBlbGVtZW50LmdldCgpKTsK
QEAgLTgzNSw2ICs4NDgsMTYgQEAKIAogRU5ECiA7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgeworICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNl
TmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQp
KTsKK30KKworRU5ECis7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7
CkBAIC04NDUsOSArODY4LDExIEBACiAKIHN1YiBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZQog
ewotICAgIG15ICRjcHBQYXRoID0gc2hpZnQ7CisgICAgbXkgJG91dHB1dERpciA9IHNoaWZ0Owor
ICAgIG15ICR3cmFwcGVyRmFjdG9yeVR5cGUgPSBzaGlmdDsKKyAgICBteSAkd3JhcHBlckZhY3Rv
cnlGaWxlTmFtZSA9IHNoaWZ0OwogICAgIG15ICRGOwotICAgIG9wZW4gRiwgIj4kY3BwUGF0aCI7
CisgICAgb3BlbiBGLCAiPiIgLiAkb3V0cHV0RGlyIC4gIi8iIC4gJHdyYXBwZXJGYWN0b3J5VHlw
ZSAuICR3cmFwcGVyRmFjdG9yeUZpbGVOYW1lIC4gIi5jcHAiOwogCiAgICAgcHJpbnRMaWNlbnNl
SGVhZGVyKCRGKTsKIApAQCAtODU1LDM4ICs4ODAsNzMgQEAKIAogICAgIHByaW50IEYgIiNpZiAk
cGFyYW1ldGVyc3tndWFyZEZhY3RvcnlXaXRofVxuXG4iIGlmICRwYXJhbWV0ZXJze2d1YXJkRmFj
dG9yeVdpdGh9OwogCi0gICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJKUyRwYXJhbWV0ZXJze25hbWVz
cGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnkuaFwiXG4iOworICAgIHByaW50IEYgIiNpbmNsdWRl
IFwiJHdyYXBwZXJGYWN0b3J5VHlwZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBl
ckZhY3RvcnkuaFwiXG4iOwogCi0gICAgcHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRik7CisgICAg
cHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRiwgJHdyYXBwZXJGYWN0b3J5VHlwZSk7CiAKICAgICBw
cmludCBGICJcbiNpbmNsdWRlIFwiJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5hbWVzLmhcIlxuXG4i
OwogCiAgICAgcHJpbnRFbGVtZW50SW5jbHVkZXMoJEYpOwogCiAgICAgcHJpbnQgRiAiXG4jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPlxuXG4iOwotICAgIAotICAgIHByaW50IEYgPDxFTkQK
KworICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsgICAgCisgICAgICAgIHBy
aW50IEYgPDxFTkQKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CitFTkQKKzsKKyAgICB9IGVsc2lmICgk
d3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAorI2lu
Y2x1ZGUgIlY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQuaCIKKyAgICAgICAgCisjaW5j
bHVkZSA8djguaD4KK0VORAorOworICAgIH0KIAorICAgIHByaW50IEYgPDxFTkQKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfU5h
bWVzOwogCitFTkQKKzsKKyAgICBpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiSlMiKSB7Cisg
ICAgICAgIHByaW50IEYgPDxFTkQKIHR5cGVkZWYgSlNOb2RlKiAoKkNyZWF0ZSRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+KTsKIAog
RU5ECiA7CisgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CisgICAg
ICAgIHByaW50IEYgPDxFTkQKK3R5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICgqQ3JlYXRl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50Kik7CiAKLSAgICBwcmludFdyYXBwZXJGdW5jdGlvbnMoJEYpOwor
RU5ECis7CisgICAgfQogCi0gICAgcHJpbnQgRiA8PEVORAorICAgIHByaW50V3JhcHBlckZ1bmN0
aW9ucygkRiwgJHdyYXBwZXJGYWN0b3J5VHlwZSk7CisKKyAgICBpZiAoJHdyYXBwZXJGYWN0b3J5
VHlwZSBlcSAiSlMiKSB7CisgICAgICAgIHByaW50IEYgPDxFTkQKIEpTTm9kZSogY3JlYXRlSlMk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVs
ZW1lbnQ+IGVsZW1lbnQpCi17ICAgCit7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkF0
b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBw
ZXJGdW5jdGlvbj4gRnVuY3Rpb25NYXA7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlv
bk1hcCwgbWFwLCAoKSk7CiAgICAgaWYgKG1hcC5pc0VtcHR5KCkpIHsKIEVORAogOworICAgIH0g
ZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4IikgeworICAgICAgICBwcmludCBGIDw8
RU5ECit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgYm9vbCBmb3Jj
ZU5ld09iamVjdCkKK3sKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBGdW5jdGlvbk1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZ1bmN0aW9uTWFwLCBtYXAs
ICgpKTsKKyAgICBpZiAobWFwLmlzRW1wdHkoKSkgeworRU5ECis7CisgICAgfQogCiAgICAgZm9y
IG15ICR0YWcgKHNvcnQga2V5cyAldGFncykgewogICAgICAgICAjIERvIG5vdCBhZGQgdGhlIG5h
bWUgdG8gdGhlIG1hcCBpZiBpdCBkb2VzIG5vdCBoYXZlIGEgSlMgd3JhcHBlciBjb25zdHJ1Y3Rv
ciBvciB1c2VzIHRoZSBkZWZhdWx0IHdyYXBwZXIuCkBAIC05MTAsOCArOTcwLDIyIEBACiAgICAg
fQogICAgIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
IGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9IG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1w
bCgpKTsKICAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9uKQorRU5ECis7CisgICAgaWYgKCR3
cmFwcGVyRmFjdG9yeVR5cGUgZXEgIkpTIikgeworICAgICAgICBwcmludCBGIDw8RU5ECiAgICAg
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KTsKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCwgZWxlbWVudC5nZXQoKSk7CitFTkQK
KzsKKyAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAg
cHJpbnQgRiA8PEVORAorICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlckZ1bmN0aW9uKGVsZW1l
bnQpOworICAgIHJldHVybiBWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Ojp3cmFwKGVs
ZW1lbnQsIGZvcmNlTmV3T2JqZWN0KTsKK0VORAorOworICAgIH0KKyAgICBwcmludCBGIDw8RU5E
CiB9CiAKIH0KQEAgLTkyNiwxOCArMTAwMCwyMSBAQAogCiBzdWIgcHJpbnRXcmFwcGVyRmFjdG9y
eUhlYWRlckZpbGUKIHsKLSAgICBteSAkaGVhZGVyUGF0aCA9IHNoaWZ0OworICAgIG15ICRvdXRw
dXREaXIgPSBzaGlmdDsKKyAgICBteSAkd3JhcHBlckZhY3RvcnlUeXBlID0gc2hpZnQ7CisgICAg
bXkgJHdyYXBwZXJGYWN0b3J5RmlsZU5hbWUgPSBzaGlmdDsKICAgICBteSAkRjsKLSAgICBvcGVu
IEYsICI+JGhlYWRlclBhdGgiOworICAgIG9wZW4gRiwgIj4iIC4gJG91dHB1dERpciAuICIvIiAu
ICR3cmFwcGVyRmFjdG9yeVR5cGUgLiAkd3JhcHBlckZhY3RvcnlGaWxlTmFtZSAuICIuaCI7CiAK
ICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogCi0gICAgcHJpbnQgRiAiI2lmbmRlZiBKUyRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKLSAgICBwcmlu
dCBGICIjZGVmaW5lIEpTJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9y
eV9oXG5cbiI7CisgICAgcHJpbnQgRiAiI2lmbmRlZiAkd3JhcHBlckZhY3RvcnlUeXBlJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYg
IiNkZWZpbmUgJHdyYXBwZXJGYWN0b3J5VHlwZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50
V3JhcHBlckZhY3RvcnlfaFxuXG4iOwogCiAgICAgcHJpbnQgRiAiI2lmICRwYXJhbWV0ZXJze2d1
YXJkRmFjdG9yeVdpdGh9XG4iIGlmICRwYXJhbWV0ZXJze2d1YXJkRmFjdG9yeVdpdGh9OwogCi0g
ICAgcHJpbnQgRiA8PEVORAorICAgIGlmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJKUyIpIHsK
KyAgICAgICAgcHJpbnQgRiA8PEVORAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtOTU2LDEwICsxMDMzLDIzIEBACiAgCiBFTkQKIDsKKyAgICB9IGVsc2lm
ICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAor
I2luY2x1ZGUgPHY4Lmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzICRwYXJh
bWV0ZXJze25hbWVzcGFjZX1FbGVtZW50OworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNy
ZWF0ZVY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNl
fUVsZW1lbnQqLCBib29sKTsKK30KK0VORAorOworICAgIH0KKwogICAgIHByaW50IEYgIiNlbmRp
ZiAvLyAkcGFyYW1ldGVyc3tndWFyZEZhY3RvcnlXaXRofVxuXG4iIGlmICRwYXJhbWV0ZXJze2d1
YXJkRmFjdG9yeVdpdGh9OwogCi0gICAgcHJpbnQgRiAiI2VuZGlmIC8vIEpTJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYgIiNlbmRp
ZiAvLyAkd3JhcHBlckZhY3RvcnlUeXBlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRmFjdG9yeV9oXG4iOwogCiAgICAgY2xvc2UgRjsKIH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDEzNikKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTAt
MDEtMjkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhdIEdlbmVyYXRlIHRvVjgoKSBj
b252ZXJ0ZXIgZm9yIG1vc3QgV2ViQ29yZS0+VjggY29udmVyc2lvbnMsCisgICAgICAgIGFuZCBk
ZWZpbmVkIGN1c3RvbSBjb252ZXJ0ZXJzIGluIHRoZWlyIHJlc3BlY3RpdmUgVjg8Y2xhc3M+Q3Vz
dG9tLmNwcC4KKworICAgICAgICBPbGQgY29udmVydGVycyBpbiBWOERPTVdyYXBwZXIgd2lsbCBi
ZSBkZWxldGVkIGluIGEgbGF0ZXIgcGF0Y2guCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTYzCisKKyAgICAgICAgKiBBbmRyb2lkLnY4YmluZGlu
Z3MubWs6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlv
bi5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94
eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhckluZm9DdXN0b20uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3Vz
dG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4
ZWxBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZl
bnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVu
dEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRD
dXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2Vs
ZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlz
dG9yeUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25D
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyZWVuQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVB
cnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9h
dEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTElu
dEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHA6CisK
IDIwMTAtMDEtMjkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkocmV2aXNpb24gNTQxMzYpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsOSArMzAyLDggQEAKICAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTE5hbWVzLmNwcCcsCiAgICAgICAgICAgICAn
PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0hUTUxOYW1lcy5oJywKICAgICAgICAg
ICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTEVsZW1lbnRGYWN0b3J5
LmNwcCcsCi0gICAgICAgICAgICAjIFBhc3MgLS13cmFwcGVyRmFjdG9yeSB0byBtYWtlX25hbWVz
IHRvIGdldCB0aGVzZSAoSlNDIGJ1aWxkPykKLSAgICAgICAgICAgICMnPChTSEFSRURfSU5URVJN
RURJQVRFX0RJUikvd2Via2l0L0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAnLAotICAg
ICAgICAgICAgIyc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSlNIVE1MRWxlbWVu
dFdyYXBwZXJGYWN0b3J5LmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmtpdC9WOEhUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwJywKKyAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvVjhIVE1MRWxlbWVudFdyYXBwZXJG
YWN0b3J5LmgnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAg
ICAgICdweXRob24nLApAQCAtMzE0LDYgKzMxMyw3IEBACiAgICAgICAgICAgICAnPEAoX2lucHV0
cyknLAogICAgICAgICAgICAgJy0tJywKICAgICAgICAgICAgICctLWZhY3RvcnknLAorICAgICAg
ICAgICAgJy0td3JhcHBlckZhY3RvcnlWOCcsCiAgICAgICAgICAgICAnLS1leHRyYURlZmluZXMn
LCAnPChmZWF0dXJlX2RlZmluZXMpJwogICAgICAgICAgIF0sCiAgICAgICAgIH0sCkBAIC0zMjks
OSArMzI5LDggQEAKICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvU1ZHTmFtZXMuaCcsCiAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0L1NWR0VsZW1lbnRGYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2Via2l0L1NWR0VsZW1lbnRGYWN0b3J5LmgnLAotICAgICAgICAgICAg
IyBQYXNzIC0td3JhcHBlckZhY3RvcnkgdG8gbWFrZV9uYW1lcyB0byBnZXQgdGhlc2UgKEpTQyBi
dWlsZD8pCi0gICAgICAgICAgICAjJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9K
U1NWR0VsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAnLAotICAgICAgICAgICAgIyc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJraXQvSlNTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuaCcsCisg
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1Y4U1ZHRWxlbWVu
dFdyYXBwZXJGYWN0b3J5LmNwcCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2Via2l0L1Y4U1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgnLAogICAgICAgICAgIF0s
CiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdweXRob24nLApAQCAtMzQxLDYg
KzM0MCw3IEBACiAgICAgICAgICAgICAnPEAoX2lucHV0cyknLAogICAgICAgICAgICAgJy0tJywK
ICAgICAgICAgICAgICctLWZhY3RvcnknLAorICAgICAgICAgICAgJy0td3JhcHBlckZhY3RvcnlW
OCcsCiAgICAgICAgICAgICAnLS1leHRyYURlZmluZXMnLCAnPChmZWF0dXJlX2RlZmluZXMpJwog
ICAgICAgICAgIF0sCiAgICAgICAgIH0sCkBAIC01ODYsNiArNTg2LDggQEAKICAgICAgICAgJzwo
U0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9TVkdFbGVtZW50RmFjdG9yeS5jcHAnLAog
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1NWR05hbWVzLmNwcCcs
CiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvVXNlckFnZW50U3R5
bGVTaGVldHNEYXRhLmNwcCcsCisgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93
ZWJraXQvVjhIVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCcsCisgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvVjhTVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3Bw
JywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9YTGlua05hbWVz
LmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvWE1MTlNO
YW1lcy5jcHAnLAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L1hN
TE5hbWVzLmNwcCcsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0JKHJldmlzaW9uIDU0MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE0ICsxNTYsMTUgQEAKIAog
ICAgICMgV2hlbiB3ZSdyZSBmaW5pc2hlZCB3aXRoIHRoZSBvbmUtZmlsZS1wZXItY2xhc3MKICAg
ICAjIHJlb3JnYW5pemF0aW9uLCB3ZSB3b24ndCBuZWVkIHRoZXNlIHNwZWNpYWwgY2FzZXMuCi0g
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yIEF2b2lkSW5j
bHVzaW9uT2ZUeXBlKCR0eXBlKSkgewotICAgIH0gZWxzaWYgKCR0eXBlID1+IC9TVkdQYXRoU2Vn
LykgewotICAgICAgICAkam9pbmVkTmFtZSA9ICR0eXBlOwotICAgICAgICAkam9pbmVkTmFtZSA9
fiBzL0Fic3xSZWwvLzsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siJHtqb2luZWROYW1lfS5oIn0g
PSAxOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVU
eXBlKCR0eXBlKSBhbmQgIUF2b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKSBhbmQgJHR5cGUgbmUg
IkRhdGUiKSB7CiAgICAgICAgICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxl
Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7R2V0SW1wbGVtZW50YXRpb25GaWxlTmFtZSgke3R5cGV9
KX0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVze0dldFY4SGVhZGVyTmFtZSgke3R5cGV9KX0g
PSAxOworCisgICAgICAgIGlmICgkdHlwZSA9fiAvU1ZHUGF0aFNlZy8pIHsKKyAgICAgICAgICAg
ICRqb2luZWROYW1lID0gJHR5cGU7CisgICAgICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fic3xS
ZWwvLzsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7am9pbmVkTmFtZX0uaCJ9ID0gMTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgICMgYWRkaXRpb25hbCBpbmNsdWRlcyAodGhpbmdzIG5l
ZWRlZCB0byBjb21waWxlIHRoZSBiaW5kaW5ncyBidXQgbm90IHRoZSBoZWFkZXIpCkBAIC0yMTAs
MTcgKzIxMSw2IEBACiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRpbXBsQ2xhc3NO
YW1lO1xuXG4iKSB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbXBs
Q2xhc3NOYW1lKTsKIH0KIAotc3ViIEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUKLXsKLSAgICBt
eSAkaWZhY2UgPSBzaGlmdDsKLSAgICByZXR1cm4gIkV2ZW50LmgiIGlmICRpZmFjZSBlcSAiRE9N
VGltZVN0YW1wIjsKLSAgICByZXR1cm4gIk5hbWVkQXR0ck1hcC5oIiBpZiAkaWZhY2UgZXEgIk5h
bWVkTm9kZU1hcCI7Ci0gICAgcmV0dXJuICJOYW1lTm9kZUxpc3QuaCIgaWYgJGlmYWNlIGVxICJO
b2RlTGlzdCI7Ci0gICAgcmV0dXJuICJYTUxIdHRwUmVxdWVzdC5oIiBpZiAkaWZhY2UgZXEgIlhN
TEh0dHBSZXF1ZXN0IjsKLQotICAgIHJldHVybiAiJHtpZmFjZX0uaCI7Ci19Ci0KICMgSWYgdGhl
IG5vZGUgaGFzIGEgW0NvbmRpdGlvbmFsPVhYWF0gYXR0cmlidXRlLCByZXR1cm5zIGFuICJFTkFC
TEUoWFhYKSIgc3RyaW5nIGZvciB1c2UgaW4gYW4gI2lmLgogc3ViIEdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcKIHsKQEAgLTI1OCw3ICsyNDgsNiBAQAogCiAgICAgIyBHZXQgY29ycmVjdCBwYXNz
L3N0b3JlIHR5cGVzIHJlc3BlY3RpbmcgUE9EVHlwZSBmbGFnCiAgICAgbXkgJHBvZFR5cGUgPSAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07Ci0gICAgbXkgJHBhc3NU
eXBlID0gJHBvZFR5cGUgPyAiSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIiA6ICIkaW1w
bENsYXNzTmFtZSoiOwogCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJHBv
ZFR5cGUuaFwiXG4iKSBpZiAkcG9kVHlwZSBhbmQgKCRwb2RUeXBlIG5lICJkb3VibGUiIGFuZCAk
cG9kVHlwZSBuZSAiZmxvYXQiIGFuZCAkcG9kVHlwZSBuZSAiUkdCQTMyIik7CiAKQEAgLTI2OCwx
NSArMjU3LDIzIEBACiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiVjhJbmRl
eC5oXCJcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdldEhlYWRlckNsYXNzSW5jbHVk
ZSgkaW1wbENsYXNzTmFtZSkpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFj
ZSBXZWJDb3JlIHtcbiIpOworICAgIGlmICgkcG9kVHlwZSkgeworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiXG50ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPiBjbGFzcyBWOFNWR1BPRFR5
cGVXcmFwcGVyO1xuIik7CisgICAgfQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNz
ICRjbGFzc05hbWUge1xuIik7Ci0gICAgCi0gICAgbXkgJHRvTmF0aXZlUmV0dXJuVHlwZSA9IEdl
dFJldHVyblR5cGVGb3JUb05hdGl2ZSgkaW50ZXJmYWNlTmFtZSk7CisKKyAgICBteSAkbmF0aXZl
VHlwZSA9IEdldE5hdGl2ZVR5cGVGb3JDb252ZXJzaW9ucygkaW50ZXJmYWNlTmFtZSk7CisgICAg
aWYgKCRwb2RUeXBlKSB7CisgICAgICAgICRuYXRpdmVUeXBlID0gIlY4U1ZHUE9EVHlwZVdyYXBw
ZXI8JHtuYXRpdmVUeXBlfSA+IjsKKyAgICB9CisgICAgbXkgJGZvcmNlTmV3T2JqZWN0UGFyYW1l
dGVyID0gSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiLCBib29sIGZvcmNlTmV3T2Jq
ZWN0ID0gZmFsc2UiIDogIiI7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwogCiAg
cHVibGljOgogICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpOwogICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdl
dFJhd1RlbXBsYXRlKCk7Ci0gIHN0YXRpYyAke3RvTmF0aXZlUmV0dXJuVHlwZX0qIHRvTmF0aXZl
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworICBzdGF0aWMgJHtuYXRpdmVUeXBlfSogdG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSoke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSk7CiBFTkQK
IAogICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAtMzQ2LDcgKzM0
MywxMyBAQAogICBmcmllbmQgY2xhc3MgVjhDbGFzc0luZGV4OwogfTsKIAorICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9
KTsKIEVORAorICAgIGlmIChJc1JlZlB0clR5cGUoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKKyAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoUGFzc1JlZlB0cjwke25hdGl2ZVR5cGV9ID4ke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSk7
CitFTkQKKyAgICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifVxuXG4iKTsKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmIC8vICRjbGFzc05hbWUiIC4gIl9IXG4iKTsKQEAg
LTY2NSw3ICs2NjgsNyBAQAogICAgICAgICAkYXR0cklzUG9kVHlwZSA9IDA7CiAgICAgfQogCi0g
ICAgbXkgJGdldHRlclN0cmluZ1VzZXNJbXAgPSAkaW1wbENsYXNzTmFtZSBuZSAiZG91YmxlIjsK
KyAgICBteSAkZ2V0dGVyU3RyaW5nVXNlc0ltcCA9ICRpbXBsQ2xhc3NOYW1lIG5lICJmbG9hdCI7
CiAKICAgIyBHZXR0ZXIKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC04
MjEsMTMgKzgyNCwxNiBAQAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2Vu
ZXJhdGVTVkdDb250ZXh0QXNzaWdubWVudCgkaW1wbENsYXNzTmFtZSwgIndyYXBwZXIuZ2V0KCki
LCAiICAgICIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsIEdlbmVyYXRlU1ZHQ29udGV4dFJldHJpZXZhbCgkaW1wbENsYXNzTmFtZSwgIiAg
ICAiKSk7Ci0gICAgICAgICAgICAkcmVzdWx0ID0gIlY4UHJveHk6OndpdGhTVkdDb250ZXh0KCRy
ZXN1bHQsIGNvbnRleHQpIjsKKyAgICAgICAgICAgICMgVGhlIHRlbXBsYXRpbmcgYXNzb2NpYXRl
ZCB3aXRoIHBhc3Npbmcgd2l0aFNWR0NvbnRleHQoKSdzIHJldHVybiB2YWx1ZSBkaXJlY3RseSBp
bnRvIHRvVjggY2FuIGdldCBjb21waWxlcnMgY29uZnVzZWQsCisgICAgICAgICAgICAjIHNvIGp1
c3QgbWFudWFsbHkgc2V0IHRoZSByZXR1cm4gdmFsdWUgdG8gYSBQYXNzUmVmUHRyIG9mIHRoZSBl
eHBlY3RlZCB0eXBlLgorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBQ
YXNzUmVmUHRyPCRhdHRyVHlwZT4gcmVzdWx0QXNQYXNzUmVmUHRyID0gVjhQcm94eTo6d2l0aFNW
R0NvbnRleHQoJHJlc3VsdCwgY29udGV4dCk7XG4iKTsKKyAgICAgICAgICAgICRyZXN1bHQgPSAi
cmVzdWx0QXNQYXNzUmVmUHRyIjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgkYXR0cklz
UG9kVHlwZSkgewotICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCRhdHRyVHlwZSk7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNl
KCkpO1xuIik7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHthdHRyVHlwZX0uaCJ9ID0gMTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOCh3cmFwcGVy
LnJlbGVhc2UoKS5nZXQoKSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAkcmVzdWx0LCAiICAgICIpLiI7XG4iKTsKICAgICB9CkBAIC05NDMsNyArOTQ5
LDcgQEAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDtcbiIpOwogICAgIH0KIAotICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiZG91Ymxl
IikgeworICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiZmxvYXQiKSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgKmltcCA9ICRyZXN1bHQ7XG4iKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBteSAkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5X
S191Y2ZpcnN0KCRhdHRyTmFtZSk7CkBAIC0xNDcyLDcgKzE0NzgsOSBAQAogICAgICAgICAgIiNp
bmNsdWRlIFwiY29uZmlnLmhcIlxuIiAuCiAgICAgICAgICAiI2luY2x1ZGUgXCJWOFByb3h5Lmhc
IlxuIiAuCiAgICAgICAgICAiI2luY2x1ZGUgXCJWOEJpbmRpbmcuaFwiXG4iIC4KLSAgICAgICAg
ICIjaW5jbHVkZSBcIlY4QmluZGluZ1N0YXRlLmhcIlxuXG4iIC4KKyAgICAgICAgICIjaW5jbHVk
ZSBcIlY4QmluZGluZ1N0YXRlLmhcIlxuIiAuCisgICAgICAgICAiI2luY2x1ZGUgXCJWOERPTVdy
YXBwZXIuaFwiXG4iIC4KKyAgICAgICAgICIjaW5jbHVkZSBcIlY4SXNvbGF0ZWRDb250ZXh0Lmhc
IlxuXG4iIC4KICAgICAgICAgICIjdW5kZWYgTE9HXG5cbiIpOwogCiAgICAgcHVzaChAaW1wbEZp
eGVkSGVhZGVyLCAiXG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOwpAQCAtMTg4OCw3ICsxODk2LDEwIEBACiBFTkQKICAgICB9CiAKLSAgICAkdG9O
YXRpdmVSZXR1cm5UeXBlID0gR2V0UmV0dXJuVHlwZUZvclRvTmF0aXZlKCRpbnRlcmZhY2VOYW1l
KTsKKyAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVGb3JDb252ZXJzaW9ucygkaW50
ZXJmYWNlTmFtZSk7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBP
RFR5cGUifSkgeworICAgICAgICAkbmF0aXZlVHlwZSA9ICJWOFNWR1BPRFR5cGVXcmFwcGVyPCR7
bmF0aXZlVHlwZX0+IjsKKyAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAg
CiAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQpAQCAtMTkwNiw4ICsxOTE3LDggQEAKICAg
cmV0dXJuICR7Y2xhc3NOYW1lfV9jYWNoZV87CiB9CiAKLSR7dG9OYXRpdmVSZXR1cm5UeXBlfSog
JHtjbGFzc05hbWV9Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkgewot
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke3RvTmF0aXZlUmV0dXJuVHlwZX0qPihvYmplY3Qt
PkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOyAK
KyR7bmF0aXZlVHlwZX0qICR7Y2xhc3NOYW1lfTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBvYmplY3QpIHsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8JHtuYXRpdmVUeXBlfSo+
KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdElu
ZGV4KSk7IAogfQogCiBib29sICR7Y2xhc3NOYW1lfTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKSB7CkBAIC0xOTI4LDYgKzE5MzksOCBAQAogfQogRU5ECiAgICAgfQor
ICAgIAorICAgIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMoJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFt
ZSwgJGNsYXNzTmFtZSwgJG5hdGl2ZVR5cGUpOwogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8
RU5EKTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTE5MzYsOSArMTk0OSwxNzMgQEAKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKLXN1YiBHZXRSZXR1cm5UeXBlRm9yVG9OYXRp
dmUKK3N1YiBHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzIAogeworICAgIG15ICRkYXRhTm9kZSA9IHNo
aWZ0OworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzTmFtZSA9
IHNoaWZ0OworICAgIG15ICRuYXRpdmVUeXBlID0gc2hpZnQ7CisgICAgCisgICAgbXkgJHdyYXBw
ZXJUeXBlID0gIlY4Q2xhc3NJbmRleDo6IiAuIHVjKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAk
ZG9tTWFwRnVuY3Rpb24gPSBHZXREb21NYXBGdW5jdGlvbigkZGF0YU5vZGUsICRpbnRlcmZhY2VO
YW1lKTsKKyAgICBteSAkZm9yY2VOZXdPYmplY3RJbnB1dCA9IElzRE9NTm9kZVR5cGUoJGludGVy
ZmFjZU5hbWUpID8gIiwgYm9vbCBmb3JjZU5ld09iamVjdCIgOiAiIjsKKyAgICBteSAkZm9yY2VO
ZXdPYmplY3RDYWxsID0gSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAiLCBmb3JjZU5l
d09iamVjdCIgOiAiIjsKKyAgICAKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOyAgIAor
Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+ICR7Y2xhc3NOYW1lfTo6d3JhcCgke25hdGl2ZVR5cGV9
KiBpbXBsJHtmb3JjZU5ld09iamVjdElucHV0fSkgeworICBWOFByb3h5KiBwcm94eSA9IDA7Cisg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKK0VORAorCisgICAgaWYgKElzTm9kZVN1
YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwor
ICBpZiAoaW1wbC0+ZG9jdW1lbnQoKSkgeworICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUo
aW1wbC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYgKHByb3h5ICYmIHN0YXRpY19jYXN0
PE5vZGUqPihpbXBsLT5kb2N1bWVudCgpKSA9PSBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCkpCisg
ICAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOworICB9CisK
K0VORAorICAgIH0KKworICAgIGlmICgkZG9tTWFwRnVuY3Rpb24pIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgIGlmICghZm9yY2VOZXdPYmplY3QpIHtcbiIpIGlmIElzRE9NTm9kZVR5
cGUoJGludGVyZmFjZU5hbWUpOworICAgICAgICBpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUp
KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgd3JhcHBlciA9IFY4RE9NV3Jh
cHBlcjo6Z2V0V3JhcHBlcihpbXBsKTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgIHdyYXBwZXIgPSAke2RvbU1hcEZ1bmN0aW9ufS5nZXQo
aW1wbCk7XG4iKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQp
OworICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgIHJldHVybiB3cmFwcGVyOworRU5ECisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICB9XG4iKSBpZiBJc0RPTU5vZGVUeXBlKCRpbnRl
cmZhY2VOYW1lKTsKKyAgICB9CisgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworCisgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQ7CisgIGlmIChwcm94eSkKKyAgICBjb250ZXh0ID0gcHJveHktPmNvbnRl
eHQoKTsKKworICAvLyBFbnRlciB0aGUgbm9kZSdzIGNvbnRleHQgYW5kIGNyZWF0ZSB0aGUgd3Jh
cHBlciBpbiB0aGF0IGNvbnRleHQuCisgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisgICAgY29u
dGV4dC0+RW50ZXIoKTsKK0VORAorICAgIH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7CisgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHks
ICR7d3JhcHBlclR5cGV9LCBpbXBsKTsKK0VORAorCisgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRh
dGFOb2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAvLyBFeGl0
IHRoZSBub2RlJ3MgY29udGV4dCBpZiBpdCB3YXMgZW50ZXJlZC4KKyAgaWYgKCFjb250ZXh0Lklz
RW1wdHkoKSkKKyAgICBjb250ZXh0LT5FeGl0KCk7CitFTkQKKyAgICB9CisgICAgCisgICAgcHVz
aChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQorICAgIHJl
dHVybiB3cmFwcGVyOworRU5ECisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgaW1wbC0+cmVm
KCk7XG4iKSBpZiBJc1JlZlB0clR5cGUoJGludGVyZmFjZU5hbWUpOworCisgICAgaWYgKCRkb21N
YXBGdW5jdGlvbikgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAke2Rv
bU1hcEZ1bmN0aW9ufS5zZXQoaW1wbCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3
cmFwcGVyKSk7CitFTkQKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwor
ICByZXR1cm4gd3JhcHBlcjsKK30KK0VORAorCisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW50ZXJm
YWNlTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwke25hdGl2ZVR5cGV9ID4gaW1wbCR7Zm9y
Y2VOZXdPYmplY3RJbnB1dH0pIHsKKyAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSR7Zm9yY2VOZXdP
YmplY3RDYWxsfSk7Cit9CitFTkQKKyAgICB9CisgICAgCisgICAgaWYgKCFIYXNDdXN0b21Ub1Y4
SW1wbGVtZW50YXRpb24oJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtu
YXRpdmVUeXBlfSogaW1wbCR7Zm9yY2VOZXdPYmplY3RJbnB1dH0pIHsKKyAgaWYgKCFpbXBsKQor
ICAgIHJldHVybiB2ODo6TnVsbCgpOworICByZXR1cm4gJHtjbGFzc05hbWV9Ojp3cmFwKGltcGwk
e2ZvcmNlTmV3T2JqZWN0Q2FsbH0pOworfQorRU5ECisgICAgfQorfQorCitzdWIgSGFzQ3VzdG9t
VG9WOEltcGxlbWVudGF0aW9uIHsKKyAgICAjIEZJWE1FOiBUaGlzIHN1YnJvdXRpbmUgaXMgbGFt
ZS4gUHJvYmFibHkgc2hvdWxkIGJlIGFuIC5pZGwgYXR0cmlidXRlIChDdXN0b21Ub1Y4KT8KKyAg
ICAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIAor
ICAgICMgV2UgZ2VuZXJhdGUgYSBjdXN0b20gY29udmVydGVyIChidXQgSlNDIGRvZXNuJ3QpIGZv
ciB0aGUgZm9sbG93aW5nOgorICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJCYXJJ
bmZvIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiQ1NTU3R5bGVTaGVldCI7
CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkNhbnZhc1BpeGVsQXJyYXkiOwor
ICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJDb25zb2xlIjsKKyAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NU2VsZWN0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNl
TmFtZSBlcSAiRWxlbWVudCI7CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkxv
Y2F0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTERvY3VtZW50
IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTEVsZW1lbnQiOworICAg
IHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJIaXN0b3J5IjsKKyAgICByZXR1cm4gMSBp
ZiAkaW50ZXJmYWNlTmFtZSBlcSAiTmFtZWROb2RlTWFwIjsKKyAgICByZXR1cm4gMSBpZiAkaW50
ZXJmYWNlTmFtZSBlcSAiTmF2aWdhdG9yIjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiU1ZHRG9jdW1lbnQiOworICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJT
VkdFbGVtZW50IjsKKyAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU2NyZWVuIjsK
KyAgICAKKyAgICAjIFdlIGRvbid0IGdlbmVyYXRlIGEgY3VzdG9tIGNvbnZlcnRlciAoYnV0IEpT
QyBkb2VzKSBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiQWJzdHJhY3RXb3JrZXIiOworICAgIHJldHVybiAwIGlmICRpbnRlcmZhY2VOYW1lIGVx
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0IjsKKyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFt
ZSBlcSAiSW1hZ2VEYXRhIjsKKyAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZH
RWxlbWVudEluc3RhbmNlIjsKKworICAgICMgRm9yIGV2ZXJ5dGhpbmcgZWxzZSwgZG8gd2hhdCBK
U0MgZG9lcy4KKyAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tVG9KUyJ9OworfQorCitzdWIgR2V0RG9tTWFwRnVuY3Rpb24KK3sKKyAgICBteSAkZGF0YU5v
ZGUgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAiZ2V0RE9NU1ZH
RWxlbWVudEluc3RhbmNlTWFwKCkiIGlmICR0eXBlIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiOwor
ICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgpIiBpZiBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSk7
CisgICAgIyBPbmx5IHVzZSBnZXRET01TVkdPYmplY3RXaXRoQ29udGV4dE1hcCgpIGZvciBub24t
bm9kZSBzdmcgb2JqZWN0cworICAgIHJldHVybiAiZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRN
YXAoKSIgaWYgJHR5cGUgPX4gL1NWRy87CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01J
bXBsZW1lbnRhdGlvbiI7CisgICAgcmV0dXJuICJnZXRBY3RpdmVET01PYmplY3RNYXAoKSIgaWYg
SXNBY3RpdmVEb21UeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gImdldERPTU9iamVjdE1hcCgpIjsK
K30KKworc3ViIElzQWN0aXZlRG9tVHlwZQoreworICAgICMgRklYTUU6IENvbnNpZGVyIG1ha2lu
ZyB0aGlzIGFuIC5pZGwgYXR0cmlidXRlLgorICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIk1lc3NhZ2VQb3J0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiWE1MSHR0cFJlcXVlc3QiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJTb2NrZXQi
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXb3JrZXIiOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJTaGFyZWRXb3JrZXIiOworICAgIHJldHVybiAwOworfQorCitzdWIgR2V0TmF0aXZl
VHlwZUZvckNvbnZlcnNpb25zCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4g
IkZsb2F0UmVjdCIgaWYgJHR5cGUgZXEgIlNWR1JlY3QiOwogICAgIHJldHVybiAiRmxvYXRQb2lu
dCIgaWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKICAgICByZXR1cm4gIlRyYW5zZm9ybWF0aW9uTWF0
cml4IiBpZiAkdHlwZSBlcSAiU1ZHTWF0cml4IjsKQEAgLTE5OTEsNyArMjE2OCw2IEBACiAKICAg
ICBteSAkZmlyc3QgPSAxOwogICAgIG15ICRpbmRleCA9IDA7Ci0gICAgbXkgJG5vZGVUb1JldHVy
biA9IDA7CiAKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSkgewogICAgICAgICBpZiAoJGluZGV4IGVxICRudW1iZXJPZlBhcmFtZXRlcnMpIHsKQEAg
LTIwMTMsMTAgKzIxODksNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGZ1bmN0
aW9uU3RyaW5nIC49ICRwYXJhbU5hbWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybiJ9KSB7Ci0gICAgICAgICAgICAkbm9k
ZVRvUmV0dXJuID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAgICAgfQogICAgICAgICAkaW5kZXgr
KzsKICAgICB9CiAKQEAgLTIwMzUsMTkgKzIyMDcsNyBAQAogICAgIG15ICRyZXR1cm4gPSAicmVz
dWx0IjsKICAgICBteSAkcmV0dXJuSXNSZWYgPSBJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpOwog
Ci0gICAgaWYgKCRub2RlVG9SZXR1cm4pIHsKLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGlu
c2VydEJlZm9yZSwgcmVwbGFjZUNoaWxkLCByZW1vdmVDaGlsZCBhbmQKLSAgICAgICAgIyBhcHBl
bmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBOb2RlLgotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQg
LiAiYm9vbCBzdWNjZXNzID0gJGZ1bmN0aW9uU3RyaW5nO1xuIjsKLSAgICAgICAgaWYgKEB7JGZ1
bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgewotICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5k
ZW50IC4gImlmIChVTkxJS0VMWShlYykpIGdvdG8gZmFpbDtcbiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChzdWNjZXNzKVxuIjsKLSAgICAgICAgJHJlc3Vs
dCAuPSAkaW5kZW50IC4gIiAgICAiIC4KLSAgICAgICAgICAgICJyZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJG5vZGVUb1JldHVybik7XG4iOwotICAgICAgICAkcmVz
dWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIHY4OjpOdWxsKCk7XG4iOwotICAgICAgICByZXR1cm4g
JHJlc3VsdDsKLSAgICB9IGVsc2lmICgkcmV0dXJuVHlwZSBlcSAidm9pZCIpIHsKKyAgICBpZiAo
JHJldHVyblR5cGUgZXEgInZvaWQiKSB7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIk
ZnVuY3Rpb25TdHJpbmc7XG4iOwogICAgIH0gZWxzaWYgKCRjb3B5Rmlyc3QpIHsKICAgICAgICAg
JHJlc3VsdCAuPQpAQCAtMjEwNiw4ICsyMjY2LDggQEAKICAgICB9CiAKICAgICBpZiAoJHJldHVy
bnNQb2RUeXBlKSB7Ci0gICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHJldHVyblR5cGUpOwot
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlci5yZWxlYXNlKCkp
O1xuIjsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke3JldHVyblR5cGV9LmgifSA9IDE7Cisg
ICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gdG9WOCh3cmFwcGVyLnJlbGVhc2Uo
KSk7XG4iOwogICAgIH0gZWxzZSB7CiAgICAgICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlm
ICgkcmV0dXJuSXNSZWYpOwogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRp
dmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICRpbmRlbnQpIC4gIjtc
biI7CkBAIC0yMTY3LDYgKzIzMjcsNyBAQAogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNp
Z25lZCI7CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOwogICAgIHJl
dHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuIDAgaWYgJHR5
cGUgZXEgIlNWR0FuaW1hdGVkUG9pbnRzIjsKIAogICAgIHJldHVybiAxOwogfQpAQCAtMjIwNyw3
ICsyMzY4LDcgQEAKICAgICByZXR1cm4gIlNWR1RyYW5zZm9ybSIgaWYgJHR5cGUgZXEgIlNWR1Ry
YW5zZm9ybSI7CiAgICAgcmV0dXJuICJTVkdMZW5ndGgiIGlmICR0eXBlIGVxICJTVkdMZW5ndGgi
OwogICAgIHJldHVybiAiU1ZHQW5nbGUiIGlmICR0eXBlIGVxICJTVkdBbmdsZSI7Ci0gICAgcmV0
dXJuICJkb3VibGUiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOworICAgIHJldHVybiAiZmxvYXQi
IGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOwogICAgIHJldHVybiAiU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbyIgaWYgJHR5cGUgZXEgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8iOwogICAgIHJldHVybiAi
U1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAgICAg
cmV0dXJuICJET01UaW1lU3RhbXAiIGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwpAQCAtMjQy
Miw3ICsyNTgzLDExIEBACiBzdWIgR2V0VjhIZWFkZXJOYW1lCiB7CiAgICAgbXkgJHR5cGUgPSBz
aGlmdDsKLSAgICByZXR1cm4gIlY4IiAuIEdldEltcGxlbWVudGF0aW9uRmlsZU5hbWUoJHR5cGUp
OworICAgIHJldHVybiAiVjhFdmVudC5oIiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAg
ICByZXR1cm4gIkV2ZW50TGlzdGVuZXIuaCIgaWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOwor
ICAgIHJldHVybiAiRXZlbnRUYXJnZXQuaCIgaWYgJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAg
ICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1cm4gIlY4JHt0eXBlfS5oIjsKIH0KIAogCkBAIC0yNTQ3
LDcgKzI3MTIsNiBAQAogICAgIG15ICR2YWx1ZSA9IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBz
aGlmdDsKICAgICBteSAkdHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRzaWduYXR1cmUpOwot
ICAgIG15ICRjbGFzc05hbWU9ICJWOCR0eXBlIjsKIAogICAgIHJldHVybiAicmV0dXJuIHY4OjpE
YXRlOjpOZXcoc3RhdGljX2Nhc3Q8ZG91YmxlPigkdmFsdWUpKSIgaWYgJHR5cGUgZXEgIkRPTVRp
bWVTdGFtcCI7CiAgICAgcmV0dXJuICJyZXR1cm4gdjhCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBl
IGVxICJib29sZWFuIjsKQEAgLTI1NzQsMjkgKzI3MzgsMjAgQEAKICAgICAgICAgcmV0dXJuICJy
ZXR1cm4gdjhTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgIyBWOCBzcGVjaWZpYy4KLSAg
ICBteSAkaW1wbENsYXNzTmFtZSA9ICR0eXBlOwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlw
ZSk7CiAKICAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURPTSBub2RlIGludGVyZmFjZXMKICAg
ICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgaWYgKCRzaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm5zTmV3In0pIHsKLSAgICAgICAgICAgIHJldHVybiAi
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KCR2YWx1ZSkiOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICJyZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJHZhbHVlKSI7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuICJyZXR1cm4gdG9WOCgke3ZhbHVlfSIgLiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJldHVybnNOZXcifSA/ICIsIHRydWUpIiA6ICIpIik7CiAgICAgfQogCi0gICAgaWYg
KCR0eXBlIGVxICJFdmVudFRhcmdldCIgb3IgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIp
IHsKKyAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IikgewogICAgICAgICByZXR1cm4gInJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoJHZhbHVlKSI7
CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJFdmVudCIpIHsKLSAgICAgICAgcmV0dXJuICJy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KCR2YWx1ZSkiOwotICAg
IH0KLQogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgcmV0dXJu
ICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoaW1w
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICR2YWx1ZSkiOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIn0gPSAxOworICAgICAgICByZXR1cm4gInJl
dHVybiAke3ZhbHVlfSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPihzdGF0aWNfY2FzdDxWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcio+KCR7dmFsdWV9KS0+Z2V0TGlzdGVuZXJPYmplY3QoaW1wLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgp
KSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7
CkBAIC0yNjE2LDE4ICsyNzcxLDE1IEBACiAgICAgICAgIHJldHVybiAicmV0dXJuIFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xh
c3NJbmRleCwgJHZhbHVlKSI7CiAgICAgfQogCi0gICAgZWxzZSB7Ci0gICAgICAgICRpbXBsSW5j
bHVkZXN7Ind0Zi9SZWZDb3VudGVkLmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7Ind0
Zi9SZWZQdHIuaCJ9ID0gMTsKLSAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL0dldFB0ci5oIn0g
PSAxOwotICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCR0eXBlKTsKKyAgICAkaW1wbEluY2x1
ZGVzeyJ3dGYvUmVmQ291bnRlZC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7Ind0Zi9SZWZQ
dHIuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvR2V0UHRyLmgifSA9IDE7CiAKLSAg
ICAgICAgaWYgKElzUG9kVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgICAgICR2YWx1ZSA9IEdlbmVy
YXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIoJHR5cGUsICR2YWx1ZSk7Ci0gICAgICAgIH0KKyAg
ICBpZiAoSXNQb2RUeXBlKCR0eXBlKSkgeworICAgICAgICAkdmFsdWUgPSBHZW5lcmF0ZVNWR1N0
YXRpY1BvZFR5cGVXcmFwcGVyKCR0eXBlLCAkdmFsdWUpIC4gIi5nZXQoKSI7CisgICAgfQogCi0g
ICAgICAgIHJldHVybiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjokY2xhc3NJbmRleCwgJHZhbHVlKSI7Ci0gICAgfQorICAgIHJldHVybiAicmV0
dXJuIHRvVjgoJHZhbHVlKSI7CiB9CiAKIHN1YiBHZW5lcmF0ZVNWR1N0YXRpY1BvZFR5cGVXcmFw
cGVyIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlzaW9uIDU0
MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiVjhET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiVjhET01NYXAu
aCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxp
c3QuaCIKQEAgLTUyLDEyICs1MywxOCBAQAogI2luY2x1ZGUgIlY4SFRNTERvY3VtZW50LmgiCiAj
aW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCi0jaW5j
bHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKKyNpbmNs
dWRlICJWOE1lc3NhZ2VDaGFubmVsLmgiCiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVNYXAuaCIKKyNp
bmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiVjhO
b3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdFbGVt
ZW50SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJWOFNoYXJlZFdvcmtlci5oIgogI2luY2x1ZGUgIlY4
U3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlY4V2ViU29ja2V0LmgiCisjaW5jbHVkZSAiVjhXb3Jr
ZXIuaCIKICNpbmNsdWRlICJXZWJHTEFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCkBAIC05NzYsMTQg
Kzk4MywxNCBAQAogICAgIHJldHVybiB3cmFwcGVyOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGdldFdyYXBwZXIoTm9kZSogbm9kZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhET01XcmFwcGVyOjpnZXRXcmFwcGVyKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKFdURjo6
aXNNYWluVGhyZWFkKCkpOwogICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBjb250ZXh0ID0gVjhJc29s
YXRlZENvbnRleHQ6OmdldEVudGVyZWQoKTsKICAgICBpZiAoTElLRUxZKCFjb250ZXh0KSkgewog
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Piogd3JhcHBlciA9IG5vZGUtPndyYXBw
ZXIoKTsKICAgICAgICAgaWYgKCF3cmFwcGVyKQotICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOworICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKTsKICAgICAgICAgcmV0dXJuICp3cmFwcGVyOwogICAgIH0KIApAQCAtMTA5NCw3NSArMTEw
MSw2NCBAQAogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0g
ICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IHRhcmdldC0+dG9TVkdFbGVtZW50SW5z
dGFuY2UoKTsKLSAgICBpZiAoaW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5DRSwgaW5zdGFuY2UpOworICAgIGlm
IChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0
YW5jZSgpKQorICAgICAgICByZXR1cm4gdG9WOChpbnN0YW5jZSk7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXT1JLRVJTKQotICAgIFdvcmtlciogd29ya2VyID0gdGFyZ2V0LT50b1dvcmtlcigpOwot
ICAgIGlmICh3b3JrZXIpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OldPUktFUiwgd29ya2VyKTsKKyAgICBpZiAoV29ya2VyKiB3b3JrZXIgPSB0YXJnZXQt
PnRvV29ya2VyKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHdvcmtlcik7CiAjZW5kaWYgLy8gV09S
S0VSUwogCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgIFNoYXJlZFdvcmtlciogc2hh
cmVkV29ya2VyID0gdGFyZ2V0LT50b1NoYXJlZFdvcmtlcigpOwotICAgIGlmIChzaGFyZWRXb3Jr
ZXIpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNIQVJF
RFdPUktFUiwgc2hhcmVkV29ya2VyKTsKKyAgICBpZiAoU2hhcmVkV29ya2VyKiBzaGFyZWRXb3Jr
ZXIgPSB0YXJnZXQtPnRvU2hhcmVkV29ya2VyKCkpCisgICAgICAgIHJldHVybiB0b1Y4KHNoYXJl
ZFdvcmtlcik7CiAjZW5kaWYgLy8gU0hBUkVEX1dPUktFUlMKIAogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQotICAgIE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uID0gdGFyZ2V0LT50b05vdGlm
aWNhdGlvbigpOwotICAgIGlmIChub3RpZmljYXRpb24pCi0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uKTsKKyAg
ICBpZiAoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSB0YXJnZXQtPnRvTm90aWZpY2F0aW9u
KCkpCisgICAgICAgIHJldHVybiB0b1Y4KG5vdGlmaWNhdGlvbik7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXRUJfU09DS0VUUykKLSAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHRhcmdldC0+dG9X
ZWJTb2NrZXQoKTsKLSAgICBpZiAod2ViU29ja2V0KQotICAgICAgICByZXR1cm4gY29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIHdlYlNvY2tldCk7CisgICAgaWYgKFdl
YlNvY2tldCogd2ViU29ja2V0ID0gdGFyZ2V0LT50b1dlYlNvY2tldCgpKQorICAgICAgICByZXR1
cm4gdG9WOCh3ZWJTb2NrZXQpOwogI2VuZGlmCiAKLSAgICBOb2RlKiBub2RlID0gdGFyZ2V0LT50
b05vZGUoKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnROb2RlVG9WOE9i
amVjdChub2RlKTsKKyAgICBpZiAoTm9kZSogbm9kZSA9IHRhcmdldC0+dG9Ob2RlKCkpCisgICAg
ICAgIHJldHVybiB0b1Y4KG5vZGUpOwogCiAgICAgaWYgKERPTVdpbmRvdyogZG9tV2luZG93ID0g
dGFyZ2V0LT50b0RPTVdpbmRvdygpKQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpET01XSU5ET1csIGRvbVdpbmRvdyk7CisgICAgICAgIHJldHVybiB0b1Y4
KGRvbVdpbmRvdyk7CiAKICAgICAvLyBYTUxIdHRwUmVxdWVzdCBpcyBjcmVhdGVkIHdpdGhpbiBp
dHMgSlMgY291bnRlcnBhcnQuCi0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0g
dGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0KSB7Cisg
ICAgaWYgKFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHRhcmdldC0+dG9YTUxIdHRw
UmVxdWVzdCgpKSB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdl
dEFjdGl2ZURPTU9iamVjdE1hcCgpLmdldCh4bWxIdHRwUmVxdWVzdCk7CiAgICAgICAgIEFTU0VS
VCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CiAK
ICAgICAvLyBNZXNzYWdlUG9ydCBpcyBjcmVhdGVkIHdpdGhpbiBpdHMgSlMgY291bnRlcnBhcnQK
LSAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHRhcmdldC0+dG9NZXNzYWdlUG9ydCgpOwotICAgIGlm
IChwb3J0KSB7CisgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGFyZ2V0LT50b01lc3NhZ2VQ
b3J0KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0QWN0
aXZlRE9NT2JqZWN0TWFwKCkuZ2V0KHBvcnQpOwogICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNF
bXB0eSgpKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCi0gICAgWE1MSHR0cFJl
cXVlc3RVcGxvYWQqIHVwbG9hZCA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdFVwbG9hZCgpOwot
ICAgIGlmICh1cGxvYWQpIHsKKyAgICBpZiAoWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9
IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdFVwbG9hZCgpKSB7CiAgICAgICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldCh1cGxvYWQpOwogICAg
ICAgICBBU1NFUlQoIXdyYXBwZXIuSXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgfQogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBET01B
cHBsaWNhdGlvbkNhY2hlKiBkb21BcHBDYWNoZSA9IHRhcmdldC0+dG9ET01BcHBsaWNhdGlvbkNh
Y2hlKCk7Ci0gICAgaWYgKGRvbUFwcENhY2hlKQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpET01BUFBMSUNBVElPTkNBQ0hFLCBkb21BcHBDYWNoZSk7Cisg
ICAgaWYgKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUFwcENhY2hlID0gdGFyZ2V0LT50b0RPTUFw
cGxpY2F0aW9uQ2FjaGUoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoZG9tQXBwQ2FjaGUpOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCi0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlID0gdGFyZ2V0LT50b0V2ZW50U291cmNlKCk7Ci0gICAgaWYgKGV2ZW50U291cmNlKQotICAg
ICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpFVkVOVFNPVVJDRSwg
ZXZlbnRTb3VyY2UpOworICAgIGlmIChFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSB0YXJnZXQt
PnRvRXZlbnRTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoZXZlbnRTb3VyY2UpOwogI2Vu
ZGlmCiAKICAgICBBU1NFUlQoMCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24g
NTQxMzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkxLDcgKzE5MSw5IEBACiAgICAgICAgICAgICBzZXRTVkdDb250ZXh0KG9iamVjdC5nZXQo
KSwgY29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9Ci0gICAg
ICAgIHN0YXRpYyB2b2lkKiB3aXRoU1ZHQ29udGV4dCh2b2lkKiBvYmplY3QsIFNWR0VsZW1lbnQq
IGNvbnRleHQpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRp
YyBUKiB3aXRoU1ZHQ29udGV4dChUKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNldFNWR0NvbnRleHQob2JqZWN0LCBjb250ZXh0KTsKICAgICAg
ICAgICAgIHJldHVybiBvYmplY3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJ
KHJldmlzaW9uIDU0MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjU2LDE1ICsyNTYsMjIgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKICNlbmRpZgogCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgLy8gU2V0IGhpZGRlbiByZWZlcmVuY2VzIGluIGEgRE9NV2luZG93
IG9iamVjdCBvZiBhIGZyYW1lLgotICAgICAgICBzdGF0aWMgdm9pZCBzZXRIaWRkZW5XaW5kb3dS
ZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBpbnQgaW50ZXJuYWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pik7Ci0KICAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBo
dG1sRWxlbWVudFR5cGUoSFRNTEVsZW1lbnQqKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBz
dGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1l
bnQqKTsKICNlbmRpZgorICAgICAgICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01X
aW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCisgICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KTsKIAorICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGlu
c3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlLCB2b2lkKiBpbXBsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW5z
dGFudGlhdGVWOE9iamVjdChwcm94eSwgdHlwZSwgdHlwZSwgaW1wbCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRXcmFwcGVyKE5vZGUqKTsK
KworICAgIHByaXZhdGU6CisKICAgICAgICAgLy8gVGhlIGZpcnN0IFY4V3JhcHBlclR5cGUgc3Bl
Y2lmaWVzIHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yCiAgICAgICAgIC8vIHVzZWQgdG8gY3JlYXRl
IEpTIG9iamVjdC4gVGhlIHNlY29uZCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcwogICAgICAgICAv
LyB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZvaWQqIGZvciB0eXBlIGNhc3RpbmcuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDU0MTM2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw2
IEBACiAgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6
OkFycmF5PiBub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKICAgICB7CiAgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6
Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0gICAgICAgIEFTU0VSVChWOERPTVdy
YXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9E
RSk7CiAgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248
Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7CiAgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0
aW9uLT5sZW5ndGgoKTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMg
PSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQx
MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDE2IEBACiAgICAgcmV0dXJuIHNldFdl
YkdMQXJyYXk8V2ViR0xGbG9hdEFycmF5LCBWOFdlYkdMRmxvYXRBcnJheT4oYXJncywgVjhDbGFz
c0luZGV4OjpXRUJHTEZMT0FUQVJSQVkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChXZWJHTEZsb2F0QXJyYXkqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFdl
YkdMRmxvYXRBcnJheTo6d3JhcChpbXBsKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQor
ICAgICAgICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheURhdGEo
aW1wbC0+YmFzZUFkZHJlc3MoKSwgdjg6OmtFeHRlcm5hbEZsb2F0QXJyYXksIGltcGwtPmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MTM2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiVjhOYXZpZ2F0b3IuaCIKIAogI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5o
IgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQyLDQgKzQ0LDE3IEBACiB9CiAjZW5kaWYKIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
TmF2aWdhdG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpO
dWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0
TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICB3
cmFwcGVyID0gVjhOYXZpZ2F0b3I6OndyYXAoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVy
ZW5jZShpbXBsLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6bmF2aWdhdG9ySW5kZXgsIHdyYXBwZXIp
OworICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlD
dXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5jbHVkZSAiVjhXZWJH
TEFycmF5LmgiCisKKyNpbmNsdWRlICJWOFdlYkdMQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiVjhX
ZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRl
ICJWOFdlYkdMU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiVjhX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMQXJyYXkqIGltcGwpCit7CisgICAgaWYgKCFpbXBs
KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBpZiAoaW1wbC0+aXNCeXRlQXJyYXko
KSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xCeXRlQXJyYXkqPihpbXBs
KSk7CisgICAgaWYgKGltcGwtPmlzRmxvYXRBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxXZWJHTEZsb2F0QXJyYXkqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzSW50
QXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xJbnRBcnJheSo+
KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNTaG9ydEFycmF5KCkpCisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFdlYkdMU2hvcnRBcnJheSo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+
aXNVbnNpZ25lZEJ5dGVBcnJheSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc1Vuc2lnbmVk
SW50QXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xVbnNpZ25l
ZEludEFycmF5Kj4oaW1wbCkpOworICAgIGlmIChpbXBsLT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgp
KQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eSo+KGltcGwpKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
IH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KGNvbnN0IFdlYkdMR2V0SW5m
byYgaW5mbykKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChjb25zdCBX
ZWJHTEdldEluZm8mIGluZm8pCiB7CiAgICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewogICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhP
YmplY3QoaW5mbyk7CiB9CiAKIHN0YXRpYyBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdG9XZWJHTFVu
aWZvcm1Mb2NhdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9rKQpAQCAt
MzE3LDcgKzMxNyw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGlu
Zm8pOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlckNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIHRvVjgoaW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5m
byk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0UHJvZ3JhbVBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC0zNjgsNyArMzY4LDcgQEAKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRvVjgo
aW5mbyk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTQwMCw3ICs0MDAsNyBAQAog
ICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbmZvKTsKKyAgICByZXR1cm4g
dG9WOE9iamVjdChpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQpAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihlYyk7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJl
dHVybiB0b1Y4KGluZm8pOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8pOwogfQogCiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJp
YkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEz
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTI1LDQgKzkyNSwzNyBAQAogICAgIHJldHVybiBWOEJpbmRpbmdT
ZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgdGFyZ2V0LCBm
YWxzZSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyogd2luZG93
KQoreworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICAv
LyBJbml0aWFsaXplcyBlbnZpcm9ubWVudCBvZiBhIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBnbG9i
YWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIGZyYW1lLgorICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRv
dy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpOworCisgICAgLy8gU3BlY2lhbCBjYXNlOiBCZWNhdXNlIG9mIGV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKCkgb25lIERPTVdpbmRvdyBjYW4gaGF2ZQorICAgIC8vIG11bHRpcGxl
IGNvbnRleHRzIGFuZCBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggaXQu
IFdoZW4KKyAgICAvLyBjb2RlIHJ1bm5pbmcgaW4gb25lIG9mIHRob3NlIGNvbnRleHRzIGFjY2Vz
c2VzIHRoZSB3aW5kb3cgb2JqZWN0LCB3ZQorICAgIC8vIHdhbnQgdG8gcmV0dXJuIHRoZSBnbG9i
YWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbnRleHQsIG5vdAorICAgIC8vIG5lY2Vz
c2FyaWx5IHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IERPTVdp
bmRvdy4KKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjdXJyZW50Q29udGV4dCA9IHY4OjpD
b250ZXh0OjpHZXRDdXJyZW50KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjdXJyZW50
R2xvYmFsID0gY3VycmVudENvbnRleHQtPkdsb2JhbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgY3VycmVudEdsb2JhbCk7CisgICAgaWYgKCF3aW5kb3dXcmFw
cGVyLklzRW1wdHkoKSkgeworICAgICAgICBpZiAoVjhET01XaW5kb3c6OnRvTmF0aXZlKHdpbmRv
d1dyYXBwZXIpID09IHdpbmRvdykKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50R2xvYmFsOwor
ICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29j
aWF0ZWQgd2l0aCB0aGlzIGZyYW1lLgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIEFTU0VSVCgh
Z2xvYmFsLklzRW1wdHkoKSk7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhl
bEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOENhbnZh
c1BpeGVsQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChDYW52YXNQaXhlbEFycmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gVjhDYW52YXNQaXhlbEFycmF5Ojp3cmFwKGltcGwpOworICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9wZXJ0aWVzVG9QaXhlbERh
dGEoaW1wbC0+ZGF0YSgpLT5kYXRhKCksIGltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gd3Jh
cHBlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MTM2KQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDggKzQyLDExIEBACiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRD
b250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgIlY4U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOFhQYXRoTlNSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlY4WFBhdGhSZXN1bHQuaCIKIApAQCAtMTMyLDQgKzEzNSwyMCBAQAogICAgIHJl
dHVybiB3cmFwcGVyOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChEb2N1bWVudCog
aW1wbCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICAgIGlmIChpbXBsLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKSwgZm9yY2VOZXdP
YmplY3QpOworICAgIGlmIChpbXBsLT5pc1NWR0RvY3VtZW50KCkpCisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IFY4RG9jdW1lbnQ6OndyYXAoaW1wbCwg
Zm9yY2VOZXdPYmplY3QpOworICAgIGlmICghVjhJc29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQo
KSkgeworICAgICAgICBpZiAoVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbXBs
LT5mcmFtZSgpKSkKKyAgICAgICAgICAgIHByb3h5LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1
bWVudFdyYXBwZXIod3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQxMzYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgi
CisjaW5jbHVkZSAiVjhIVE1MQWxsQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4TmFtZWROb2Rl
c0NvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKQEAgLTEzOCw0ICsxMzksMTEg
QEAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChIVE1MQ29sbGVjdGlvbiogaW1wbCkKK3sKKyAgICBpZiAoaW1wbC0+dHlwZSgpID09
IERvY0FsbCkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTEFsbENvbGxlY3Rp
b24qPihpbXBsKSk7CisgICAgcmV0dXJuIFY4SFRNTENvbGxlY3Rpb246OndyYXAoaW1wbCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
MCArMzQsMjggQEAKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlY4QmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhDb21wb3NpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgi
CisjaW5jbHVkZSAiVjhFcnJvckV2ZW50LmgiCisjaW5jbHVkZSAiVjhLZXlib2FyZEV2ZW50Lmgi
CisjaW5jbHVkZSAiVjhNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJWOE1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJWOE11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJWOE92ZXJmbG93RXZlbnQu
aCIKKyNpbmNsdWRlICJWOFBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJWOFBvcFN0
YXRlRXZlbnQuaCIKKyNpbmNsdWRlICJWOFByb2dyZXNzRXZlbnQuaCIKICNpbmNsdWRlICJWOFBy
b3h5LmgiCisjaW5jbHVkZSAiVjhTVkdab29tRXZlbnQuaCIKKyNpbmNsdWRlICJWOFN0b3JhZ2VF
dmVudC5oIgorI2luY2x1ZGUgIlY4VGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVjhVSUV2ZW50Lmgi
CisjaW5jbHVkZSAiVjhXZWJLaXRBbmltYXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlY4V2ViS2l0
VHJhbnNpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiVjhXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAi
VjhYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC02Nyw0ICs4NSw1NiBAQAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEV2ZW50KiBpbXBsKQoreworICAgIGlmICghaW1wbCkK
KyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlzVUlFdmVudCgpKSB7
CisgICAgICAgIGlmIChpbXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihpbXBsKSk7CisgICAgICAgIGlmIChp
bXBsLT5pc1RleHRFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
VGV4dEV2ZW50Kj4oaW1wbCkpOworICAgICAgICBpZiAoaW1wbC0+aXNNb3VzZUV2ZW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oaW1wbCkpOwor
ICAgICAgICBpZiAoaW1wbC0+aXNXaGVlbEV2ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oaW1wbCkpOworI2lmIEVOQUJMRShTVkcpCisgICAg
ICAgIGlmIChpbXBsLT5pc1NWR1pvb21FdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHWm9vbUV2ZW50Kj4oaW1wbCkpOworI2VuZGlmCisgICAgICAgIGlmIChp
bXBsLT5pc0NvbXBvc2l0aW9uRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PENvbXBvc2l0aW9uRXZlbnQqPihpbXBsKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFVJRXZlbnQqPihpbXBsKSk7CisgICAgfQorICAgIGlmIChpbXBsLT5pc011dGF0
aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVu
dCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihpbXBsKSk7CisgICAgaWYgKGlt
cGwtPmlzTWVzc2FnZUV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PE1l
c3NhZ2VFdmVudCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNQYWdlVHJhbnNpdGlvbkV2ZW50
KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFBhZ2VUcmFuc2l0aW9uRXZlbnQq
PihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzUG9wU3RhdGVFdmVudCgpKQorICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxQb3BTdGF0ZUV2ZW50Kj4oaW1wbCkpOworICAgIGlmIChpbXBs
LT5pc1Byb2dyZXNzRXZlbnQoKSkgeworICAgICAgICBpZiAoaW1wbC0+aXNYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCo+KGltcGwpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8UHJvZ3Jlc3NFdmVudCo+KGltcGwpKTsKKyAgICB9CisgICAgaWYgKGltcGwt
PmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8V2ViS2l0QW5pbWF0aW9uRXZlbnQqPihpbXBsKSk7CisgICAgaWYgKGltcGwtPmlzV2ViS2l0
VHJhbnNpdGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYktp
dFRyYW5zaXRpb25FdmVudCo+KGltcGwpKTsKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBpZiAo
aW1wbC0+aXNFcnJvckV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEVy
cm9yRXZlbnQqPihpbXBsKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAg
aWYgKGltcGwtPmlzU3RvcmFnZUV2ZW50KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PFN0b3JhZ2VFdmVudCo+KGltcGwpKTsKKyNlbmRpZgorICAgIGlmIChpbXBsLT5pc0JlZm9y
ZUxvYWRFdmVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxCZWZvcmVMb2Fk
RXZlbnQqPihpbXBsKSk7CisgICAgcmV0dXJuIFY4RXZlbnQ6OndyYXAoaW1wbCk7Cit9CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQxMzYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTYgQEAKICAgICByZXR1cm4gc2V0V2ViR0xBcnJheTxX
ZWJHTEJ5dGVBcnJheSwgVjhXZWJHTEJ5dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpXRUJH
TEJZVEVBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMQnl0ZUFy
cmF5KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhXZWJHTEJ5dGVBcnJheTo6
d3JhcChpbXBsKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICB3cmFwcGVy
LT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheURhdGEoaW1wbC0+YmFzZUFkZHJl
c3MoKSwgdjg6OmtFeHRlcm5hbEJ5dGVBcnJheSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIHJldHVy
biB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxl
Y3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RE9NU2VsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOERPTVNlbGVjdGlvbi5o
IgorCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChET01T
ZWxlY3Rpb24qIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51
bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RN
YXAoKS5nZXQoaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHdy
YXBwZXIgPSBWOERPTVNlbGVjdGlvbjo6d3JhcChpbXBsKTsKKyAgICAgICAgVjhET01XcmFwcGVy
OjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OmRv
bVNlbGVjdGlvbkluZGV4LCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQxMzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSAr
MzUsMjMgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAKICNpbmNsdWRlICJWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4QXR0ci5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4Q0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiVjhDb21tZW50
LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21FdmVu
dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4RG9jdW1l
bnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIlY4RG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiVjhF
bGVtZW50LmgiCisjaW5jbHVkZSAiVjhFbnRpdHkuaCIKKyNpbmNsdWRlICJWOEVudGl0eVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgorI2luY2x1ZGUgIlY4Tm90YXRpb24uaCIKKyNp
bmNsdWRlICJWOFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlICJWOFRleHQuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTUy
LDQgKzE2NCw0MyBAQAogICAgIHJldHVybiB2ODo6TnVsbCgpOwogfQogCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChOb2RlKiBpbXBsLCBib29sIGZvcmNlTmV3T2JqZWN0KQoreworICAgIGlm
ICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgICBpZiAoIWZvcmNlTmV3
T2JqZWN0KSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhET01X
cmFwcGVyOjpnZXRXcmFwcGVyKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorICAgIHN3aXRjaCAoaW1wbC0+
bm9kZVR5cGUoKSkgeworICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAg
ICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxBdHRyKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6OlRFWFRf
Tk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8VGV4dCo+KGltcGwpLCBmb3Jj
ZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENEQVRBU2VjdGlvbio+KGltcGwpLCBmb3JjZU5ld09i
amVjdCk7CisgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PEVudGl0eVJlZmVyZW5jZSo+KGltcGwpLCBmb3JjZU5ld09i
amVjdCk7CisgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8RW50aXR5Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5v
ZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsK
KyAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8Q29tbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpE
T0NVTUVOVF9OT0RFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05P
REU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KGltcGwp
LCBmb3JjZU5ld09iamVjdCk7CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RF
OgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudEZyYWdtZW50Kj4oaW1w
bCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAg
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PE5vdGF0aW9uKj4oaW1wbCksIGZvcmNlTmV3T2Jq
ZWN0KTsKKyAgICBkZWZhdWx0OiBicmVhazsgLy8gWFBBVEhfTkFNRVNQQUNFX05PREUKKyAgICB9
CisgICAgcmV0dXJuIFY4Tm9kZTo6d3JhcChpbXBsLCBmb3JjZU5ld09iamVjdCk7Cit9CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5h
bWVkTm9kZU1hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUg
IlY4RWxlbWVudC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KQEAgLTcyLDQgKzczLDE4IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChOYW1lZE5vZGVNYXAqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBWOE5hbWVkTm9kZU1hcDo6d3JhcChpbXBsKTsKKyAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJl
bmNlIGZyb20gbmFtZWQgbm9kZSBtYXAgdG8gaXRzIG93bmVyIG5vZGUuCisgICAgRWxlbWVudCog
ZWxlbWVudCA9IGltcGwtPmVsZW1lbnQoKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpICYm
IGVsZW1lbnQpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG93bmVyID0gdG9WOChl
bGVtZW50KTsKKyAgICAgICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVsZChWOE5hbWVkTm9kZU1h
cDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVTaGVldEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VjhDU1NTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJWOE5vZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDU1NTdHlsZVNoZWV0KiBpbXBs
KQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhDU1NTdHlsZVNoZWV0Ojp3cmFwKGltcGwp
OworICAgIC8vIEFkZCBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSBzdHlsZXNoZWV0IG9iamVjdCB0
byBpdHMgb3duZXIgbm9kZS4KKyAgICBOb2RlKiBvd25lck5vZGUgPSBpbXBsLT5vd25lck5vZGUo
KTsKKyAgICBpZiAob3duZXJOb2RlICYmICF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3Jh
cHBlci0+U2V0SW50ZXJuYWxGaWVsZChWOENTU1N0eWxlU2hlZXQ6Om93bmVyTm9kZUluZGV4LCB0
b1Y4KG93bmVyTm9kZSkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTE5NSw0ICsxOTYsMjIgQEAKICAg
ICBpbmZvLkhvbGRlcigpLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjpzaGFkb3dJ
bmRleCwgdmFsdWUpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIVE1MRG9jdW1l
bnQqIGltcGwsIGJvb2wgZm9yY2VOZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBWOEhUTUxEb2N1bWVudDo6d3JhcChpbXBsLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKCFW
OElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CisgICAgICAgIGlmIChWOFByb3h5KiBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGltcGwtPmZyYW1lKCkpKQorICAgICAgICAgICAgcHJv
eHktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICB9
CisgICAgLy8gQ3JlYXRlIG1hcmtlciBvYmplY3QgYW5kIGluc2VydCBpdCBpbiB0d28gaW50ZXJu
YWwgZmllbGRzLgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGVtcG9yYXJ5IHNo
YWRvd2luZyBvZiBkb2N1bWVudC5hbGwuCisgICAgQVNTRVJUKHdyYXBwZXItPkludGVybmFsRmll
bGRDb3VudCgpID09IFY4SFRNTERvY3VtZW50OjppbnRlcm5hbEZpZWxkQ291bnQpOworICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBtYXJrZXIgPSB2ODo6T2JqZWN0OjpOZXcoKTsKKyAgICB3cmFw
cGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjptYXJrZXJJbmRleCwgbWFya2Vy
KTsKKyAgICB3cmFwcGVyLT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERvY3VtZW50OjpzaGFkb3dJ
bmRleCwgbWFya2VyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQx
MzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ2FudmFz
U3R5bGUqIHN0eWxlKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KENh
bnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpCiAg
ICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6Q0FOVkFTR1JBRElFTlQsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsKQEAgLTc4LDcgKzc4
LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c3Ryb2tlU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC0+c3Ryb2tlU3R5bGUoKSk7CisgICAgcmV0dXJu
IHRvVjhPYmplY3QoaW1wbC0+c3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQgVjhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpAQCAtOTAsNyArOTAsNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC0+Zmls
bFN0eWxlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGltcGwtPmZpbGxTdHlsZSgpKTsKIH0K
IAogdm9pZCBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlQWNjZXNzb3JTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFNW
R1BhdGhTZWcuaCIKKworI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQXJjQWJzLmgiCisjaW5jbHVkZSAiVjhT
VkdQYXRoU2VnQXJjUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCisj
aW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
UmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5oIgorI2lu
Y2x1ZGUgIlY4U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuaCIKKyNpbmNsdWRlICJWOFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xp
bmV0b0Ficy5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMuaCIK
KyNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLmgiCisjaW5jbHVkZSAi
VjhTVkdQYXRoU2VnTGluZXRvUmVsLmgiCisjaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRvVmVy
dGljYWxBYnMuaCIKKyNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIgor
I2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ01vdmV0b0Ficy5oIgorI2luY2x1ZGUgIlY4U1ZHUGF0aFNl
Z01vdmV0b1JlbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFNWR1BhdGhTZWcqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBzd2l0Y2ggKGltcGwtPnBhdGhTZWdUeXBlKCkpIHsKKyAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ0xPU0VQQVRIOiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0Nsb3NlUGF0aCo+KGltcGwpKTsKKyAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzogICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KGltcGwpKTsKKyAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX1JFTDogICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b1JlbCo+KGltcGwpKTsKKyAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0FCUzogICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficyo+KGltcGwpKTsKKyAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1JFTDogICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1JlbCo+KGltcGwpKTsKKyAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6ICAgICAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KGltcGwp
KTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw6ICAgICAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+
KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNf
QUJTOiAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNBYnMqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9f
UVVBRFJBVElDX1JFTDogICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljUmVsKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNF
R19BUkNfQUJTOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnQXJjQWJzKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19B
UkNfUkVMOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQXJjUmVsKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5F
VE9fSE9SSVpPTlRBTF9BQlM6ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbEFicyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1BhdGhTZWc6OlBB
VEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOiAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwqPihpbXBsKSk7CisgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlM6ICAgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyo+KGltcGwpKTsKKyAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTDogICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4oaW1wbCkp
OworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
QWJzKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklD
X1NNT09USF9SRUw6ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoUmVsKj4oaW1wbCkpOworICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19D
VVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOiByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyo+KGltcGwpKTsKKyAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDogcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwqPihpbXBsKSk7
CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBWOFNWR1BhdGhT
ZWc6OndyYXAoaW1wbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw2ICs2MywxNiBAQAogICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5LCBWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PihhcmdzLCBWOENs
YXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkqIGltcGwpCit7CisgICAgaWYgKCFp
bXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBWOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Ojp3cmFwKGltcGwpOworICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4ZWRQcm9w
ZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6a0V4dGVy
bmFsVW5zaWduZWRTaG9ydEFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBw
ZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4SFRNTEVsZW1lbnQuaCIKKworI2luY2x1
ZGUgIlY4SFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCBib29sIGZv
cmNlTmV3T2JqZWN0KQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxs
KCk7CisgICAgcmV0dXJuIGNyZWF0ZVY4SFRNTFdyYXBwZXIoaW1wbCwgZm9yY2VOZXdPYmplY3Qp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU0MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsMTYgQEAKICAgICByZXR1cm4gc2V0V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
LCBWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJ
R05FREJZVEVBUlJBWSk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMVW5z
aWduZWRCeXRlQXJyYXkqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFdlYkdM
VW5zaWduZWRCeXRlQXJyYXk6OndyYXAoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXlE
YXRhKGltcGwtPmJhc2VBZGRyZXNzKCksIHY4OjprRXh0ZXJuYWxVbnNpZ25lZEJ5dGVBcnJheSwg
aW1wbC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOENT
U1J1bGUuaCIKKworI2luY2x1ZGUgIlY4Q1NTQ2hhcnNldFJ1bGUuaCIKKyNpbmNsdWRlICJWOENT
U0ZvbnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIlY4Q1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUg
IlY4Q1NTTWVkaWFSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUg
IlY4Q1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiVjhDU1NWYXJpYWJsZXNSdWxlLmgiCisjaW5j
bHVkZSAiVjhXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJWOFdlYktpdENTU0tl
eWZyYW1lc1J1bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChDU1NSdWxlKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0
dXJuIHY4OjpOdWxsKCk7CisgICAgc3dpdGNoIChpbXBsLT50eXBlKCkpIHsKKyAgICBjYXNlIENT
U1J1bGU6OlNUWUxFX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1N0
eWxlUnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6OkNIQVJTRVRfUlVMRToKKyAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1bGUqPihpbXBsKSk7CisgICAg
Y2FzZSBDU1NSdWxlOjpJTVBPUlRfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8Q1NTSW1wb3J0UnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIENTU1J1bGU6Ok1FRElBX1JVTEU6
CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGltcGwpKTsK
KyAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgorICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpbXBsKSk7CisgICAgY2FzZSBDU1NSdWxlOjpQ
QUdFX1JVTEU6CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4o
aW1wbCkpOworICAgIGNhc2UgQ1NTUnVsZTo6VkFSSUFCTEVTX1JVTEU6CisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlc1J1bGUqPihpbXBsKSk7CisgICAgY2FzZSBD
U1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4oaW1wbCkpOworICAgIGNhc2UgQ1NTUnVsZTo6
V0VCS0lUX0tFWUZSQU1FU19SVUxFOgorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oaW1wbCkpOworICAgIH0KKyAgICByZXR1cm4gVjhDU1NS
dWxlOjp3cmFwKGltcGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlY4Q1NTVmFsdWUuaCIKKworI2luY2x1ZGUgIlY4Q1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNp
bmNsdWRlICJWOENTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIlY4U1ZHQ29sb3IuaCIKKyNpbmNs
dWRlICJWOFNWR1BhaW50LmgiCisjaW5jbHVkZSAiVjhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENT
U1ZhbHVlKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxs
KCk7CisgICAgaWYgKGltcGwtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihpbXBsKSk7
CisgICAgaWYgKGltcGwtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PENTU1ZhbHVlTGlzdCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNTVkdQYWludCgpKQorICAgICAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxTVkdQYWludCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNTVkdD
b2xvcigpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdDb2xvcio+KGltcGwp
KTsKKyAgICByZXR1cm4gVjhDU1NWYWx1ZTo6d3JhcChpbXBsKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDkgQEAK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4SFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTVkdFbGVtZW50LmgiCiAKICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTEyNyw0ICsxMjksMTQgQEAKICAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEVsZW1lbnQqIGltcGwsIGJvb2wgZm9yY2VOZXdPYmpl
Y3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBp
ZiAoaW1wbC0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CisgICAgaWYgKGltcGwtPmlz
U1ZHRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICByZXR1cm4gVjhFbGVtZW50Ojp3cmFwKGlt
cGwsIGZvcmNlTmV3T2JqZWN0KTsKK30KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVjhTVkdEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiVjhJc29sYXRlZENv
bnRleHQuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRG9jdW1lbnQqIGltcGwsIGJvb2wgZm9yY2VO
ZXdPYmplY3QpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOFNWR0RvY3VtZW50Ojp3cmFw
KGltcGwsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICBpZiAoIVY4SXNvbGF0ZWRDb250ZXh0OjpnZXRF
bnRlcmVkKCkpIHsKKyAgICAgICAgaWYgKFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmll
dmUoaW1wbC0+ZnJhbWUoKSkpCisgICAgICAgICAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+dXBk
YXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOworICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MTM2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1
ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhMb2NhdGlvbi5oIgogI2lu
Y2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAtMzU4LDUgKzM1
OSwxOCBAQAogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhC
aW5kaW5nU3RhdGU6Ok9ubHkoKSwgaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KExvY2F0aW9uKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3cmFwcGVyLklzRW1w
dHkoKSkgeworICAgICAgICB3cmFwcGVyID0gVjhMb2NhdGlvbjo6d3JhcChpbXBsKTsKKyAgICAg
ICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0
SGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZyYW1lKCksIFY4RE9NV2luZG93Ojpsb2NhdGlv
bkluZGV4LCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEz
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw2IEBACiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90
IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVChWOERP
TVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0gICAgQVNTRVJUKFY4
RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4
OjpOT0RFKTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gVjhIVE1MU2VsZWN0RWxlbWVudDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSktPml0ZW0oaW5kZXgpOwogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVjhTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJWOENTU1N0eWxlU2hlZXQuaCIKKyNp
bmNsdWRlICJWOE5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChTdHlsZVNoZWV0KiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgaWYgKGltcGwtPmlzQ1NTU3R5bGVTaGVldCgpKQor
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oaW1wbCkpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4U3R5bGVTaGVldDo6d3JhcChp
bXBsKTsKKyAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20gc3R5bGVzaGVldCBvYmpl
Y3QgdG8gaXRzIG93bmVyIG5vZGUuCisgICAgTm9kZSogb3duZXJOb2RlID0gaW1wbC0+b3duZXJO
b2RlKCk7CisgICAgaWYgKG93bmVyTm9kZSAmJiAhd3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QodG9WOChvd25lck5vZGUpKTsKKyAgICAgICAgd3JhcHBlci0+U2V0SW50ZXJuYWxGaWVs
ZChWOFN0eWxlU2hlZXQ6Om93bmVyTm9kZUluZGV4LCBvd25lcik7CisgICAgfQorICAgIHJldHVy
biB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MTM2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIaXN0b3J5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTk5LDQgKzEwMCwxNyBAQAogICAgIHJldHVybiBWOEJpbmRpbmdTZWN1
cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgaGlzdG9yeS0+ZnJh
bWUoKSwgZmFsc2UpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIaXN0b3J5KiBp
bXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGlt
cGwpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICB3cmFwcGVyID0gVjhI
aXN0b3J5Ojp3cmFwKGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAg
ICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJh
bWUoKSwgVjhET01XaW5kb3c6Omhpc3RvcnlJbmRleCwgd3JhcHBlcik7CisgICAgfQorICAgIHJl
dHVybiB3cmFwcGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDU0
MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIlY4Q29uc29sZS5oIgog
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8
djguaD4KIApAQCAtNTQsNCArNTQsMTcgQEAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDb25zb2xlKiBpbXBsKQoreworICAgIGlm
ICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlmICh3
cmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICB3cmFwcGVyID0gVjhDb25zb2xlOjp3cmFwKGlt
cGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgVjhET01X
cmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5k
b3c6OmNvbnNvbGVJbmRleCwgd3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MTM2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjxOb2RlPiBvYmpl
Y3QsIFNjcmlwdFN0YXRlKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjhPYmplY3QoUGFzc1JlZlB0cjxOb2RlPiBvYmplY3QsIFNjcmlwdFN0YXRlKiBzdGF0
ZSkKIHsKICAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihzdGF0ZS0+ZXhjZXB0aW9uKCkpOwpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgRW1w
dHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtl
ci0+cGFyZW50Tm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCks
ICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRl
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6Zmlyc3RDaGlsZENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC03Miw3ICs3Miw3IEBACiAKICAg
ICBFbXB0eVNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVl
V2Fsa2VyLT5maXJzdENoaWxkKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVh
c2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpLCAm
c3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUcmVlV2Fsa2VyOjpsYXN0Q2hp
bGRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtODIsNyArODIsNyBAQAog
CiAgICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0g
dHJlZVdhbGtlci0+bGFzdENoaWxkKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJl
bGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgp
LCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUcmVlV2Fsa2VyOjpuZXh0
Tm9kZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC05Miw3ICs5Miw3IEBA
CiAKICAgICBFbXB0eVNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQg
PSB0cmVlV2Fsa2VyLT5uZXh0Tm9kZSgmc3RhdGUpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5y
ZWxlYXNlKCksICZzdGF0ZSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2Uo
KSwgJnN0YXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cHJl
dmlvdXNOb2RlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEwMiw3ICsx
MDIsNyBAQAogCiAgICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4g
cmVzdWx0ID0gdHJlZVdhbGtlci0+cHJldmlvdXNOb2RlKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChyZXN1
bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUcmVl
V2Fsa2VyOjpuZXh0U2libGluZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC0xMTIsNyArMTEyLDcgQEAKIAogICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVm
UHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPm5leHRTaWJsaW5nKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgJnN0YXRlKTsKKyAgICByZXR1cm4gdG9WOE9i
amVjdChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICAgICBFbXB0eVNjcmlwdFN0YXRlIHN0
YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5wcmV2aW91c1NpYmxp
bmcoJnN0YXRlKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCAmc3RhdGUpOwor
ICAgIHJldHVybiB0b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCksICZzdGF0ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlz
aW9uIDU0MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVk
SW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxNiBAQAogICAg
IHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdMVW5zaWduZWRJbnRBcnJheSwgVjhXZWJHTFVuc2ln
bmVkSW50QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZKTsK
IH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV2ViR0xVbnNpZ25lZEludEFycmF5KiBp
bXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhXZWJHTFVuc2lnbmVkSW50QXJyYXk6
OndyYXAoaW1wbCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBl
ci0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRy
ZXNzKCksIHY4OjprRXh0ZXJuYWxVbnNpZ25lZEludEFycmF5LCBpbXBsLT5sZW5ndGgoKSk7Cisg
ICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNWR0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3JtcyIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR3dpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8U1ZHdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UiKSByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxTVkd0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdJTkNMVURJTkciKSByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxTVkdCVVQgTk9UCisgKiBMSU1JVEVEIFRPIikgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8U1ZHVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR0lO
RElSRUNUIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFWEVNUExBUlkiKSByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxTVkdPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyIpIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFNWR0JVVCBOT1QKKyAqIExJTUlURUQgVE8iKSByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFkiKSByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxT
VkdXSEVUSEVSIElOIENPTlRSQUNUIikgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHU1RSSUNU
IExJQUJJTElUWSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR09SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSIpIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R0VWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4U1ZHRWxlbWVudC5oIgorCisjaWYg
RU5BQkxFKFNWRykKKworI2luY2x1ZGUgIlY4U1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRWxl
bWVudCogaW1wbCwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAg
ICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHJldHVybiBjcmVhdGVWOFNWR1dyYXBwZXIoaW1w
bCwgZm9yY2VOZXdPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TEludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDE2IEBACiAgICAgcmV0dXJuIHNldFdlYkdMQXJyYXk8V2ViR0xJ
bnRBcnJheSwgVjhXZWJHTEludEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJS
QVkpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChXZWJHTEludEFycmF5KiBpbXBs
KQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhXZWJHTEludEFycmF5Ojp3cmFwKGltcGwp
OworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHdyYXBwZXItPlNldEluZGV4
ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5RGF0YShpbXBsLT5iYXNlQWRkcmVzcygpLCB2ODo6
a0V4dGVybmFsSW50QXJyYXksIGltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
U2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MTM2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw2ICs2MywxNiBAQAogICAgIHJldHVybiBzZXRXZWJHTEFycmF5PFdlYkdMU2hvcnRBcnJh
eSwgVjhXZWJHTFNob3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZ
KTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV2ViR0xTaG9ydEFycmF5KiBpbXBs
KQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhXZWJHTFNob3J0QXJyYXk6OndyYXAoaW1w
bCk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgd3JhcHBlci0+U2V0SW5k
ZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCksIHY4
OjprRXh0ZXJuYWxTaG9ydEFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdyYXBw
ZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0
b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3Jl
ZW5DdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlY4U2NyZWVuLmgiCisKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNjcmVlbiogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisg
ICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKKyAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpIHsKKyAgICAgICAgd3JhcHBlciA9IFY4U2NyZWVuOjp3cmFwKGltcGwpOworICAgICAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRI
aWRkZW5XaW5kb3dSZWZlcmVuY2UoaW1wbC0+ZnJhbWUoKSwgVjhET01XaW5kb3c6OnNjcmVlbklu
ZGV4LCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmFySW5m
b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhC
YXJJbmZvQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4QmFySW5mb0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhCYXJJbmZvLmgiCisKKyNpbmNsdWRlICJWOERP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJhckluZm8qIGltcGwpCit7CisgICAg
aWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7CisgICAgaWYg
KHdyYXBwZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHdyYXBwZXIgPSBWOEJhckluZm86OndyYXAo
aW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCk7CisgICAgICAgICAgICBzd2l0Y2ggKGltcGwtPnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKKyAgICAgICAg
ICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhE
T01XaW5kb3c6OmxvY2F0aW9uYmFySW5kZXgsIHdyYXBwZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgorICAgICAgICAgICAgICAg
IFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRv
dzo6bWVudWJhckluZGV4LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQmFySW5mbzo6UGVyc29uYWxiYXI6CisgICAgICAgICAgICAgICAgVjhET01X
cmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93OjpwZXJz
b25hbGJhckluZGV4LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQmFySW5mbzo6U2Nyb2xsYmFyczoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBw
ZXI6OnNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnNjcm9sbGJh
cnNJbmRleCwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEJhckluZm86OlN0YXR1c2JhcjoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnN0YXR1c2JhckluZGV4
LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQmFy
SW5mbzo6VG9vbGJhcjoKKyAgICAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnRvb2xiYXJJbmRleCwgd3JhcHBlcik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC02NTQsNyArNjU0LDEwIEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRUaHJl
YWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0
V29ya2VyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0
ckN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJhckluZm9D
dXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhl
bEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xBcnJheUN1c3RvbS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xBcnJheUJ1ZmZlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAnLApAQCAtNjY3LDcgKzY3MCwxMCBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvb3JkaW5hdGVz
Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhD
U1NTdHlsZVNoZWV0Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q1NTVmFsdWVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDb25zb2xlQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tQmluZGluZy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21FdmVudExpc3RlbmVyLmNwcCcsCkBAIC02OTMsNiArNjk5LDcgQEAKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2Fj
aGVDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01TZWxl
Y3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhET01X
aW5kb3dDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1l
bnRDdXN0b20uY3BwJywKQEAgLTcwOCw2ICs3MTUsNyBAQAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERhdGFHcmlkRWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lRWxlbWVudEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNl
dEVsZW1lbnRDdXN0b20uY3BwJywKQEAgLTc0MywxMCArNzUxLDE1IEBACiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAnLAor
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCcs
CisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1
c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdD
dXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTY3JlZW5DdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJD
dXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVl
dExpc3RDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVl
V2Fsa2VyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
S2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwJywKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC52OGJp
bmRpbmdzLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCShy
ZXZpc2lvbiA1NDEzNikKKysrIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw4ICs4NywxMyBAQAogCVwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0
cmFjdFdvcmtlckN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20u
Y3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhCYXJJbmZvQ3VzdG9tLmNwcCBcCisgICAg
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9j
dXN0b20vVjhDU1NTdHlsZVNoZWV0Q3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q1NTVmFsdWVDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNQaXhlbEFycmF5Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVj
dExpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20u
Y3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhDb29yZGluYXRlc0N1c3RvbS5jcHAgXApAQCAt
MTAxLDYgKzEwNiw3IEBACiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tVm9pZENh
bGxiYWNrLmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1
c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVNlbGVjdGlvbkN1c3RvbS5j
cHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgXAogCWJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcCBcCkBAIC0xMTksNiArMTI1LDcgQEAKIAli
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxEYXRhR3JpZEVsZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxG
b3JtRWxlbWVudEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVs
ZW1lbnRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVt
ZW50Q3VzdG9tLmNwcCBcCkBAIC0xNDAsMjAgKzE0NywyNSBAQAogCWJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVGaWx0ZXJDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRl
cmF0b3JDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5j
cHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmVlbkN1c3RvbS5jcHAgXAogCWJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwIFwKIAliaW5kaW5n
cy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKIAogaWZlcSAoJChFTkFCTEVfU1ZHKSwgdHJ1ZSkK
IExPQ0FMX1NSQ19GSUxFUyArPSBcCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1l
bnRDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9t
LmNwcCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNw
cCBcCiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcCBcCiAJYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAorICAgIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwIFwKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxFUyArPSBc
CiAJYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBcCiAJYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNo
ZWV0TGlzdEN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0
b20uY3BwIFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rv
ci5jcHAgXAo=
</data>
<flag name="review"
          id="30415"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="30420"
          type_id="3"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47974</attachid>
            <date>2010-02-02 14:06:17 -0800</date>
            <delta_ts>2010-02-03 14:06:17 -0800</delta_ts>
            <desc>Switch custom bindings over to toV8()</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>114662</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMDItMDIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIFVzZSB0b1Y4KCkgdG8gd3JhcCBpbiB0aGUgY3VzdG9tIGJpbmRpbmdzLCBhbmQgcmVtb3Zl
CisgICAgICAgIHRoZSBvbGQgd3JhcHBpbmcgY29kZSBmcm9tIFY4RE9NV3JhcHBlci4KKyAgICAg
ICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2
MworCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhDb2xs
ZWN0aW9uLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJD
b25kaXRpb24uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFj
ay5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRp
b25zQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcDoKKwogMjAxMC0wMi0wMiAgQWRh
bSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ29weSBXZWJDb3JlJ3MgYmlu
ZGluZ3MgZ2VuZXJhdGlvbiBzY3JpcHRzIHRvIHRoZSBQcml2YXRlSGVhZGVycwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDYgQEAKICNpbmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IlY4RE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCkBAIC04NCw5
MyArODMsNiBAQAogdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCB2ODo6T2JqZWN0Kj4gRE9NTm9kZU1h
cDsKIHR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgdjg6Ok9iamVjdCo+IERPTU9iamVjdE1hcDsKIAot
I2lmIEVOQUJMRShTVkcpCi0KLXN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZG93
bmNhc3RTVkdQYXRoU2VnKHZvaWQqIHBhdGhTZWcpCi17Ci0gICAgU1ZHUGF0aFNlZyogcmVhbFBh
dGhTZWcgPSByZWludGVycHJldF9jYXN0PFNWR1BhdGhTZWcqPihwYXRoU2VnKTsKLQotICAgIHN3
aXRjaCAocmVhbFBhdGhTZWctPnBhdGhTZWdUeXBlKCkpIHsKLSAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfQ0xPU0VQQVRIOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRl
eDo6U1ZHUEFUSFNFR0NMT1NFUEFUSDsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9W
RVRPX0FCUzogICAgICAgICAgICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNF
R01PVkVUT0FCUzsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9WRVRPX1JFTDogICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNFR01PVkVUT1JFTDsK
LSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0FCUzogICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNFR0xJTkVUT0FCUzsKLSAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1JFTDogICAgICAgICAgICAgICAgICAgcmV0dXJuIFY4
Q2xhc3NJbmRleDo6U1ZHUEFUSFNFR0xJTkVUT1JFTDsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBB
VEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6ICAgICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6
U1ZHUEFUSFNFR0NVUlZFVE9DVUJJQ0FCUzsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdf
Q1VSVkVUT19DVUJJQ19SRUw6ICAgICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFU
SFNFR0NVUlZFVE9DVUJJQ1JFTDsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVU
T19RVUFEUkFUSUNfQUJTOiAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNFR0NV
UlZFVE9RVUFEUkFUSUNBQlM7Ci0gICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9f
UVVBRFJBVElDX1JFTDogICAgICAgIHJldHVybiBWOENsYXNzSW5kZXg6OlNWR1BBVEhTRUdDVVJW
RVRPUVVBRFJBVElDUkVMOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19BUkNfQUJTOiAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQVJDQUJT
OwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19BUkNfUkVMOiAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQVJDUkVMOwotICAgIGNhc2UgU1ZH
UGF0aFNlZzo6UEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlM6ICAgICAgICByZXR1cm4gVjhD
bGFzc0luZGV4OjpTVkdQQVRIU0VHTElORVRPSE9SSVpPTlRBTEFCUzsKLSAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOiAgICAgICAgcmV0dXJuIFY4Q2xh
c3NJbmRleDo6U1ZHUEFUSFNFR0xJTkVUT0hPUklaT05UQUxSRUw7Ci0gICAgY2FzZSBTVkdQYXRo
U2VnOjpQQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlM6ICAgICAgICAgIHJldHVybiBWOENsYXNz
SW5kZXg6OlNWR1BBVEhTRUdMSU5FVE9WRVJUSUNBTEFCUzsKLSAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTDogICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRl
eDo6U1ZHUEFUSFNFR0xJTkVUT1ZFUlRJQ0FMUkVMOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFU
SFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6ICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpT
VkdQQVRIU0VHQ1VSVkVUT0NVQklDU01PT1RIQUJTOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFU
SFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUw6ICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpT
VkdQQVRIU0VHQ1VSVkVUT0NVQklDU01PT1RIUkVMOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFU
SFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOiByZXR1cm4gVjhDbGFzc0luZGV4OjpT
VkdQQVRIU0VHQ1VSVkVUT1FVQURSQVRJQ1NNT09USEFCUzsKLSAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDogcmV0dXJuIFY4Q2xhc3NJbmRl
eDo6U1ZHUEFUSFNFR0NVUlZFVE9RVUFEUkFUSUNTTU9PVEhSRUw7Ci0gICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWOENsYXNz
SW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVg7Ci0gICAgfQotfQotCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9iamVjdChT
VkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlKQotewotICAgIGlmICghaW5zdGFuY2UpCi0gICAg
ICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBleGlz
dGluZ0luc3RhbmNlID0gZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkuZ2V0KGluc3RhbmNl
KTsKLSAgICBpZiAoIWV4aXN0aW5nSW5zdGFuY2UuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZXhpc3RpbmdJbnN0YW5jZTsKLQotICAgIGluc3RhbmNlLT5yZWYoKTsKLQotICAgIC8vIEluc3Rh
bnRpYXRlIHRoZSBWOCBvYmplY3QgYW5kIHJlbWVtYmVyIGl0Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHRUxF
TUVOVElOU1RBTkNFLCBWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5DRSwgaW5zdGFuY2Up
OwotICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0
aGUgRE9NIFNWRyBlbGVtZW50IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5vbi1lbXB0eS4KLSAgICAg
ICAgZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkuc2V0KGluc3RhbmNlLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0U1ZHT2Jq
ZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
LCB2b2lkKiBvYmplY3QpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiB2ODo6
TnVsbCgpOwotCi0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gcmVzdWx0ID0gZ2V0RE9N
U1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKS5nZXQob2JqZWN0KTsKLSAgICBpZiAoIXJlc3VsdC5J
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBTcGVjaWFsIGNhc2U6
IFNWR1BhdGhTZWdzIG5lZWQgdG8gYmUgZG93bmNhc3QgdG8gdGhlaXIgcmVhbCB0eXBlCi0gICAg
aWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHKQotICAgICAgICB0eXBlID0gZG93
bmNhc3RTVkdQYXRoU2VnKG9iamVjdCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhP
YmplY3QgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIHR5cGUsIG9iamVjdCk7Ci0gICAgaWYg
KCF2OE9iamVjdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyh2OE9iamVjdCk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotI2Rl
ZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgICAgIFwKLSAgICAgICAgY2FzZSBWOENsYXNzSW5k
ZXg6OlRZUEU6IHN0YXRpY19jYXN0PE5BTUUqPihvYmplY3QpLT5yZWYoKTsgYnJlYWs7Ci0gICAg
ICAgIFNWR19PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQotI3VuZGVmIE1BS0VfQ0FTRQotI2RlZmlu
ZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgICAgIFwKLSAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
OlRZUEU6ICAgIFwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8
TkFNRT4qPihvYmplY3QpLT5yZWYoKTsgYnJlYWs7Ci0gICAgICAgIFNWR19QT0RfTkFUSVZFX1RZ
UEVTKE1BS0VfQ0FTRSkKLSN1bmRlZiBNQUtFX0NBU0UKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGdldERPTVNW
R09iamVjdFdpdGhDb250ZXh0TWFwKCkuc2V0KG9iamVjdCwgcmVzdWx0KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKLQogI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4
dGVybmFsQXJyYXkodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKQEAg
LTMyNCwxODggKzIzNiw2IEBACiAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yRm9yQ29udGV4dCh0
eXBlLCBjb250ZXh0KTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQq
IGltcGwpCi17Ci0gICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVExJU1RFTkVS
KTsKLSAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKLSAgICBB
U1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UKTsKLQotICAgIC8vIFRoZXNlIG9iamVj
dHMgY2FuIGJlIGNvbnN0cnVjdGVkIHVuZGVyIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS4g
IFRoZXkgbmVlZCBzcGVjaWFsCi0gICAgLy8gaGFuZGxpbmcsIHNpbmNlIGlmIHdlIHByb2NlZWQg
YmVsb3cgVjhQcm94eTo6cmV0cmlldmUoKSB3aWxsIGdldCBjYWxsZWQgYW5kIHdpbGwgY3Jhc2gu
Ci0gICAgLy8gVE9ETyh1a2FpKTogd2Vic29ja2V0PwotICAgIGlmICgodHlwZSA9PSBWOENsYXNz
SW5kZXg6OkRPTUNPUkVFWENFUFRJT04KLSAgICAgICAgIHx8IHR5cGUgPT0gVjhDbGFzc0luZGV4
OjpSQU5HRUVYQ0VQVElPTgotICAgICAgICAgfHwgdHlwZSA9PSBWOENsYXNzSW5kZXg6OkVWRU5U
RVhDRVBUSU9OCi0gICAgICAgICB8fCB0eXBlID09IFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1RFWENFUFRJT04KLSAgICAgICAgIHx8IHR5cGUgPT0gVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9S
VCkKLSAgICAgICAgJiYgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpKSB7
Ci0gICAgICAgIHJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRUb1Y4
T2JqZWN0KHR5cGUsIGltcGwpOwotICAgIH0KLQotICAgIGJvb2wgaXNBY3RpdmVEb21PYmplY3Qg
PSBmYWxzZTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5B
TUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgotICAgICAgICBET01fTk9ERV9UWVBFUyhNQUtF
X0NBU0UpCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgU1ZHX05PREVfVFlQRVMoTUFLRV9DQVNF
KQotI2VuZGlmCi0gICAgICAgIHJldHVybiBjb252ZXJ0Tm9kZVRvVjhPYmplY3Qoc3RhdGljX2Nh
c3Q8Tm9kZSo+KGltcGwpKTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NTVkFMVUU6Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0KHN0YXRpY19jYXN0PENTU1ZhbHVl
Kj4oaW1wbCkpOwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDU1NSVUxFOgotICAgICAgICByZXR1
cm4gY29udmVydENTU1J1bGVUb1Y4T2JqZWN0KHN0YXRpY19jYXN0PENTU1J1bGUqPihpbXBsKSk7
Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlNUWUxFU0hFRVQ6Ci0gICAgICAgIHJldHVybiBjb252
ZXJ0U3R5bGVTaGVldFRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+KGltcGwpKTsK
LSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XOgotICAgICAgICByZXR1cm4gY29udmVy
dFdpbmRvd1RvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8RE9NV2luZG93Kj4oaW1wbCkpOwotICAgIGNh
c2UgVjhDbGFzc0luZGV4OjpOQU1FRE5PREVNQVA6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0TmFt
ZWROb2RlTWFwVG9WOE9iamVjdChzdGF0aWNfY2FzdDxOYW1lZE5vZGVNYXAqPihpbXBsKSk7Ci0j
aWYgRU5BQkxFKFNWRykKLSAgICAgICAgU1ZHX05PTk5PREVfVFlQRVMoTUFLRV9DQVNFKQotICAg
ICAgICBpZiAodHlwZSA9PSBWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5DRSkKLSAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9iamVjdChzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50SW5zdGFuY2UqPihpbXBsKSk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
U1ZHT2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KHR5cGUsIGltcGwpOwotI2VuZGlmCi0KLSAg
ICAgICAgQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQotICAgICAgICBpc0FjdGl2
ZURvbU9iamVjdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICB9Ci0KLSN1bmRlZiBNQUtFX0NBU0UKLQotICAgIGlmICghaW1wbCkKLSAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAgICAvLyBOb24gRE9NIG5vZGUKLSAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiByZXN1bHQgPSBpc0FjdGl2ZURvbU9iamVjdCA/IGdldEFjdGl2
ZURPTU9iamVjdE1hcCgpLmdldChpbXBsKSA6IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsK
LSAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAg
ICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6V0VCR0xBUlJBWSAmJiBpbXBsKSB7Ci0gICAg
ICAgICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc3ViY2xhc3Mgd2UgYXJlIHdyYXBwaW5nLgotICAg
ICAgICAgICAgV2ViR0xBcnJheSogYXJyYXkgPSByZWludGVycHJldF9jYXN0PFdlYkdMQXJyYXkq
PihpbXBsKTsKLSAgICAgICAgICAgIGlmIChhcnJheS0+aXNCeXRlQXJyYXkoKSkKLSAgICAgICAg
ICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGFycmF5LT5pc0Zsb2F0QXJyYXkoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0g
VjhDbGFzc0luZGV4OjpXRUJHTEZMT0FUQVJSQVk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhcnJh
eS0+aXNJbnRBcnJheSgpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldF
QkdMSU5UQVJSQVk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhcnJheS0+aXNTaG9ydEFycmF5KCkp
Ci0gICAgICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZOwot
ICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXktPmlzVW5zaWduZWRCeXRlQXJyYXkoKSkKLSAgICAg
ICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZOwot
ICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXktPmlzVW5zaWduZWRJbnRBcnJheSgpKQotICAgICAg
ICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGFycmF5LT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKQotICAgICAg
ICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZOwot
ICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhPYmpl
Y3QgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIHR5cGUsIGltcGwpOwotICAgICAgICBpZiAo
IXY4T2JqZWN0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBiaWcgc3dp
dGNoIHN0YXRlbWVudCwgaXQgaGFzIHNvbWUgZHVwbGljYXRpb25zCi0gICAgICAgICAgICAvLyB0
aGF0IHdlcmUgaGFuZGxlZCBieSBjb2RlIGFib3ZlIChzdWNoIGFzIENTU1ZBTFVFLCBDU1NSVUxF
LCBldGMpLgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShU
WVBFLCBOQU1FKSBcCi0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogc3RhdGlj
X2Nhc3Q8TkFNRSo+KGltcGwpLT5yZWYoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgRE9NX09C
SkVDVF9UWVBFUyhNQUtFX0NBU0UpCi0jdW5kZWYgTUFLRV9DQVNFCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmVzdWx0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh2
OE9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoaXNBY3RpdmVEb21PYmplY3QpCi0gICAgICAgICAg
ICAgICAgc2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KGltcGwsIHJlc3VsdCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGlt
cGwsIHJlc3VsdCk7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6Q0FO
VkFTUElYRUxBUlJBWSkgewotICAgICAgICAgICAgICAgIENhbnZhc1BpeGVsQXJyYXkqIHBpeGVs
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUGl4ZWxBcnJheSo+KGltcGwpOwotICAgICAgICAg
ICAgICAgIHJlc3VsdC0+U2V0SW5kZXhlZFByb3BlcnRpZXNUb1BpeGVsRGF0YShwaXhlbHMtPmRh
dGEoKS0+ZGF0YSgpLCBwaXhlbHMtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIH0KLQotI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCi0gICAgICAgICAgICAvLyBTZXQgdXAgV2ViR0xBcnJheSBzdWJjbGFz
c2VzJyBhY2Nlc3NlcyBzaW1pbGFybHkuCi0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWToKLSAgICAgICAgICAg
IGNhc2UgVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZOgotICAgICAgICAgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OldFQkdMU0hPUlRBUlJBWToKLSAgICAgICAgICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEU0hPUlRBUlJBWToKLSAgICAgICAgICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpXRUJHTElOVEFSUkFZOgotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
OldFQkdMVU5TSUdORURJTlRBUlJBWToKLSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpX
RUJHTEZMT0FUQVJSQVk6IHsKLSAgICAgICAgICAgICAgICBXZWJHTEFycmF5KiBhcnJheSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViR0xBcnJheSo+KGltcGwpOwotICAgICAgICAgICAgICAgIHNldElu
ZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KHJlc3VsdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OlRvSW50KHR5
cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFycmF5LT5iYXNlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFycmF5LT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgIC8vIFNwZWNpYWwg
Y2FzZSBmb3Igbm9uLW5vZGUgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYQotICAgICAgICAgICAg
Ly8gRE9NV2luZG93LiBCb3RoIFNhZmFyaSBhbmQgRkYgbGV0IHRoZSBKUyB3cmFwcGVycyBmb3Ig
dGhlc2UKLSAgICAgICAgICAgIC8vIG9iamVjdHMgc3Vydml2ZSBHQy4gVG8gbWltaWMgdGhlaXIg
YmVoYXZpb3IsIFY4IGNyZWF0ZXMKLSAgICAgICAgICAgIC8vIGhpZGRlbiByZWZlcmVuY2VzIGZy
b20gdGhlIERPTVdpbmRvdyB0byB0aGVzZSB3cmFwcGVyCi0gICAgICAgICAgICAvLyBvYmplY3Rz
LiBUaGVzZSByZWZlcmVuY2VzIGdldCBjbGVhcmVkIHdoZW4gdGhlIERPTVdpbmRvdyBpcwotICAg
ICAgICAgICAgLy8gcmV1c2VkIGJ5IGEgbmV3IHBhZ2UuCi0gICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDT05TT0xFOgotICAgICAgICAg
ICAgICAgIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxDb25zb2xlKj4oaW1w
bCktPmZyYW1lKCksIFY4RE9NV2luZG93Ojpjb25zb2xlSW5kZXgsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SElTVE9SWToK
LSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8SGlz
dG9yeSo+KGltcGwpLT5mcmFtZSgpLCBWOERPTVdpbmRvdzo6aGlzdG9yeUluZGV4LCByZXN1bHQp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
Ok5BVklHQVRPUjoKLSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uoc3Rh
dGljX2Nhc3Q8TmF2aWdhdG9yKj4oaW1wbCktPmZyYW1lKCksIFY4RE9NV2luZG93OjpuYXZpZ2F0
b3JJbmRleCwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgVjhDbGFzc0luZGV4OjpTQ1JFRU46Ci0gICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93
UmVmZXJlbmNlKHN0YXRpY19jYXN0PFNjcmVlbio+KGltcGwpLT5mcmFtZSgpLCBWOERPTVdpbmRv
dzo6c2NyZWVuSW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6TE9DQVRJT046Ci0gICAgICAgICAgICAgICAgc2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKHN0YXRpY19jYXN0PExvY2F0aW9uKj4oaW1wbCktPmZyYW1lKCks
IFY4RE9NV2luZG93Ojpsb2NhdGlvbkluZGV4LCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTVNFTEVDVElPTjoKLSAgICAg
ICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8RE9NU2VsZWN0
aW9uKj4oaW1wbCktPmZyYW1lKCksIFY4RE9NV2luZG93Ojpkb21TZWxlY3Rpb25JbmRleCwgcmVz
dWx0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0lu
ZGV4OjpCQVJJTkZPOiB7Ci0gICAgICAgICAgICAgICAgQmFySW5mbyogYmFySW5mbyA9IHN0YXRp
Y19jYXN0PEJhckluZm8qPihpbXBsKTsKLSAgICAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBi
YXJJbmZvLT5mcmFtZSgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFySW5mby0+dHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKLSAgICAgICAg
ICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6
bG9jYXRpb25iYXJJbmRleCwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpNZW51YmFyOgotICAgICAgICAgICAgICAgICAg
ICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93OjptZW51YmFySW5k
ZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgQmFySW5mbzo6UGVyc29uYWxiYXI6Ci0gICAgICAgICAgICAgICAgICAgIHNldEhpZGRl
bldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6OnBlcnNvbmFsYmFySW5kZXgsIHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
QmFySW5mbzo6U2Nyb2xsYmFyczoKLSAgICAgICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93
UmVmZXJlbmNlKGZyYW1lLCBWOERPTVdpbmRvdzo6c2Nyb2xsYmFyc0luZGV4LCByZXN1bHQpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEJhckluZm86
OlN0YXR1c2JhcjoKLSAgICAgICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNl
KGZyYW1lLCBWOERPTVdpbmRvdzo6c3RhdHVzYmFySW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6VG9vbGJhcjoK
LSAgICAgICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOERP
TVdpbmRvdzo6dG9vbGJhckluZGV4LCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQg
VjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqIGZyYW1lLCBjb25z
dCBpbnQgaW50ZXJuYWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBqc09iamVjdCkKIHsK
ICAgICAvLyBHZXQgRE9NV2luZG93CkBAIC01NDksMTIgKzI3OSw4IEBACiAgICAgcmV0dXJuIE5v
ZGVGaWx0ZXI6OmNyZWF0ZShjb25kaXRpb24pOwogfQogCi12ODo6TG9jYWw8djg6Ok9iamVjdD4g
VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkqIHByb3h5LCBWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUgZGVzY3JpcHRvclR5cGUsIFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSBjcHRyVHlwZSwgdm9pZCogaW1wbCkKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKQogewotICAgIC8vIE1ha2UgYSBzcGVj
aWFsIGNhc2UgZm9yIGRvY3VtZW50LmFsbAotICAgIGlmIChkZXNjcmlwdG9yVHlwZSA9PSBWOENs
YXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4o
aW1wbCktPnR5cGUoKSA9PSBEb2NBbGwpCi0gICAgICAgIGRlc2NyaXB0b3JUeXBlID0gVjhDbGFz
c0luZGV4OjpIVE1MQUxMQ09MTEVDVElPTjsKLQogICAgIGlmIChWOElzb2xhdGVkQ29udGV4dDo6
Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhl
IHdyYXBwZXIgY2FjaGUgZm9yIGlzb2xhdGVkIHdvcmxkcy4KICAgICAgICAgcHJveHkgPSAwOwpA
QCAtNTY3LDE0ICsyOTMsMTQgQEAKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2U7
CiAgICAgaWYgKHByb3h5KQogICAgICAgICAvLyBGSVhNRTogRml4IHRoaXMgdG8gd29yayBwcm9w
ZXJseSB3aXRoIGlzb2xhdGVkIHdvcmxkcyAoc2VlIGFib3ZlKS4KLSAgICAgICAgaW5zdGFuY2Ug
PSBwcm94eS0+d2luZG93U2hlbGwoKS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZShkZXNjcmlwdG9y
VHlwZSk7CisgICAgICAgIGluc3RhbmNlID0gcHJveHktPndpbmRvd1NoZWxsKCktPmNyZWF0ZVdy
YXBwZXJGcm9tQ2FjaGUodHlwZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+IGZ1bmN0aW9uID0gZ2V0VGVtcGxhdGUoZGVzY3JpcHRvclR5cGUpLT5HZXRGdW5j
dGlvbigpOworICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IGdldFRl
bXBsYXRlKHR5cGUpLT5HZXRGdW5jdGlvbigpOwogICAgICAgICBpbnN0YW5jZSA9IFNhZmVBbGxv
Y2F0aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7CiAgICAgfQogICAgIGlmICghaW5zdGFuY2Uu
SXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIERPTSB3cmFwcGVyIGZv
ciBmYWlsZWQgYWxsb2NhdGlvbnMuCi0gICAgICAgIHNldERPTVdyYXBwZXIoaW5zdGFuY2UsIFY4
Q2xhc3NJbmRleDo6VG9JbnQoY3B0clR5cGUpLCBpbXBsKTsKKyAgICAgICAgc2V0RE9NV3JhcHBl
cihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSwgaW1wbCk7CiAgICAgfQogICAg
IHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTYwMiwxMyArMzI4LDYgQEAKIH0KICNlbmRpZgogCi1i
b29sIFY4RE9NV3JhcHBlcjo6aXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQotewotICAgIC8vIEFsbCBraW5kcyBvZiBldmVudHMgdXNlIEVWRU5UIGFzIGRvbSB0
eXBlIGluIEpTIHdyYXBwZXJzLgotICAgIC8vIFNlZSBFdmVudFRvVjhPYmplY3QKLSAgICByZXR1
cm4gaXNXcmFwcGVyT2ZUeXBlKHZhbHVlLCBWOENsYXNzSW5kZXg6OkVWRU5UKTsKLX0KLQogYm9v
bCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBjbGFzc1R5cGUpCiB7CiAgICAgaWYgKHZh
bHVlLklzRW1wdHkoKSB8fCAhdmFsdWUtPklzT2JqZWN0KCkpCkBAIC02MzAsMzU5ICszNDksNiBA
QAogICAgIHJldHVybiBWOENsYXNzSW5kZXg6OkZyb21JbnQodHlwZS0+SW50MzJWYWx1ZSgpKSA9
PSBjbGFzc1R5cGU7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi0jZGVmaW5lIEZPUl9FQUNIX1ZJ
REVPX1RBRyhtYWNybykgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oYXVkaW8sIEFVRElP
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oc291cmNlLCBTT1VSQ0Up
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8odmlkZW8sIFZJREVPKQotI2Vs
c2UKLSNkZWZpbmUgRk9SX0VBQ0hfVklERU9fVEFHKG1hY3JvKQotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoREFUQUdSSUQpCi0jZGVmaW5lIEZPUl9FQUNIX0RBVEFHUklEX1RBRyhtYWNybykgICAgICAg
ICAgICAgICBcCi0gICAgbWFjcm8oZGF0YWdyaWQsIERBVEFHUklEKSAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBtYWNybyhkY2VsbCwgREFUQUdSSURDRUxMKSAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKGRjb2wsIERBVEFHUklEQ09MKSAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFjcm8oZHJvdywgREFUQUdSSURST1cpCi0jZWxzZQotI2RlZmluZSBGT1Jf
RUFDSF9EQVRBR1JJRF9UQUcobWFjcm8pCi0jZW5kaWYKLQotI2RlZmluZSBGT1JfRUFDSF9UQUco
bWFjcm8pICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZPUl9FQUNIX0RBVEFHUklEX1RB
RyhtYWNybykgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGEsIEFOQ0hPUikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGFwcGxldCwgQVBQTEVUKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGFyZWEsIEFSRUEpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGJhc2UsIEJBU0UpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGJhc2Vmb250LCBCQVNFRk9OVCkgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKGJsb2NrcXVvdGUsIEJMT0NLUVVPVEUpICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKGJvZHksIEJPRFkpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKGJyLCBCUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKGJ1dHRvbiwgQlVUVE9OKSAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKGNhcHRpb24sIFRBQkxFQ0FQVElPTikgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKGNvbCwgVEFCTEVDT0wpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKGNvbGdyb3VwLCBUQUJMRUNPTCkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKGRlbCwgTU9EKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KGNhbnZhcywgQ0FOVkFTKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGRp
ciwgRElSRUNUT1JZKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGRpdiwg
RElWKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGRsLCBETElT
VCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGVtYmVkLCBFTUJF
RCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGZpZWxkc2V0LCBGSUVM
RFNFVCkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGZvbnQsIEZPTlQpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGZvcm0sIEZPUk0pICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGZyYW1lLCBGUkFNRSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGZyYW1lc2V0LCBGUkFNRVNFVCkgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGgxLCBIRUFESU5HKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKGgyLCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKGgzLCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKGg0LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKGg1LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKGg2LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKGhlYWQsIEhFQUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKGhyLCBIUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKGh0bWwsIEhUTUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KGltZywgSU1BR0UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGlm
cmFtZSwgSUZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGltYWdl
LCBJTUFHRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGlucHV0LCBJ
TlBVVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGlucywgTU9EKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGlzaW5kZXgsIElTSU5E
RVgpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGtleWdlbiwgU0VMRUNUKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGxhYmVsLCBMQUJFTCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGxlZ2VuZCwgTEVHRU5EKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGxpLCBMSSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGxpbmssIExJTkspICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKGxpc3RpbmcsIFBSRSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKG1hcCwgTUFQKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKG1hcnF1ZWUsIE1BUlFVRUUpICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKG1lbnUsIE1FTlUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKG1ldGEsIE1FVEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKG9iamVjdCwgT0JKRUNUKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKG9sLCBPTElTVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKG9wdGdyb3VwLCBPUFRHUk9VUCkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KG9wdGlvbiwgT1BUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHAs
IFBBUkFHUkFQSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHBhcmFt
LCBQQVJBTSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHByZSwgUFJF
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHEsIFFVT1RFKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHNjcmlwdCwgU0NSSVBU
KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHNlbGVjdCwgU0VMRUNUKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHN0eWxlLCBTVFlMRSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRhYmxlLCBUQUJMRSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRoZWFkLCBUQUJMRVNFQ1RJT04pICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRib2R5LCBUQUJMRVNFQ1RJT04pICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKHRmb290LCBUQUJMRVNFQ1RJT04pICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKHRkLCBUQUJMRUNFTEwpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKHRoLCBUQUJMRUNFTEwpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKHRyLCBUQUJMRVJPVykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKHRleHRhcmVhLCBURVhUQVJFQSkgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKHRpdGxlLCBUSVRMRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKHVsLCBVTElTVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKHhtcCwgUFJFKQotCi1WOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhET01XcmFwcGVy
OjpodG1sRWxlbWVudFR5cGUoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlPiBXcmFwcGVyVHlwZU1h
cDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdyYXBwZXJUeXBlTWFwLCB3cmFwcGVyVHlwZU1h
cCwgKCkpOwotICAgIGlmICh3cmFwcGVyVHlwZU1hcC5pc0VtcHR5KCkpIHsKLSNkZWZpbmUgQURE
X1RPX0hBU0hfTUFQKHRhZywgbmFtZSkgXAotICAgICAgICB3cmFwcGVyVHlwZU1hcC5zZXQoI3Rh
ZywgVjhDbGFzc0luZGV4OjpIVE1MIyNuYW1lIyNFTEVNRU5UKTsKLSAgICAgICAgRk9SX0VBQ0hf
VEFHKEFERF9UT19IQVNIX01BUCkKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgICAgIGlmIChNZWRp
YVBsYXllcjo6aXNBdmFpbGFibGUoKSkgewotICAgICAgICAgICAgRk9SX0VBQ0hfVklERU9fVEFH
KEFERF9UT19IQVNIX01BUCkKLSAgICAgICAgfQotI2VuZGlmCi0jdW5kZWYgQUREX1RPX0hBU0hf
TUFQCi0gICAgfQotCi0gICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSB3cmFw
cGVyVHlwZU1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICBpZiAoIXR5
cGUpCi0gICAgICAgIHJldHVybiBWOENsYXNzSW5kZXg6OkhUTUxFTEVNRU5UOwotICAgIHJldHVy
biB0eXBlOwotfQotI3VuZGVmIEZPUl9FQUNIX1RBRwotCi0jaWYgRU5BQkxFKFNWRykKLQotI2lm
IEVOQUJMRShTVkdfQU5JTUFUSU9OKQotI2RlZmluZSBGT1JfRUFDSF9BTklNQVRJT05fVEFHKG1h
Y3JvKSBcCi0gICAgbWFjcm8oYW5pbWF0ZUNvbG9yLCBBTklNQVRFQ09MT1IpIFwKLSAgICBtYWNy
byhhbmltYXRlLCBBTklNQVRFKSBcCi0gICAgbWFjcm8oYW5pbWF0ZVRyYW5zZm9ybSwgQU5JTUFU
RVRSQU5TRk9STSkgXAotICAgIG1hY3JvKHNldCwgU0VUKQotI2Vsc2UKLSNkZWZpbmUgRk9SX0VB
Q0hfQU5JTUFUSU9OX1RBRyhtYWNybykKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5B
QkxFKEZJTFRFUlMpCi0jZGVmaW5lIEZPUl9FQUNIX0ZJTFRFUlNfVEFHKG1hY3JvKSBcCi0gICAg
bWFjcm8oZmVCbGVuZCwgRkVCTEVORCkgXAotICAgIG1hY3JvKGZlQ29sb3JNYXRyaXgsIEZFQ09M
T1JNQVRSSVgpIFwKLSAgICBtYWNybyhmZUNvbXBvbmVudFRyYW5zZmVyLCBGRUNPTVBPTkVOVFRS
QU5TRkVSKSBcCi0gICAgbWFjcm8oZmVDb21wb3NpdGUsIEZFQ09NUE9TSVRFKSBcCi0gICAgbWFj
cm8oZmVEaWZmdXNlTGlnaHRpbmcsIEZFRElGRlVTRUxJR0hUSU5HKSBcCi0gICAgbWFjcm8oZmVE
aXNwbGFjZW1lbnRNYXAsIEZFRElTUExBQ0VNRU5UTUFQKSBcCi0gICAgbWFjcm8oZmVEaXN0YW50
TGlnaHQsIEZFRElTVEFOVExJR0hUKSBcCi0gICAgbWFjcm8oZmVGbG9vZCwgRkVGTE9PRCkgXAot
ICAgIG1hY3JvKGZlRnVuY0EsIEZFRlVOQ0EpIFwKLSAgICBtYWNybyhmZUZ1bmNCLCBGRUZVTkNC
KSBcCi0gICAgbWFjcm8oZmVGdW5jRywgRkVGVU5DRykgXAotICAgIG1hY3JvKGZlRnVuY1IsIEZF
RlVOQ1IpIFwKLSAgICBtYWNybyhmZUdhdXNzaWFuQmx1ciwgRkVHQVVTU0lBTkJMVVIpIFwKLSAg
ICBtYWNybyhmZUltYWdlLCBGRUlNQUdFKSBcCi0gICAgbWFjcm8oZmVNZXJnZSwgRkVNRVJHRSkg
XAotICAgIG1hY3JvKGZlTWVyZ2VOb2RlLCBGRU1FUkdFTk9ERSkgXAotICAgIG1hY3JvKGZlTW9y
cGhvbG9neSwgRkVNT1JQSE9MT0dZKSBcCi0gICAgbWFjcm8oZmVPZmZzZXQsIEZFT0ZGU0VUKSBc
Ci0gICAgbWFjcm8oZmVQb2ludExpZ2h0LCBGRVBPSU5UTElHSFQpIFwKLSAgICBtYWNybyhmZVNw
ZWN1bGFyTGlnaHRpbmcsIEZFU1BFQ1VMQVJMSUdIVElORykgXAotICAgIG1hY3JvKGZlU3BvdExp
Z2h0LCBGRVNQT1RMSUdIVCkgXAotICAgIG1hY3JvKGZlVGlsZSwgRkVUSUxFKSBcCi0gICAgbWFj
cm8oZmVUdXJidWxlbmNlLCBGRVRVUkJVTEVOQ0UpIFwKLSAgICBtYWNybyhmaWx0ZXIsIEZJTFRF
UikKLSNlbHNlCi0jZGVmaW5lIEZPUl9FQUNIX0ZJTFRFUlNfVEFHKG1hY3JvKQotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2RlZmluZSBGT1JfRUFDSF9GT05UU19UQUcobWFjcm8p
IFwKLSAgICBtYWNybyhmb250LWZhY2UsIEZPTlRGQUNFKSBcCi0gICAgbWFjcm8oZm9udC1mYWNl
LWZvcm1hdCwgRk9OVEZBQ0VGT1JNQVQpIFwKLSAgICBtYWNybyhmb250LWZhY2UtbmFtZSwgRk9O
VEZBQ0VOQU1FKSBcCi0gICAgbWFjcm8oZm9udC1mYWNlLXNyYywgRk9OVEZBQ0VTUkMpIFwKLSAg
ICBtYWNybyhmb250LWZhY2UtdXJpLCBGT05URkFDRVVSSSkKLSNlbHNlCi0jZGVmaW5lIEZPUl9F
QUNIX0ZPTlRTX1RBRyhtYXJjbykKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNWR19GT1JFSUdOX09C
SkVDVCkKLSNkZWZpbmUgRk9SX0VBQ0hfRk9SRUlHTl9PQkpFQ1RfVEFHKG1hY3JvKSBcCi0gICAg
bWFjcm8oZm9yZWlnbk9iamVjdCwgRk9SRUlHTk9CSkVDVCkKLSNlbHNlCi0jZGVmaW5lIEZPUl9F
QUNIX0ZPUkVJR05fT0JKRUNUX1RBRyhtYWNybykKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNWR19V
U0UpCi0jZGVmaW5lIEZPUl9FQUNIX1VTRV9UQUcobWFjcm8pIFwKLSAgICBtYWNybyh1c2UsIFVT
RSkKLSNlbHNlCi0jZGVmaW5lIEZPUl9FQUNIX1VTRV9UQUcobWFjcm8pCi0jZW5kaWYKLQotI2Rl
ZmluZSBGT1JfRUFDSF9UQUcobWFjcm8pIFwKLSAgICBGT1JfRUFDSF9BTklNQVRJT05fVEFHKG1h
Y3JvKSBcCi0gICAgRk9SX0VBQ0hfRklMVEVSU19UQUcobWFjcm8pIFwKLSAgICBGT1JfRUFDSF9G
T05UU19UQUcobWFjcm8pIFwKLSAgICBGT1JfRUFDSF9GT1JFSUdOX09CSkVDVF9UQUcobWFjcm8p
IFwKLSAgICBGT1JfRUFDSF9VU0VfVEFHKG1hY3JvKSBcCi0gICAgbWFjcm8oYSwgQSkgXAotICAg
IG1hY3JvKGFsdEdseXBoLCBBTFRHTFlQSCkgXAotICAgIG1hY3JvKGNpcmNsZSwgQ0lSQ0xFKSBc
Ci0gICAgbWFjcm8oY2xpcFBhdGgsIENMSVBQQVRIKSBcCi0gICAgbWFjcm8oY3Vyc29yLCBDVVJT
T1IpIFwKLSAgICBtYWNybyhkZWZzLCBERUZTKSBcCi0gICAgbWFjcm8oZGVzYywgREVTQykgXAot
ICAgIG1hY3JvKGVsbGlwc2UsIEVMTElQU0UpIFwKLSAgICBtYWNybyhnLCBHKSBcCi0gICAgbWFj
cm8oZ2x5cGgsIEdMWVBIKSBcCi0gICAgbWFjcm8oaW1hZ2UsIElNQUdFKSBcCi0gICAgbWFjcm8o
bGluZWFyR3JhZGllbnQsIExJTkVBUkdSQURJRU5UKSBcCi0gICAgbWFjcm8obGluZSwgTElORSkg
XAotICAgIG1hY3JvKG1hcmtlciwgTUFSS0VSKSBcCi0gICAgbWFjcm8obWFzaywgTUFTSykgXAot
ICAgIG1hY3JvKG1ldGFkYXRhLCBNRVRBREFUQSkgXAotICAgIG1hY3JvKHBhdGgsIFBBVEgpIFwK
LSAgICBtYWNybyhwYXR0ZXJuLCBQQVRURVJOKSBcCi0gICAgbWFjcm8ocG9seWxpbmUsIFBPTFlM
SU5FKSBcCi0gICAgbWFjcm8ocG9seWdvbiwgUE9MWUdPTikgXAotICAgIG1hY3JvKHJhZGlhbEdy
YWRpZW50LCBSQURJQUxHUkFESUVOVCkgXAotICAgIG1hY3JvKHJlY3QsIFJFQ1QpIFwKLSAgICBt
YWNybyhzY3JpcHQsIFNDUklQVCkgXAotICAgIG1hY3JvKHN0b3AsIFNUT1ApIFwKLSAgICBtYWNy
byhzdHlsZSwgU1RZTEUpIFwKLSAgICBtYWNybyhzdmcsIFNWRykgXAotICAgIG1hY3JvKHN3aXRj
aCwgU1dJVENIKSBcCi0gICAgbWFjcm8oc3ltYm9sLCBTWU1CT0wpIFwKLSAgICBtYWNybyh0ZXh0
LCBURVhUKSBcCi0gICAgbWFjcm8odGV4dFBhdGgsIFRFWFRQQVRIKSBcCi0gICAgbWFjcm8odGl0
bGUsIFRJVExFKSBcCi0gICAgbWFjcm8odHJlZiwgVFJFRikgXAotICAgIG1hY3JvKHRzcGFuLCBU
U1BBTikgXAotICAgIG1hY3JvKHZpZXcsIFZJRVcpIFwKLSAgICAvLyBlbmQgb2YgbWFjcm8KLQot
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIFY4RE9NV3JhcHBlcjo6c3ZnRWxlbWVudFR5cGUo
U1ZHRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGU+IFdyYXBwZXJUeXBlTWFwOwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoV3JhcHBlclR5cGVNYXAsIHdyYXBwZXJUeXBlTWFwLCAoKSk7Ci0gICAgaWYgKHdy
YXBwZXJUeXBlTWFwLmlzRW1wdHkoKSkgewotI2RlZmluZSBBRERfVE9fSEFTSF9NQVAodGFnLCBu
YW1lKSBcCi0gICAgICAgIHdyYXBwZXJUeXBlTWFwLnNldCgjdGFnLCBWOENsYXNzSW5kZXg6OlNW
RyMjbmFtZSMjRUxFTUVOVCk7Ci0gICAgICAgIEZPUl9FQUNIX1RBRyhBRERfVE9fSEFTSF9NQVAp
Ci0jdW5kZWYgQUREX1RPX0hBU0hfTUFQCi0gICAgfQotCi0gICAgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlIHR5cGUgPSB3cmFwcGVyVHlwZU1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCku
aW1wbCgpKTsKLSAgICBpZiAoIXR5cGUpCi0gICAgICAgIHJldHVybiBWOENsYXNzSW5kZXg6OlNW
R0VMRU1FTlQ7Ci0gICAgcmV0dXJuIHR5cGU7Ci19Ci0jdW5kZWYgRk9SX0VBQ0hfVEFHCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50
KQotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChldmVudCk7Ci0gICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6RVZFTlQ7Ci0KLSAgICBpZiAo
ZXZlbnQtPmlzVUlFdmVudCgpKSB7Ci0gICAgICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50
KCkpCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpLRVlCT0FSREVWRU5UOwotICAg
ICAgICBlbHNlIGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBW
OENsYXNzSW5kZXg6OlRFWFRFVkVOVDsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzTW91c2VF
dmVudCgpKQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6TU9VU0VFVkVOVDsKLSAg
ICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVudCgpKQotICAgICAgICAgICAgdHlwZSA9
IFY4Q2xhc3NJbmRleDo6V0hFRUxFVkVOVDsKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBlbHNl
IGlmIChldmVudC0+aXNTVkdab29tRXZlbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6OlNWR1pPT01FVkVOVDsKLSNlbmRpZgotICAgICAgICBlbHNlIGlmIChldmVudC0+aXND
b21wb3NpdGlvbkV2ZW50KCkpCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDT01Q
T1NJVElPTkVWRU5UOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0lu
ZGV4OjpVSUVWRU5UOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQot
ICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpNVVRBVElPTkVWRU5UOwotICAgIGVsc2UgaWYg
KGV2ZW50LT5pc092ZXJmbG93RXZlbnQoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6
T1ZFUkZMT1dFVkVOVDsKLSAgICBlbHNlIGlmIChldmVudC0+aXNNZXNzYWdlRXZlbnQoKSkKLSAg
ICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6TUVTU0FHRUVWRU5UOwotICAgIGVsc2UgaWYgKGV2
ZW50LT5pc1BhZ2VUcmFuc2l0aW9uRXZlbnQoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRl
eDo6UEFHRVRSQU5TSVRJT05FVkVOVDsKLSAgICBlbHNlIGlmIChldmVudC0+aXNQb3BTdGF0ZUV2
ZW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OlBPUFNUQVRFRVZFTlQ7Ci0gICAg
ZWxzZSBpZiAoZXZlbnQtPmlzUHJvZ3Jlc3NFdmVudCgpKSB7Ci0gICAgICAgIGlmIChldmVudC0+
aXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBWOENs
YXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUUFJPR1JFU1NFVkVOVDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6UFJPR1JFU1NFVkVOVDsKLSAgICB9IGVsc2Ug
aWYgKGV2ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENs
YXNzSW5kZXg6OldFQktJVEFOSU1BVElPTkVWRU5UOwotICAgIGVsc2UgaWYgKGV2ZW50LT5pc1dl
YktpdFRyYW5zaXRpb25FdmVudCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJL
SVRUUkFOU0lUSU9ORVZFTlQ7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgZWxzZSBpZiAoZXZl
bnQtPmlzRXJyb3JFdmVudCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpFUlJPUkVW
RU5UOwotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIGVsc2UgaWYgKGV2ZW50
LT5pc1N0b3JhZ2VFdmVudCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpTVE9SQUdF
RVZFTlQ7Ci0jZW5kaWYKLSAgICBlbHNlIGlmIChldmVudC0+aXNCZWZvcmVMb2FkRXZlbnQoKSkK
LSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6QkVGT1JFTE9BREVWRU5UOwotCi0KLSAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3QodHlwZSwg
VjhDbGFzc0luZGV4OjpFVkVOVCwgZXZlbnQpOwotICAgIGlmIChyZXN1bHQuSXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIEluc3RhbnRpYXRpb24gZmFpbGVkLiBBdm9pZCB1cGRhdGluZyB0aGUgRE9N
IG9iamVjdCBtYXAgYW5kCi0gICAgICAgIC8vIHJldHVybiBudWxsIHdoaWNoIGlzIGFscmVhZHkg
aGFuZGxlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24KLSAgICAgICAgLy8gaW4gY2FzZSB0
aGUgZXZlbnQgaXMgTlVMTC4KLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAgfQotCi0g
ICAgZXZlbnQtPnJlZigpOyAvLyBmYXN0IHJlZgotICAgIHNldEpTV3JhcHBlckZvckRPTU9iamVj
dChldmVudCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhyZXN1bHQpKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgbWFwcGluZ1tdID0gewotICAgIFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRF
WCwgICAgLy8gTk9ORQotICAgIFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCwgICAg
Ly8gRUxFTUVOVF9OT0RFIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50Ci0gICAgVjhDbGFzc0luZGV4
OjpBVFRSLCAgICAgICAgICAgICAgICAgICAvLyBBVFRSSUJVVEVfTk9ERQotICAgIFY4Q2xhc3NJ
bmRleDo6VEVYVCwgICAgICAgICAgICAgICAgICAgLy8gVEVYVF9OT0RFCi0gICAgVjhDbGFzc0lu
ZGV4OjpDREFUQVNFQ1RJT04sICAgICAgICAgICAvLyBDREFUQV9TRUNUSU9OX05PREUKLSAgICBW
OENsYXNzSW5kZXg6OkVOVElUWVJFRkVSRU5DRSwgICAgICAgIC8vIEVOVElUWV9SRUZFUkVOQ0Vf
Tk9ERQotICAgIFY4Q2xhc3NJbmRleDo6RU5USVRZLCAgICAgICAgICAgICAgICAgLy8gRU5USVRZ
X05PREUKLSAgICBWOENsYXNzSW5kZXg6OlBST0NFU1NJTkdJTlNUUlVDVElPTiwgIC8vIFBST0NF
U1NJTkdfSU5TVFJVQ1RJT05fTk9ERQotICAgIFY4Q2xhc3NJbmRleDo6Q09NTUVOVCwgICAgICAg
ICAgICAgICAgLy8gQ09NTUVOVF9OT0RFCi0gICAgVjhDbGFzc0luZGV4OjpJTlZBTElEX0NMQVNT
X0lOREVYLCAgICAvLyBET0NVTUVOVF9OT0RFIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50Ci0gICAg
VjhDbGFzc0luZGV4OjpET0NVTUVOVFRZUEUsICAgICAgICAgICAvLyBET0NVTUVOVF9UWVBFX05P
REUKLSAgICBWOENsYXNzSW5kZXg6OkRPQ1VNRU5URlJBR01FTlQsICAgICAgIC8vIERPQ1VNRU5U
X0ZSQUdNRU5UX05PREUKLSAgICBWOENsYXNzSW5kZXg6Ok5PVEFUSU9OLCAgICAgICAgICAgICAg
IC8vIE5PVEFUSU9OX05PREUKLSAgICBWOENsYXNzSW5kZXg6Ok5PREUsICAgICAgICAgICAgICAg
ICAgIC8vIFhQQVRIX05BTUVTUEFDRV9OT0RFCi19OwotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhET01XcmFwcGVyOjpjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICAvLyBGaW5kIGEgcHJveHkgZm9yIHRoaXMgbm9kZS4KLSAgICAvLwotICAgIC8v
IE5vdGUgdGhhdCBpZiBwcm94eSBpcyBmb3VuZCwgd2UgbWlnaHQgaW5pdGlhbGl6ZSB0aGUgY29u
dGV4dCB3aGljaCBjYW4KLSAgICAvLyBpbnN0YW50aWF0ZSBhIGRvY3VtZW50IHdyYXBwZXIuICBU
aGVyZWZvcmUsIHdlIGdldCB0aGUgcHJveHkgYmVmb3JlCi0gICAgLy8gY2hlY2tpbmcgaWYgdGhl
IG5vZGUgYWxyZWFkeSBoYXMgYSB3cmFwcGVyLgotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmIChwcm94eSkKLSAgICAgICAg
cHJveHktPndpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKLQotICAgIERPTU5v
ZGVNYXBwaW5nJiBkb21Ob2RlTWFwID0gZ2V0RE9NTm9kZU1hcCgpOwotICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAuZ2V0KGRvY3VtZW50KTsKLSAgICBpZiAo
d3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmpl
Y3QoZG9jdW1lbnQsIHByb3h5LCBkb21Ob2RlTWFwKTsKLQotICAgIHJldHVybiB3cmFwcGVyOwot
fQotCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6Z2V0V3JhcHBlcihOb2Rl
KiBub2RlKQogewogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKQEAgLTk5OCwxMDEg
KzM2NCw2IEBACiAgICAgcmV0dXJuIGRvbU5vZGVNYXAuZ2V0KG5vZGUpOwogfQogCi12ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSog
bm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAg
IAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gZ2V0V3JhcHBlcihub2RlKTsK
LSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKG5vZGUg
PT0gZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBjb252ZXJ0RG9jdW1lbnRUb1Y4T2JqZWN0KGRv
Y3VtZW50KTsKLQotICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwgMCwg
Z2V0RE9NTm9kZU1hcCgpKTsKLX0KLSAgICAKLS8vIENhbGxlciBjaGVja3Mgbm9kZSBpcyBub3Qg
bnVsbC4KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnROZXdOb2Rl
VG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9NTm9kZU1hcHBpbmcmIGRv
bU5vZGVNYXApCi17Ci0gICAgaWYgKCFwcm94eSAmJiBub2RlLT5kb2N1bWVudCgpKQotICAgICAg
ICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpOwot
Ci0gICAgYm9vbCBpc0RvY3VtZW50ID0gZmFsc2U7IC8vIGRvY3VtZW50IHR5cGUgbm9kZSBoYXMg
c3BlY2lhbCBoYW5kbGluZwotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlOwot
Ci0gICAgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOwotICAgIGlm
IChub2RlVHlwZSA9PSBOb2RlOjpFTEVNRU5UX05PREUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBodG1sRWxlbWVudFR5cGUoc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKSk7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgZWxz
ZSBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgICAgICB0eXBlID0gc3ZnRWxlbWVu
dFR5cGUoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpKTsKLSNlbmRpZgotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpFTEVNRU5UOwotICAgIH0gZWxz
ZSBpZiAobm9kZVR5cGUgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewotICAgICAgICBpc0RvY3Vt
ZW50ID0gdHJ1ZTsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQot
ICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6SFRNTERPQ1VNRU5UOwotI2lmIEVOQUJM
RShTVkcpCi0gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCi0gICAg
ICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpTVkdET0NVTUVOVDsKLSNlbmRpZgotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpET0NVTUVOVDsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQobm9kZVR5cGUgPCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihtYXBwaW5nKS9zaXplb2YobWFwcGluZ1swXSkpKTsKLSAgICAgICAgdHlwZSA9IG1hcHBpbmdb
bm9kZVR5cGVdOwotICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OklOVkFMSURf
Q0xBU1NfSU5ERVgpOwotICAgIH0KLQotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQ7Ci0gICAgaWYgKHByb3h5KQotICAgICAgICBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsK
LQotICAgIC8vIEVudGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFwcGVy
IGluIHRoYXQgY29udGV4dC4KLSAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICBj
b250ZXh0LT5FbnRlcigpOwotCi0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGlu
c3RhbnRpYXRlVjhPYmplY3QocHJveHksIHR5cGUsIFY4Q2xhc3NJbmRleDo6Tk9ERSwgbm9kZSk7
Ci0KLSAgICAvLyBFeGl0IHRoZSBub2RlJ3MgY29udGV4dCBpZiBpdCB3YXMgZW50ZXJlZC4KLSAg
ICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICBjb250ZXh0LT5FeGl0KCk7Ci0KLSAg
ICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBJZiBpbnN0YW50aWF0aW9uIGZh
aWxlZCBpdCdzIGltcG9ydGFudCBub3QgdG8gYWRkIHRoZSByZXN1bHQKLSAgICAgICAgLy8gdG8g
dGhlIERPTSBub2RlIG1hcC4gSW5zdGVhZCB3ZSByZXR1cm4gYW4gZW1wdHkgaGFuZGxlLCB3aGlj
aAotICAgICAgICAvLyBzaG91bGQgYWxyZWFkeSBiZSBoYW5kbGVkIGJ5IGNhbGxlcnMgb2YgdGhp
cyBmdW5jdGlvbiBpbiBjYXNlCi0gICAgICAgIC8vIHRoZSBub2RlIGlzIE5VTEwuCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgbm9kZS0+cmVmKCk7Ci0gICAgZG9tTm9kZU1h
cC5zZXQobm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhyZXN1bHQpKTsKLQot
ICAgIGlmIChpc0RvY3VtZW50KSB7Ci0gICAgICAgIGlmIChwcm94eSkKLSAgICAgICAgICAgIHBy
b3h5LT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIocmVzdWx0KTsKLQotICAg
ICAgICBpZiAodHlwZSA9PSBWOENsYXNzSW5kZXg6OkhUTUxET0NVTUVOVCkgewotICAgICAgICAg
ICAgLy8gQ3JlYXRlIG1hcmtlciBvYmplY3QgYW5kIGluc2VydCBpdCBpbiB0d28gaW50ZXJuYWwg
ZmllbGRzLgotICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0ZW1wb3Jh
cnkgc2hhZG93aW5nIG9mCi0gICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwuCi0gICAgICAgICAg
ICBBU1NFUlQocmVzdWx0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA9PSBWOEhUTUxEb2N1bWVudDo6
aW50ZXJuYWxGaWVsZENvdW50KTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBt
YXJrZXIgPSB2ODo6T2JqZWN0OjpOZXcoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+U2V0SW50ZXJu
YWxGaWVsZChWOEhUTUxEb2N1bWVudDo6bWFya2VySW5kZXgsIG1hcmtlcik7Ci0gICAgICAgICAg
ICByZXN1bHQtPlNldEludGVybmFsRmllbGQoVjhIVE1MRG9jdW1lbnQ6OnNoYWRvd0luZGV4LCBt
YXJrZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLy8g
QSBKUyBvYmplY3Qgb2YgdHlwZSBFdmVudFRhcmdldCBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVt
YmVyIG9mIHBvc3NpYmxlIGNsYXNzZXMuCiAvLyBDaGVjayBFdmVudFRhcmdldC5oIGZvciBuZXcg
dHlwZSBjb252ZXJzaW9uIG1ldGhvZHMKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqIHRhcmdldCkKQEAg
LTExNjUsMTYgKzQzNiw2IEBACiAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExp
c3RlbmVyVG9WOE9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudExp
c3RlbmVyKiBsaXN0ZW5lcikKLXsKLSAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICByZXR1cm4g
djg6Ok51bGwoKTsKLQotICAgIC8vIEZJWE1FOiBjYW4gYSB1c2VyIHRha2UgYSBsYXp5IGV2ZW50
IGxpc3RlbmVyIGFuZCBzZXQgdG8gb3RoZXIgcGxhY2VzPwotICAgIFY4QWJzdHJhY3RFdmVudExp
c3RlbmVyKiB2OGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIq
PihsaXN0ZW5lcik7Ci0gICAgcmV0dXJuIHY4bGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KGNv
bnRleHQpOwotfQotCiBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFY4RE9NV3JhcHBlcjo6Z2V0
RXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9v
bCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29rdXBUeXBlIGxvb2t1cCkKIHsKICAgICByZXR1cm4g
KGxvb2t1cCA9PSBMaXN0ZW5lckZpbmRPbmx5KSA/IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRX
cmFwcGVyKHZhbHVlLCBpc0F0dHJpYnV0ZSkgOiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kT3JD
cmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4odmFsdWUsIGlzQXR0cmlidXRlKTsKQEAgLTEy
NjAsMTkzICs1MjEsNCBAQAogICAgIHJldHVybiAobG9va3VwID09IExpc3RlbmVyRmluZE9ubHkp
ID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6
IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVy
Pih2YWx1ZSwgaXNBdHRyaWJ1dGUpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01X
cmFwcGVyOjpjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxlbWVudGF0
aW9uKiBpbXBsKQotewotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5zdGFu
dGlhdGVWOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTUlNUExFTUVOVEFUSU9OLCBWOENsYXNzSW5k
ZXg6OkRPTUlNUExFTUVOVEFUSU9OLCBpbXBsKTsKLSAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkg
ewotICAgICAgICAvLyBJZiB0aGUgaW5zdGFudGlhdGlvbiBmYWlsZWQsIHdlIGlnbm9yZSBpdCBh
bmQgcmV0dXJuIG51bGwgaW5zdGVhZAotICAgICAgICAvLyBvZiByZXR1cm5pbmcgYW4gZW1wdHkg
aGFuZGxlLgotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFN0
eWxlU2hlZXRUb1Y4T2JqZWN0KFN0eWxlU2hlZXQqIHNoZWV0KQotewotICAgIGlmICghc2hlZXQp
Ci0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHNoZWV0KTsKLSAgICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLQotICAgIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVUOwotICAgIGlm
IChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6
OkNTU1NUWUxFU0hFRVQ7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGlu
c3RhbnRpYXRlVjhPYmplY3QodHlwZSwgVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVULCBzaGVldCk7
Ci0gICAgaWYgKCFyZXN1bHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRo
ZSBET00gb2JqZWN0IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5vbi1lbXB0eS4KLSAgICAgICAgc2hl
ZXQtPnJlZigpOwotICAgICAgICBzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qoc2hlZXQsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgLy8gQWRk
IGEgaGlkZGVuIHJlZmVyZW5jZSBmcm9tIHN0eWxlc2hlZXQgb2JqZWN0IHRvIGl0cyBvd25lciBu
b2RlLgotICAgIE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5vd25lck5vZGUoKTsKLSAgICBpZiAo
b3duZXJOb2RlKSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb3duZXIgPSB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnZlcnROb2RlVG9WOE9iamVjdChvd25lck5vZGUp
KTsKLSAgICAgICAgcmVzdWx0LT5TZXRJbnRlcm5hbEZpZWxkKFY4U3R5bGVTaGVldDo6b3duZXJO
b2RlSW5kZXgsIG93bmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0
KENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9i
amVjdE1hcCgpLmdldCh2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlw
ZTsKLQotICAgIGlmICh2YWx1ZS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQotICAgICAg
ICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJLSVRDU1NUUkFOU0ZPUk1WQUxVRTsKLSAgICBlbHNl
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6
Q1NTVkFMVUVMSVNUOwotICAgIGVsc2UgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0g
ICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU1BSSU1JVElWRVZBTFVFOwotI2lmIEVOQUJM
RShTVkcpCi0gICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkKLSAgICAgICAgdHlwZSA9
IFY4Q2xhc3NJbmRleDo6U1ZHUEFJTlQ7Ci0gICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHQ29sb3Io
KSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6U1ZHQ09MT1I7Ci0jZW5kaWYKLSAgICBl
bHNlCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU1ZBTFVFOwotCi0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIFY4Q2xh
c3NJbmRleDo6Q1NTVkFMVUUsIHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdC5Jc0VtcHR5KCkpIHsK
LSAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIERPTSBvYmplY3QgbWFwIGlmIHRoZSByZXN1bHQg
aXMgbm9uLWVtcHR5LgotICAgICAgICB2YWx1ZS0+cmVmKCk7Ci0gICAgICAgIHNldEpTV3JhcHBl
ckZvckRPTU9iamVjdCh2YWx1ZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhyZXN1
bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Q1NTUnVsZVRvVjhPYmplY3QoQ1NTUnVsZSogcnVs
ZSkKLXsKLSAgICBpZiAoIXJ1bGUpIAotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLQotICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChy
dWxlKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBl
cjsKLQotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlOwotCi0gICAgc3dpdGNo
IChydWxlLT50eXBlKCkpIHsKLSAgICBjYXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6Ci0gICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU1NUWUxFUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NSdWxlOjpDSEFSU0VUX1JVTEU6Ci0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6
OkNTU0NIQVJTRVRSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6OklNUE9S
VF9SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDU1NJTVBPUlRSVUxFOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6Ok1FRElBX1JVTEU6Ci0gICAgICAgIHR5cGUg
PSBWOENsYXNzSW5kZXg6OkNTU01FRElBUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NSdWxlOjpGT05UX0ZBQ0VfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NT
Rk9OVEZBQ0VSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6OlBBR0VfUlVM
RToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTUEFHRVJVTEU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUnVsZTo6VkFSSUFCTEVTX1JVTEU6Ci0gICAgICAgIHR5cGUgPSBW
OENsYXNzSW5kZXg6OkNTU1ZBUklBQkxFU1JVTEU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5k
ZXg6OldFQktJVENTU0tFWUZSQU1FUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NS
dWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JVTEU6Ci0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6
OldFQktJVENTU0tFWUZSQU1FU1JVTEU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAv
LyBDU1NSdWxlOjpVTktOT1dOX1JVTEUKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NT
UlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIFY4Q2xhc3NJbmRleDo6Q1NTUlVM
RSwgcnVsZSk7Ci0gICAgaWYgKCFyZXN1bHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkg
dXBkYXRlIHRoZSBET00gb2JqZWN0IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5vbi1lbXB0eS4KLSAg
ICAgICAgcnVsZS0+cmVmKCk7Ci0gICAgICAgIHNldEpTV3JhcHBlckZvckRPTU9iamVjdChydWxl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpj
b252ZXJ0V2luZG93VG9WOE9iamVjdChET01XaW5kb3cqIHdpbmRvdykKLXsKLSAgICBpZiAoIXdp
bmRvdykKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAgLy8gSW5pdGlhbGl6ZXMgZW52
aXJvbm1lbnQgb2YgYSBmcmFtZSwgYW5kIHJldHVybiB0aGUgZ2xvYmFsIG9iamVjdAotICAgIC8v
IG9mIHRoZSBmcmFtZS4KLSAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKLQot
ICAgIC8vIFNwZWNpYWwgY2FzZTogQmVjYXVzZSBvZiBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCgp
IG9uZSBET01XaW5kb3cgY2FuIGhhdmUKLSAgICAvLyBtdWx0aXBsZSBjb250ZXh0cyBhbmQgbXVs
dGlwbGUgZ2xvYmFsIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGl0LiBXaGVuCi0gICAgLy8gY29k
ZSBydW5uaW5nIGluIG9uZSBvZiB0aG9zZSBjb250ZXh0cyBhY2Nlc3NlcyB0aGUgd2luZG93IG9i
amVjdCwgd2UKLSAgICAvLyB3YW50IHRvIHJldHVybiB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lh
dGVkIHdpdGggdGhhdCBjb250ZXh0LCBub3QKLSAgICAvLyBuZWNlc3NhcmlseSB0aGUgZmlyc3Qg
Z2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhhdCBET01XaW5kb3cuCi0gICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3VycmVudENvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVu
dCgpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3VycmVudEdsb2JhbCA9IGN1cnJlbnRD
b250ZXh0LT5HbG9iYWwoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvd1dyYXBw
ZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5E
T1csIGN1cnJlbnRHbG9iYWwpOwotICAgIGlmICghd2luZG93V3JhcHBlci5Jc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKFY4RE9NV2luZG93Ojp0b05hdGl2ZSh3aW5kb3dXcmFwcGVyKSA9PSB3aW5k
b3cpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudEdsb2JhbDsKLSAgICB9Ci0KLSAgICAvLyBP
dGhlcndpc2UsIHJldHVybiB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBm
cmFtZS4KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6Y29u
dGV4dChmcmFtZSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBn
bG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKLSAgICBBU1NFUlQoIWdsb2JhbC5Jc0VtcHR5KCkp
OwotICAgIHJldHVybiBnbG9iYWw7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdy
YXBwZXI6OmNvbnZlcnROYW1lZE5vZGVNYXBUb1Y4T2JqZWN0KE5hbWVkTm9kZU1hcCogbWFwKQot
ewotICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLQotICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChtYXApOwot
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0g
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6TkFNRUROT0RFTUFQLCBWOENsYXNzSW5kZXg6Ok5BTUVETk9ERU1BUCwgbWFw
KTsKLSAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBET00gb2JqZWN0IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5v
bi1lbXB0eS4KLSAgICBtYXAtPnJlZigpOwotICAgIHNldEpTV3JhcHBlckZvckRPTU9iamVjdCht
YXAsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Ci0KLSAgICAvLyBB
ZGQgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20gbmFtZWQgbm9kZSBtYXAgdG8gaXRzIG93bmVyIG5v
ZGUuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBtYXAtPmVsZW1lbnQoKSkgewotICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG93bmVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZWxlbWVudCkpOwotICAgICAgICByZXN1bHQtPlNl
dEludGVybmFsRmllbGQoVjhOYW1lZE5vZGVNYXA6Om93bmVyTm9kZUluZGV4LCBvd25lcik7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAJKHJldmlzaW9uIDU0MjUxKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw5ICszNiwxMCBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZEhvc3QuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEluamVj
dGVkU2NyaXB0SG9zdC5oIgorI2luY2x1ZGUgIlY4SW5zcGVjdG9yQmFja2VuZC5oIgorI2luY2x1
ZGUgIlY4SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAj
aW5jbHVkZSA8djguaD4KQEAgLTE0NCwyMSArMTQ1LDIxIEBACiBib29sIFNjcmlwdEdsb2JhbE9i
amVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5z
cGVjdG9yQmFja2VuZCogdmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0U3Rh
dGUpOwotICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUpLCBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VO
RCwgdmFsdWUpKTsKKyAgICBzY29wZS5nbG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1l
KSwgdG9WOCh2YWx1ZSkpOwogICAgIHJldHVybiBzY29wZS5zdWNjZXNzKCk7CiB9CiAKIGJvb2wg
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBj
aGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9udGVuZEhvc3QqIHZhbHVlKQogewogICAgIFNjcmlwdFNj
b3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKLSAgICBzY29wZS5nbG9iYWwoKS0+U2V0KHY4OjpTdHJp
bmc6Ok5ldyhuYW1lKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OklOU1BFQ1RPUkZST05URU5ESE9TVCwgdmFsdWUpKTsKKyAgICBzY29wZS5nbG9iYWwoKS0+
U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSwgdG9WOCh2YWx1ZSkpOwogICAgIHJldHVybiBzY29w
ZS5zdWNjZXNzKCk7CiB9CiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbmplY3RlZFNjcmlwdEhvc3QqIHZh
bHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKLSAgICBzY29wZS5n
bG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OklOSkVDVEVEU0NSSVBUSE9TVCwgdmFsdWUpKTsKKyAg
ICBzY29wZS5nbG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSwgdG9WOCh2YWx1ZSkp
OwogICAgIHJldHVybiBzY29wZS5zdWNjZXNzKCk7CiB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTcgQEAKICNpbmNsdWRlICJW
OEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlY4
Q29uc29sZU1lc3NhZ2UuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOERPTUNvcmVFeGNlcHRpb24uaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUg
IlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCisjaW5jbHVkZSAiVjhSYW5nZUV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIlY4U1ZHRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbi5oIgorI2luY2x1ZGUgIlY4WFBhdGhFeGNlcHRpb24uaCIKICNpbmNsdWRlICJXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTYwNywy
NSArNjEyLDI1IEBACiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4Y2VwdGlvbjsKICAgICBz
d2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKICAgICBjYXNlIERPTUV4Y2VwdGlvblR5cGU6Ci0g
ICAgICAgIGV4Y2VwdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpET01DT1JFRVhDRVBUSU9OLCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3Jp
cHRpb24pKTsKKyAgICAgICAgZXhjZXB0aW9uID0gdG9WOChET01Db3JlRXhjZXB0aW9uOjpjcmVh
dGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSYW5nZUV4Y2VwdGlv
blR5cGU6Ci0gICAgICAgIGV4Y2VwdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpSQU5HRUVYQ0VQVElPTiwgUmFuZ2VFeGNlcHRpb246OmNyZWF0ZShk
ZXNjcmlwdGlvbikpOworICAgICAgICBleGNlcHRpb24gPSB0b1Y4KFJhbmdlRXhjZXB0aW9uOjpj
cmVhdGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdmVudEV4Y2Vw
dGlvblR5cGU6Ci0gICAgICAgIGV4Y2VwdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpFVkVOVEVYQ0VQVElPTiwgRXZlbnRFeGNlcHRpb246OmNyZWF0
ZShkZXNjcmlwdGlvbikpOworICAgICAgICBleGNlcHRpb24gPSB0b1Y4KEV2ZW50RXhjZXB0aW9u
OjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBYTUxIdHRw
UmVxdWVzdEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGV4Y2VwdGlvbiA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVEVYQ0VQVElPTiwg
WE1MSHR0cFJlcXVlc3RFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBl
eGNlcHRpb24gPSB0b1Y4KFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRp
b24pKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFNWRykKICAgICBjYXNlIFNWR0V4Y2Vw
dGlvblR5cGU6Ci0gICAgICAgIGV4Y2VwdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpTVkdFWENFUFRJT04sIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRl
c2NyaXB0aW9uKSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHRvVjgoU1ZHRXhjZXB0aW9uOjpjcmVh
dGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoWFBB
VEgpCiAgICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGV4Y2VwdGlvbiA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpYUEFUSEVYQ0VQVElP
TiwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBleGNlcHRp
b24gPSB0b1Y4KFhQYXRoRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJ
KHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIgLy8gZm9yIFdl
YkNvcmU6OlN0cmluZwotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRl
ICJWOEV2ZW50LmgiCkBAIC0xMjMsNDUgKzEyMiw4IEBACiAgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0LklzRW1wdHkoKSA/IG9iamVjdCA6IG9iamVjdC0+RmluZEluc3RhbmNlSW5Qcm90b3R5cGVD
aGFpbihnZXRUZW1wbGF0ZSh0eXBlKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFQ+
IGltcCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KHR5
cGUsIGltcC5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwg
dm9pZCopOwotCi0gICAgICAgIC8vIEZhc3QtcGF0aCBmb3IgTm9kZSBvYmplY3RzLgotICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROb2RlVG9WOE9iamVjdChQYXNz
UmVmUHRyPE5vZGU+IG5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
Tm9kZVRvVjhPYmplY3Qobm9kZS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKik7Ci0KLSAg
ICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RG9jdW1lbnRUb1Y4T2Jq
ZWN0KERvY3VtZW50Kik7Ci0KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUuZ2V0KCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChub2RlLCAwLCBnZXRET01Ob2RlTWFwKCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSosIFY4UHJveHkqLCBET01Ob2RlTWFwcGluZyYpOwot
CiAgICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZG9tV3JhcHBlclR5
cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydEV2ZW50VG9WOE9iamVjdChl
dmVudC5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNvbnZlcnRFdmVudFRvVjhPYmplY3QoRXZlbnQqKTsKLQogICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoUGFzc1Jl
ZlB0cjxFdmVudFRhcmdldD4gZXZlbnRUYXJnZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KGV2ZW50VGFyZ2V0LmdldCgpKTsKQEAg
LTE2OSwxNCArMTMxLDYgQEAKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqKTsKIAotICAgICAgICAv
LyBXcmFwIGFuZCB1bndyYXAgSlMgZXZlbnQgbGlzdGVuZXJzLgotICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RXZlbnRMaXN0
ZW5lclRvVjhPYmplY3QoY29udGV4dCwgZXZlbnRMaXN0ZW5lci5nZXQoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudExpc3Rl
bmVyVG9WOE9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnRMaXN0ZW5lciopOwot
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVu
ZXIoTm9kZSogbm9kZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1
dGUsIExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoU1ZHRWxlbWVudEluc3RhbmNlKiBl
bGVtZW50LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlz
dGVuZXJMb29rdXBUeXBlIGxvb2t1cCk7CkBAIC0yMTEsMTAgKzE2NSw2IEBACiAgICAgICAgICAg
ICByZXR1cm4gcmVzb2x2ZXI7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAvLyBET01JbXBs
ZW1lbnRhdGlvbiBpcyBhIHNpbmdsZXRvbiBhbmQgaXQgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwK
LSAgICAgICAgLy8gd2F5LiBBIHdyYXBwZXIgaXMgZ2VuZXJhdGVkIHBlciBkb2N1bWVudCBhbmQg
c3RvcmVkIGluIGFuCi0gICAgICAgIC8vIGludGVybmFsIGZpZWxkIG9mIHRoZSBkb2N1bWVudC4K
LSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RE9NSW1wbGVtZW50
YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxlbWVudGF0aW9uKik7CiAKICAgICAgICAgLy8gV3JhcCBK
UyBub2RlIGZpbHRlciBpbiBDKysuCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVGaWx0
ZXI+IHdyYXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CkBAIC0yMzMs
NTcgKzE4MywxOCBAQAogICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSB3
cmFwcGVyIG9mIHR5cGUgfGNsYXNzVHlwZXwuCiAgICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBl
ck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSk7CiAKLSAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlzIGEgRE9NIEV2ZW50
IHdyYXBwZXIuCi0gICAgICAgIHN0YXRpYyBib29sIGlzRE9NRXZlbnRXcmFwcGVyKHY4OjpIYW5k
bGU8djg6OlZhbHVlPik7Ci0KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0U3R5bGVTaGVldFRvVjhPYmplY3QoU3R5bGVTaGVldCopOwotICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRDU1NWYWx1ZVRvVjhPYmplY3QoQ1NTVmFsdWUq
KTsKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Q1NTUnVsZVRv
VjhPYmplY3QoQ1NTUnVsZSopOwotICAgICAgICAvLyBSZXR1cm5zIHRoZSBKUyB3cmFwcGVyIG9m
IGEgd2luZG93IG9iamVjdCwgaW5pdGlhbGl6ZXMgdGhlIGVudmlyb25tZW50Ci0gICAgICAgIC8v
IG9mIHRoZSB3aW5kb3cgZnJhbWUgaWYgbmVlZGVkLgotICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNvbnZlcnRXaW5kb3dUb1Y4T2JqZWN0KERPTVdpbmRvdyopOwotICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROYW1lZE5vZGVNYXBUb1Y4T2Jq
ZWN0KE5hbWVkTm9kZU1hcCopOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9iamVjdChT
VkdFbGVtZW50SW5zdGFuY2UqKTsKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjb252ZXJ0U1ZHT2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSwgdm9pZCopOwotI2VuZGlmCi0KICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogICAg
ICAgICBzdGF0aWMgdm9pZCBzZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpOwogI2VuZGlmCi0KLSAgICAgICAg
c3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBodG1sRWxlbWVudFR5cGUoSFRNTEVs
ZW1lbnQqKTsKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsKLSNlbmRpZgogICAgICAg
ICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJh
bWUuCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSos
IGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAotICAg
ICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhQ
cm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBs
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVWOE9iamVjdChwcm94
eSwgdHlwZSwgdHlwZSwgaW1wbCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkqIHByb3h5LCBWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCk7CiAKICAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0V3JhcHBlcihOb2RlKik7Ci0KLSAgICBwcml2YXRl
OgotCi0gICAgICAgIC8vIFRoZSBmaXJzdCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcyB0aGUgZnVu
Y3Rpb24gZGVzY3JpcHRvcgotICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBKUyBvYmplY3QuIFRo
ZSBzZWNvbmQgVjhXcmFwcGVyVHlwZSBzcGVjaWZpZXMKLSAgICAgICAgLy8gdGhlIGFjdHVhbCB0
eXBlIG9mIHRoZSB2b2lkKiBmb3IgdHlwZSBjYXN0aW5nLgotICAgICAgICAvLyBGb3IgZXhhbXBs
ZSwgYSBIVE1MIGVsZW1lbnQgaGFzIEhUTUxFTEVNRU5UIGZvciB0aGUgZmlyc3QgVjhXcmFwcGVy
VHlwZSwgYnV0IGFsd2F5cwotICAgICAgICAvLyB1c2UgTk9ERSBhcyB0aGUgc2Vjb25kIFY4V3Jh
cHBlclR5cGUuIEpTIHdyYXBwZXIgc3RvcmVzIHRoZSBzZWNvbmQKLSAgICAgICAgLy8gVjhXcmFw
cGVyVHlwZSBhbmQgdGhlIHZvaWQqIGFzIGludGVybmFsIGZpZWxkcy4KLSAgICAgICAgc3RhdGlj
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSBkZXNjVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJU
eXBlLCB2b2lkKiBpbXBsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaW5zdGFudGlh
dGVWOE9iamVjdChOVUxMLCBkZXNjVHlwZSwgY3B0clR5cGUsIGltcGwpOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0
KFY4UHJveHkqLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSwgdm9pZCopOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw5
IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiVjhFdmVudC5oIgorI2luY2x1ZGUgIlY4SFRNTEVtYmVkRWxlbWVudC5oIgogI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOUE9iamVjdC5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKQEAgLTE2OSw3ICsxNzEsOSBAQAogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBnbG9iYWwgPSB2OENvbnRleHQtPkdsb2JhbCgpOwogICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0V2ZW50ID0gZ2xvYmFsLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJldmVudCIp
KTsKLSAgICBFdmVudCogZXZlbnQgPSBWOERPTVdyYXBwZXI6OmlzRE9NRXZlbnRXcmFwcGVyKGpz
RXZlbnQpID8gVjhFdmVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChq
c0V2ZW50KSkgOiAwOworICAgIGlmIChqc0V2ZW50LklzRW1wdHkoKSB8fCAhanNFdmVudC0+SXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEV2ZW50KiBldmVudCA9IFY4RXZl
bnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoanNFdmVudCkpOwogCiAg
ICAgLy8gQmFzZWQgb24gY29kZSBmcm9tIGtqc19iaW5kaW5ncy5jcHAuCiAgICAgLy8gTm90ZTog
VGhpcyBpcyBtb3JlIGxpYmVyYWwgdGhhbiBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24uCkBAIC0z
NzcsNyArMzgxLDcgQEAKIAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQp
OwogICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRvdygpOwotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBnbG9iYWwgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBnbG9iYWwgPSB0b1Y4KHdpbmRvdyk7CiAgICAgQVNTRVJUKGdsb2JhbC0+SXNPYmplY3Qo
KSk7CiAgICAgcmV0dXJuIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoMCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdChnbG9iYWwpLCB3aW5kb3cpOwogfQpAQCAtNDE0LDcgKzQxOCw3IEBACiAg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICBET01XaW5kb3cq
IHdpbmRvdyA9IG1fZnJhbWUtPmRvbVdpbmRvdygpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2OHBsdWdpbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpIVE1MRU1CRURFTEVNRU5ULCBwbHVnaW4pOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OHBsdWdpbiA9IHRvVjgoc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KHBsdWdpbikpOwog
ICAgIGlmICghdjhwbHVnaW4tPklzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVOb1Nj
cmlwdE9iamVjdCgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRv
d1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQAogI2luY2x1ZGUgIlY4
QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhD
b25zb2xlTWVzc2FnZS5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUg
IlY4RE9NTWFwLmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJWOEhp
c3RvcnkuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCkBAIC00MjIsNyArNDIyLDcgQEAKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkb2N1bWVudFdy
YXBwZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChtX2ZyYW1lLT5kb2N1
bWVudCgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gdG9W
OChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKIAogICAgIC8vIElmIGluc3RhbnRpYXRpb24gb2YgdGhl
IGRvY3VtZW50IHdyYXBwZXIgZmFpbHMsIGNsZWFyIHRoZSBjYWNoZQogICAgIC8vIGFuZCBsZXQg
dGhlIERPTVdpbmRvdyBhY2Nlc3NvciBoYW5kbGUgYWNjZXNzIHRvIHRoZSBkb2N1bWVudC4KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJl
dmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTm9kZS5o
IgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2lu
Y2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9P
d25BcnJheVB0ci5oPgpAQCAtNjksNyArNzAsNyBAQAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CiAgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGNhbGxiYWNrID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
OjpDYXN0KG1fZmlsdGVyKTsKICAgICBPd25BcnJheVB0cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
PiBhcmdzKG5ldyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT5bMV0pOwotICAgIGFyZ3NbMF0gPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERSwgbm9kZSk7Cisg
ICAgYXJnc1swXSA9IHRvVjgobm9kZSk7CiAKICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6
OnJldHJpZXZlKCk7CiAgICAgQVNTRVJUKHByb3h5KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOENv
bGxlY3Rpb24uaAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29s
bGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNTQgKzM4LDE0OSBAQAogI2luY2x1ZGUg
PHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rp
b25zIHNob3VsZCBiZSBuYW1lZCB1c2luZyB0byogc2luY2UgdGhleSByZXR1cm4gdGhlIGl0ZW0g
KGdldCogaXMgdXNlZCBmb3IgbWV0aG9kIHRoYXQgdGFrZSBhIHJlZiBwYXJhbSkuCi0gICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDY2NC4KKy8vIEZJ
WE1FOiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG5hbWVkIHVzaW5nIHRvKiBzaW5jZSB0aGV5
IHJldHVybiB0aGUgaXRlbSAoZ2V0KiBpcyB1c2VkIGZvciBtZXRob2QgdGhhdCB0YWtlIGEgcmVm
IHBhcmFtKS4KKy8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQ2NjQuCiAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFY4T2JqZWN0KHZv
aWQqIGltcGxlbWVudGF0aW9uLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbXBsZW1lbnRhdGlvblR5
cGUpCi0gICAgewotICAgICAgICBpZiAoIWltcGxlbWVudGF0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6RnJvbUludChpbXBsZW1lbnRhdGlvblR5cGUt
PkludDMyVmFsdWUoKSk7Ci0gICAgICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6Tk9ERSkK
LSAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChz
dGF0aWNfY2FzdDxOb2RlKj4oaW1wbGVtZW50YXRpb24pKTsKLSAgICAgICAgcmV0dXJuIFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wbGVtZW50YXRpb24pOwotICAgIH0K
K3RlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmpl
Y3QoVCogaW1wbGVtZW50YXRpb24pCit7CisgICAgaWYgKCFpbXBsZW1lbnRhdGlvbikKKyAgICAg
ICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB0b1Y4KGltcGxl
bWVudGF0aW9uKTsKK30KIAotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyBD
b2xsZWN0aW9uKiB0b05hdGl2ZUNvbGxlY3Rpb24odjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVj
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbGxlY3Rpb24qPihv
YmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRl
eCkpOwotICAgIH0KK3RlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyBDb2xsZWN0aW9u
KiB0b05hdGl2ZUNvbGxlY3Rpb24odjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb2xsZWN0aW9uKj4ob2JqZWN0LT5HZXRQb2ludGVy
RnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KIAotICAgIHRl
bXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3Qo
UGFzc1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVt
ZW50YXRpb25UeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFY4T2JqZWN0KGltcGxlbWVu
dGF0aW9uLmdldCgpLCBpbXBsZW1lbnRhdGlvblR5cGUpOwotICAgIH0KK3RlbXBsYXRlPGNsYXNz
IFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3QoUGFzc1JlZlB0cjxU
PiBpbXBsZW1lbnRhdGlvbikKK3sKKyAgICByZXR1cm4gZ2V0VjhPYmplY3QoaW1wbGVtZW50YXRp
b24uZ2V0KCkpOworfQogCi0gICAgLy8gUmV0dXJucyBuYW1lZCBwcm9wZXJ0eSBvZiBhIGNvbGxl
Y3Rpb24uCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IGltcGxlbWVudGF0aW9uVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBhc3NlcnQgb2JqZWN0IGlzIGEgY29sbGVjdGlvbiB0eXBlCi0gICAgICAgIEFTU0VSVChWOERP
TVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKLSAgICAgICAgQVNTRVJUKFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUob2JqZWN0KSAhPSBWOENsYXNzSW5kZXg6Ok5PREUpOwot
ICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxl
Y3Rpb24+KG9iamVjdCk7Ci0gICAgICAgIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWUgPSB0b0F0
b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKG5hbWUpOwotICAgICAgICByZXR1cm4gZ2V0
VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpLCBp
bXBsZW1lbnRhdGlvblR5cGUpOwotICAgIH0KKy8vIFJldHVybnMgbmFtZWQgcHJvcGVydHkgb2Yg
YSBjb2xsZWN0aW9uLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRQcm9wZXJ0eU9mQ29sbGVjdGlv
bih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVj
dCkKK3sKKyAgICAvLyBGSVhNRTogYXNzZXJ0IG9iamVjdCBpcyBhIGNvbGxlY3Rpb24gdHlwZQor
ICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKyAgICBB
U1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShvYmplY3QpICE9IFY4Q2xhc3NJbmRl
eDo6Tk9ERSk7CisgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlv
bjxDb2xsZWN0aW9uPihvYmplY3QpOworICAgIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWUgPSB0
b0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKG5hbWUpOworICAgIHJldHVybiBnZXRW
OE9iamVjdDxJdGVtVHlwZT4oY29sbGVjdGlvbi0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwor
fQogCi0gICAgLy8gQSB0ZW1wbGF0ZSBvZiBuYW1lZCBwcm9wZXJ0eSBhY2Nlc3NvciBvZiBjb2xs
ZWN0aW9ucy4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4g
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb2xsZWN0aW9uTmFtZWRQcm9wZXJ0eUdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKLSAgICB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9s
ZGVyKCktPkdldFJlYWxOYW1lZFByb3BlcnR5SW5Qcm90b3R5cGVDaGFpbihuYW1lKTsKKy8vIEEg
dGVtcGxhdGUgb2YgbmFtZWQgcHJvcGVydHkgYWNjZXNzb3Igb2YgY29sbGVjdGlvbnMuCit0ZW1w
bGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb2xsZWN0aW9uTmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBpbmZvLkhvbGRlcigpLT5HZXRSZWFsTmFtZWRQcm9wZXJ0
eUluUHJvdG90eXBlQ2hhaW4obmFtZSk7CiAKLSAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZTsKIAotICAgICAgICAvLyBTZWFyY2ggbG9jYWwgY2FsbGJhY2sg
cHJvcGVydGllcyBuZXh0IHRvIGZpbmQgSURMIGRlZmluZWQKLSAgICAgICAgLy8gcHJvcGVydGll
cy4KLSAgICAgICAgaWYgKGluZm8uSG9sZGVyKCktPkhhc1JlYWxOYW1lZENhbGxiYWNrUHJvcGVy
dHkobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
LSAgICAgICAgcmV0dXJuIGdldE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwg
SXRlbVR5cGU+KG5hbWUsIGluZm8uSG9sZGVyKCksIGluZm8uRGF0YSgpKTsKLSAgICB9CisgICAg
Ly8gU2VhcmNoIGxvY2FsIGNhbGxiYWNrIHByb3BlcnRpZXMgbmV4dCB0byBmaW5kIElETCBkZWZp
bmVkCisgICAgLy8gcHJvcGVydGllcy4KKyAgICBpZiAoaW5mby5Ib2xkZXIoKS0+SGFzUmVhbE5h
bWVkQ2FsbGJhY2tQcm9wZXJ0eShuYW1lKSkKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUlu
dGVyY2VwdG9yKCk7CisgICAgcmV0dXJuIGdldE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29s
bGVjdGlvbiwgSXRlbVR5cGU+KG5hbWUsIGluZm8uSG9sZGVyKCkpOworfQogCi0gICAgLy8gUmV0
dXJucyB0aGUgcHJvcGVydHkgYXQgdGhlIGluZGV4IG9mIGEgY29sbGVjdGlvbi4KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBnZXRJbmRleGVkUHJvcGVydHlPZkNvbGxlY3Rpb24odWludDMyX3QgaW5kZXgs
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGltcGxlbWVudGF0
aW9uVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBvYmplY3QgbXVz
dCBiZSBhIGNvbGxlY3Rpb24gdHlwZS4KLSAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5
YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21X
cmFwcGVyVHlwZShvYmplY3QpICE9IFY4Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAgIENvbGxl
Y3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4ob2JqZWN0
KTsKLSAgICAgICAgcmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5pdGVt
KGluZGV4KSwgaW1wbGVtZW50YXRpb25UeXBlKTsKLSAgICB9CisvLyBSZXR1cm5zIHRoZSBwcm9w
ZXJ0eSBhdCB0aGUgaW5kZXggb2YgYSBjb2xsZWN0aW9uLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVj
dGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SW5k
ZXhlZFByb3BlcnR5T2ZDb2xsZWN0aW9uKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gb2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBi
ZSBhIGNvbGxlY3Rpb24gdHlwZS4KKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdy
YXBwZXIob2JqZWN0KSk7CisgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUo
b2JqZWN0KSAhPSBWOENsYXNzSW5kZXg6Ok5PREUpOworICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rp
b24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4ob2JqZWN0KTsKKyAgICByZXR1cm4g
Z2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpKTsKK30KIAotICAg
IC8vIEEgdGVtcGxhdGUgb2YgaW5kZXggaW50ZXJjZXB0b3Igb2YgY29sbGVjdGlvbnMuCi0gICAg
dGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBp
bmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBnZXRJbmRleGVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KGlu
ZGV4LCBpbmZvLkhvbGRlcigpLCBpbmZvLkRhdGEoKSk7Ci0gICAgfQorLy8gQSB0ZW1wbGF0ZSBv
ZiBpbmRleCBpbnRlcmNlcHRvciBvZiBjb2xsZWN0aW9ucy4KK3RlbXBsYXRlPGNsYXNzIENvbGxl
Y3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbGxl
Y3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVj
dGlvbjxDb2xsZWN0aW9uLCBJdGVtVHlwZT4oaW5kZXgsIGluZm8uSG9sZGVyKCkpOworfQogCi0g
ICAgLy8gR2V0IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGluZGV4ZWQgcHJvcGVy
dGllcyBvZiBIVE1MU2VsZWN0RWxlbWVudCBhbmQgSFRNTEZvcm1FbGVtZW50LgotICAgIHRlbXBs
YXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbm9kZUNv
bGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi0gICAgewotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBw
ZXIoaW5mby5Ib2xkZXIoKSkpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9O
YXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwotICAgICAgICBpbnQg
bGVuZ3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OkFy
cmF5PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gY2hlY2sgdGhhdCB0aGUgaXRlbSBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLW51bGwg
dmFsdWUgZm9yIHRoaXMgaW5kZXg/Ci0gICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2Vy
PiBpbnRlZ2VyID0gdjg6OkludGVnZXI6Ok5ldyhpKTsKLSAgICAgICAgICAgIHByb3BlcnRpZXMt
PlNldChpbnRlZ2VyLCBpbnRlZ2VyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcHJvcGVy
dGllczsKKy8vIEdldCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBpbmRleGVkIHBy
b3BlcnRpZXMgb2YgSFRNTFNlbGVjdEVsZW1lbnQgYW5kIEhUTUxGb3JtRWxlbWVudC4KK3RlbXBs
YXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gbm9kZUNv
bGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCit7CisgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8u
SG9sZGVyKCkpKTsKKyAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0
aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOworICAgIGludCBsZW5ndGggPSBjb2xsZWN0
aW9uLT5sZW5ndGgoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4
OjpBcnJheTo6TmV3KGxlbmd0aCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgeworICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZSBpdGVt
IGZ1bmN0aW9uIHJldHVybnMgYSBub24tbnVsbCB2YWx1ZSBmb3IgdGhpcyBpbmRleD8KKyAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gaW50ZWdlciA9IHY4OjpJbnRlZ2VyOjpOZXcoaSk7
CisgICAgICAgIHByb3BlcnRpZXMtPlNldChpbnRlZ2VyLCBpbnRlZ2VyKTsKICAgICB9CisgICAg
cmV0dXJuIHByb3BlcnRpZXM7Cit9CiAKLSAgICAvLyBHZXQgYW4gYXJyYXkgY29udGFpbmluZyB0
aGUgbmFtZXMgb2YgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIGEgY29sbGVjdGlvbi4KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IGNvbGxl
Y3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCi0gICAgewotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIo
aW5mby5Ib2xkZXIoKSkpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRp
dmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwotICAgICAgICBpbnQgbGVu
Z3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OkFycmF5
PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gY2hlY2sgdGhhdCB0aGUgaXRlbSBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLW51bGwgdmFs
dWUgZm9yIHRoaXMgaW5kZXg/Ci0gICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBp
bnRlZ2VyID0gdjg6OkludGVnZXI6Ok5ldyhpKTsKLSAgICAgICAgICAgIHByb3BlcnRpZXMtPlNl
dChpbnRlZ2VyLCBpbnRlZ2VyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcHJvcGVydGll
czsKKy8vIEdldCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBpbmRleGVkIHByb3Bl
cnRpZXMgaW4gYSBjb2xsZWN0aW9uLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGlj
IHY4OjpIYW5kbGU8djg6OkFycmF5PiBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRv
cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEFTU0VSVChWOERPTVdyYXBw
ZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7CisgICAgQ29sbGVjdGlvbiogY29s
bGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsK
KyAgICBpbnQgbGVuZ3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gY2hlY2sgdGhhdCB0aGUgaXRlbSBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLW51bGwgdmFs
dWUgZm9yIHRoaXMgaW5kZXg/CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGludGVn
ZXIgPSB2ODo6SW50ZWdlcjo6TmV3KGkpOworICAgICAgICBwcm9wZXJ0aWVzLT5TZXQoaW50ZWdl
ciwgaW50ZWdlcik7CiAgICAgfQorICAgIHJldHVybiBwcm9wZXJ0aWVzOworfQogCiAKLSAgICAv
LyBBIHRlbXBsYXRlIGZvciBpbmRleGVkIGdldHRlcnMgb24gY29sbGVjdGlvbnMgb2Ygc3RyaW5n
cyB0aGF0IHNob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyBhIG51
bGwgc3RyaW5nLgotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvblN0cmluZ09yTnVsbEluZGV4ZWRQcm9wZXJ0eUdldHRl
cih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24g
dHlwZQotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5I
b2xkZXIoKSkpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xs
ZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwotICAgICAgICBTdHJpbmcgcmVzdWx0
ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleCk7Ci0gICAgICAgIHJldHVybiB2OFN0cmluZ09yTnVs
bChyZXN1bHQpOwotICAgIH0KKy8vIEEgdGVtcGxhdGUgZm9yIGluZGV4ZWQgZ2V0dGVycyBvbiBj
b2xsZWN0aW9ucyBvZiBzdHJpbmdzIHRoYXQgc2hvdWxkIHJldHVybiBudWxsIGlmIHRoZSByZXN1
bHRpbmcgc3RyaW5nIGlzIGEgbnVsbCBzdHJpbmcuCit0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9u
PiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRl
eGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCit7CisgICAgLy8gRklYTUU6IGFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEgY29s
bGVjdGlvbiB0eXBlCisgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGlu
Zm8uSG9sZGVyKCkpKTsKKyAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xs
ZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOworICAgIFN0cmluZyByZXN1bHQgPSBj
b2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKKyAgICByZXR1cm4gdjhTdHJpbmdPck51bGwocmVzdWx0
KTsKK30KIAogCi0gICAgLy8gQSB0ZW1wbGF0ZSBmb3IgaW5kZXhlZCBnZXR0ZXJzIG9uIGNvbGxl
Y3Rpb25zIG9mIHN0cmluZ3MuCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb2xsZWN0aW9uU3RyaW5nSW5kZXhlZFByb3BlcnR5R2V0
dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IGFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEgY29sbGVjdGlv
biB0eXBlCi0gICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZv
LkhvbGRlcigpKSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNv
bGxlY3Rpb248Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7Ci0gICAgICAgIFN0cmluZyByZXN1
bHQgPSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKLSAgICAgICAgcmV0dXJuIHY4U3RyaW5nKHJl
c3VsdCk7Ci0gICAgfQorLy8gQSB0ZW1wbGF0ZSBmb3IgaW5kZXhlZCBnZXR0ZXJzIG9uIGNvbGxl
Y3Rpb25zIG9mIHN0cmluZ3MuCit0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNvbGxlY3Rpb25TdHJpbmdJbmRleGVkUHJvcGVydHlHZXR0ZXIo
dWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgLy8g
RklYTUU6IGFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEgY29sbGVjdGlvbiB0eXBlCisgICAg
QVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAg
ICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+
KGluZm8uSG9sZGVyKCkpOworICAgIFN0cmluZyByZXN1bHQgPSBjb2xsZWN0aW9uLT5pdGVtKGlu
ZGV4KTsKKyAgICByZXR1cm4gdjhTdHJpbmcocmVzdWx0KTsKK30KIAogCi0gICAgLy8gQWRkIGlu
ZGV4ZWQgZ2V0dGVyIHRvIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgYSBjb2xsZWN0aW9uLgot
ICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdm9p
ZCBzZXRDb2xsZWN0aW9uSW5kZXhlZEdldHRlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihj
b2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5R2V0dGVyPENvbGxlY3Rpb24sIEl0ZW1UeXBlPiwgMCwg
MCwgMCwgY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3I8Q29sbGVjdGlvbj4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSkpKTsKLSAgICB9Cisv
LyBBZGQgaW5kZXhlZCBnZXR0ZXIgdG8gdGhlIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBhIGNvbGxl
Y3Rpb24uCit0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGlj
IHZvaWQgc2V0Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXIodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gZGVzYywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCit7CisgICAg
ZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxl
Y3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAw
LCBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjxDb2xsZWN0aW9uPiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6Oklu
dGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OlRvSW50KHR5cGUpKSk7Cit9CiAKIAotICAgIC8vIEFk
ZCBuYW1lZCBnZXR0ZXIgdG8gdGhlIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBhIGNvbGxlY3Rpb24u
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2
b2lkIHNldENvbGxlY3Rpb25OYW1lZEdldHRlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoY29s
bGVjdGlvbk5hbWVkUHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAw
LCAwLCB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSkpKTsKLSAgICB9
CisvLyBBZGQgbmFtZWQgZ2V0dGVyIHRvIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgYSBjb2xs
ZWN0aW9uLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRp
YyB2b2lkIHNldENvbGxlY3Rpb25OYW1lZEdldHRlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBkZXNjLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKK3sKKyAgICBk
ZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rp
b25OYW1lZFByb3BlcnR5R2V0dGVyPENvbGxlY3Rpb24sIEl0ZW1UeXBlPiwgMCwgMCwgMCwgMCwg
djg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OlRvSW50KHR5cGUpKSk7Cit9CiAKLSAgICAv
LyBBZGQgaW5kZXhlZCBnZXR0ZXIgcmV0dXJuaW5nIGEgc3RyaW5nIG9yIG51bGwgdG8gYSBmdW5j
dGlvbiB0ZW1wbGF0ZSBmb3IgYSBjb2xsZWN0aW9uLgotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxl
Y3Rpb24+IHN0YXRpYyB2b2lkIHNldENvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRleGVkR2V0dGVy
KHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCi0gICAgewotICAgICAgICBk
ZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoY29sbGVj
dGlvblN0cmluZ09yTnVsbEluZGV4ZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9uPiwgMCwgMCwg
MCwgY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3I8Q29sbGVjdGlvbj4pOwotICAg
IH0KKy8vIEFkZCBpbmRleGVkIGdldHRlciByZXR1cm5pbmcgYSBzdHJpbmcgb3IgbnVsbCB0byBh
IGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBhIGNvbGxlY3Rpb24uCit0ZW1wbGF0ZTxjbGFzcyBDb2xs
ZWN0aW9uPiBzdGF0aWMgdm9pZCBzZXRDb2xsZWN0aW9uU3RyaW5nT3JOdWxsSW5kZXhlZEdldHRl
cih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQoreworICAgIGRlc2MtPklu
c3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihjb2xsZWN0aW9uU3Ry
aW5nT3JOdWxsSW5kZXhlZFByb3BlcnR5R2V0dGVyPENvbGxlY3Rpb24+LCAwLCAwLCAwLCBjb2xs
ZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjxDb2xsZWN0aW9uPik7Cit9CiAKIAotICAg
IC8vIEFkZCBpbmRleGVkIGdldHRlciByZXR1cm5pbmcgYSBzdHJpbmcgdG8gYSBmdW5jdGlvbiB0
ZW1wbGF0ZSBmb3IgYSBjb2xsZWN0aW9uLgotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+
IHN0YXRpYyB2b2lkIHNldENvbGxlY3Rpb25TdHJpbmdJbmRleGVkR2V0dGVyKHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCi0gICAgewotICAgICAgICBkZXNjLT5JbnN0YW5j
ZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoY29sbGVjdGlvblN0cmluZ0lu
ZGV4ZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9uPiwgMCwgMCwgMCwgY29sbGVjdGlvbkluZGV4
ZWRQcm9wZXJ0eUVudW1lcmF0b3I8Q29sbGVjdGlvbj4pOwotICAgIH0KKy8vIEFkZCBpbmRleGVk
IGdldHRlciByZXR1cm5pbmcgYSBzdHJpbmcgdG8gYSBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgYSBj
b2xsZWN0aW9uLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHZvaWQgc2V0Q29s
bGVjdGlvblN0cmluZ0luZGV4ZWRHZXR0ZXIodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gZGVzYykKK3sKKyAgICBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9w
ZXJ0eUhhbmRsZXIoY29sbGVjdGlvblN0cmluZ0luZGV4ZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0
aW9uPiwgMCwgMCwgMCwgY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3I8Q29sbGVj
dGlvbj4pOworfQogCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvT3B0aW9uc0NvbGxlY3Rp
b25TZXR0ZXIodWludDMyX3QgaW5kZXgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgSFRNTFNlbGVj
dEVsZW1lbnQqKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b09wdGlvbnNDb2xsZWN0aW9uU2V0
dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIEhUTUxTZWxlY3RFbGVt
ZW50Kik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVz
c2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKQEAgLTY2LDggKzY3LDggQEAKICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyBmcm9t
IHRoZSBNZXNzYWdlQ2hhbm5lbCB3cmFwcGVyIHRvIHRoZSB0d28KICAgICAvLyBNZXNzYWdlUG9y
dCB3cmFwcGVycyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgTWVzc2FnZVBvcnQgd3JhcHBlcnMKICAg
ICAvLyBzdGF5IGFsaXZlIGFzIGxvbmcgYXMgdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgaXMg
YXJvdW5kLgotICAgIG1lc3NhZ2VDaGFubmVsLT5TZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNo
YW5uZWw6OnBvcnQxSW5kZXgsIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpNRVNTQUdFUE9SVCwgb2JqLT5wb3J0MSgpKSk7Ci0gICAgbWVzc2FnZUNoYW5uZWwt
PlNldEludGVybmFsRmllbGQoVjhNZXNzYWdlQ2hhbm5lbDo6cG9ydDJJbmRleCwgVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBvYmotPnBv
cnQyKCkpKTsKKyAgICBtZXNzYWdlQ2hhbm5lbC0+U2V0SW50ZXJuYWxGaWVsZChWOE1lc3NhZ2VD
aGFubmVsOjpwb3J0MUluZGV4LCB0b1Y4KG9iai0+cG9ydDEoKSkpOworICAgIG1lc3NhZ2VDaGFu
bmVsLT5TZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNoYW5uZWw6OnBvcnQySW5kZXgsIHRvVjgo
b2JqLT5wb3J0MigpKSk7CiAKICAgICAvLyBTZXR1cCB0aGUgc3RhbmRhcmQgd3JhcHBlciBvYmpl
Y3QgaW50ZXJuYWwgZmllbGRzLgogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihtZXNz
YWdlQ2hhbm5lbCwgVjhDbGFzc0luZGV4OjpNRVNTQUdFQ0hBTk5FTCwgb2JqLmdldCgpKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFHcmlk
Q29sdW1uTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgRGF0YUdyaWRDb2x1bW4qIHJlc3VsdCA9IGltcC0+aXRl
bVdpdGhOYW1lKHRvV2ViQ29yZVN0cmluZyhuYW1lKSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6REFUQUdSSURDT0xVTU4sIHJl
c3VsdCk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlz
aW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
CiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgi
CisjaW5jbHVkZSAiVjhTUUxFcnJvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYx
LDcgKzYyLDcgQEAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAgICBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1FMRVJST1IsIGVycm9yKQorICAgICAg
ICB0b1Y4KGVycm9yKQogICAgIH07CiAKICAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0
aGUgY2FsbGJhY2sgcmV0dXJucy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCShyZXZpc2lv
biA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVt
ZW50Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCisjaW5jbHVk
ZSAiVjhTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJWOFNRTFRyYW5zYWN0aW9uLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsOCArNjMsOCBAQAogICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBzY29wZShjb250ZXh0KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10g
PSB7Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpTUUxUUkFOU0FDVElPTiwgdHJhbnNhY3Rpb24pLAotICAgICAgICBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1FMUkVTVUxUU0VULCByZXN1bHRTZXQpCisg
ICAgICAgIHRvVjgodHJhbnNhY3Rpb24pLAorICAgICAgICB0b1Y4KHJlc3VsdFNldCkKICAgICB9
OwogCiAgICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9y
bUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsOCArMzQsOSBAQAogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0
b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVzQ29sbGVjdGlvbi5oIgorI2luY2x1
ZGUgIlY4Tm9kZS5oIgorI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJWOFByb3h5
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ5LDcgQEAKICAgICBSZWZQdHI8
Tm9kZT4gZm9ybUVsZW1lbnQgPSBmb3JtLT5lbGVtZW50cygpLT5pdGVtKGluZGV4KTsKICAgICBp
ZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZm9ybUVs
ZW1lbnQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChmb3JtRWxlbWVudC5yZWxlYXNlKCkp
OwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRm9ybUVsZW1lbnQ6Om5hbWVkUHJv
cGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCkBAIC03NCwxMCArNzUsMTAgQEAKICAgICBBU1NFUlQoIWVsZW1lbnRzLmlz
RW1wdHkoKSk7CiAKICAgICBpZiAoZWxlbWVudHMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChlbGVtZW50cy5hdCgwKS5yZWxl
YXNlKCkpOworICAgICAgICByZXR1cm4gdG9WOChlbGVtZW50cy5hdCgwKS5yZWxlYXNlKCkpOwog
CiAgICAgTm9kZUxpc3QqIGNvbGxlY3Rpb24gPSBuZXcgVjhOYW1lZE5vZGVzQ29sbGVjdGlvbihl
bGVtZW50cyk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpOT0RFTElTVCwgY29sbGVjdGlvbik7CisgICAgcmV0dXJuIHRvVjgoY29sbGVj
dGlvbik7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxGb3JtRWxlbWVudDo6c3Vi
bWl0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxMiArNDIsMTYgQEAKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4V2Vi
R0xBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJWOFdlYkdM
Qnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiVjhXZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJW
OFdlYkdMRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKICNpbmNs
dWRlICJWOFdlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIlY4V2ViR0xSZW5kZXJidWZmZXIuaCIK
ICNpbmNsdWRlICJWOFdlYkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXku
aCIKKyNpbmNsdWRlICJWOFdlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3Jt
TG9jYXRpb24uaCIKICNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNs
dWRlICJWOFdlYkdMVW5zaWduZWRJbnRBcnJheS5oIgpAQCAtMTkxLDIzICsxOTUsMjMgQEAKICAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZExvbmc6CiAgICAgICAgIHJldHVybiB2
ODo6SW50ZWdlcjo6TmV3RnJvbVVuc2lnbmVkKGluZm8uZ2V0VW5zaWduZWRMb25nKCkpOwogICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgotICAgICAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQkdMQlVGRkVSLCBp
bmZvLmdldFdlYkdMQnVmZmVyKCkpOworICAgICAgICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdM
QnVmZmVyKCkpOwogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJheToK
LSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpXRUJHTEZMT0FUQVJSQVksIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAgICAg
ICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsKICAgICBjYXNlIFdlYkdM
R2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgotICAgICAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQkdMRlJBTUVCVUZGRVIsIGlu
Zm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW5mby5nZXRX
ZWJHTEZyYW1lYnVmZmVyKCkpOwogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50
QXJyYXk6Ci0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6V0VCR0xJTlRBUlJBWSwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAg
ICAgICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMSW50QXJyYXkoKSk7CiAgICAgLy8gRklYTUU6
IGltcGxlbWVudCBXZWJHTE9iamVjdEFycmF5CiAgICAgLy8gY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xPYmplY3RBcnJheToKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFBy
b2dyYW06Ci0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6V0VCR0xQUk9HUkFNLCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKKyAgICAg
ICAgcmV0dXJuIHRvVjgoaW5mby5nZXRXZWJHTFByb2dyYW0oKSk7CiAgICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlV2ViR0xSZW5kZXJidWZmZXI6Ci0gICAgICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCR0xSRU5ERVJCVUZGRVIsIGlu
Zm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0
V2ViR0xSZW5kZXJidWZmZXIoKSk7CiAgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xU
ZXh0dXJlOgotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OldFQkdMVEVYVFVSRSwgaW5mby5nZXRXZWJHTFRleHR1cmUoKSk7CisgICAg
ICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwogICAgIGNhc2UgV2ViR0xH
ZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FREJZ
VEVBUlJBWSwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOworICAgICAgICByZXR1
cm4gdG9WOChpbmZvLmdldFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoKSk7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1
c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw5IEBACiAj
aW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWOEhUTUxDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgorI2luY2x1ZGUgIlY4
Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgog
I2lmIEVOQUJMRShXRUJfU09DS0VUUykKQEAgLTcwOCw3ICs3MTAsNyBAQAogCiAgICAgICAgICAg
ICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShjb21w
bGV0ZWRVcmwsIHJlZmVycmVyLCBmYWxzZSwgdXNlckdlc3R1cmUpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOworICAgICAgICByZXR1cm4gdG9WOChmcmFt
ZS0+ZG9tV2luZG93KCkpOwogICAgIH0KIAogICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbmFtZWQg
ZnJhbWUgb3IgYSBuZXcgd2luZG93LCB3ZSdsbCB1c2UgdGhlCkBAIC03NjgsNyArNzcwLDcgQEAK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGZyYW1lLT5kb21XaW5kb3coKSk7CisgICAgcmV0dXJuIHRvVjgoZnJhbWUtPmRvbVdp
bmRvdygpKTsKIH0KIAogCkBAIC03ODYsNyArNzg4LDcgQEAKIAogICAgIEZyYW1lKiBjaGlsZCA9
IGZyYW1lLT50cmVlKCktPmNoaWxkKGluZGV4KTsKICAgICBpZiAoY2hpbGQpCi0gICAgICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBjaGlsZC0+ZG9tV2luZG93KCkpOworICAgICAgICByZXR1cm4gdG9WOChjaGlsZC0+ZG9t
V2luZG93KCkpOwogCiAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiB9CkBA
IC04MDksNyArODExLDcgQEAKICAgICBBdG9taWNTdHJpbmcgcHJvcE5hbWUgPSB2OFN0cmluZ1Rv
QXRvbWljV2ViQ29yZVN0cmluZyhuYW1lKTsKICAgICBGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJl
ZSgpLT5jaGlsZChwcm9wTmFtZSk7CiAgICAgaWYgKGNoaWxkKQotICAgICAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY2hp
bGQtPmRvbVdpbmRvdygpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoY2hpbGQtPmRvbVdpbmRvdygp
KTsKIAogICAgIC8vIFNlYXJjaCBJREwgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIHByb3RvdHlw
ZQogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBpbmZvLkhvbGRlcigpLT5HZXRS
ZWFsTmFtZWRQcm9wZXJ0eShuYW1lKTsKQEAgLTgyNCw4ICs4MjYsOCBAQAogICAgICAgICAgICAg
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBpdGVtcyA9IGRvYy0+d2luZG93TmFtZWRJdGVtcyhwcm9w
TmFtZSk7CiAgICAgICAgICAgICBpZiAoaXRlbXMtPmxlbmd0aCgpID49IDEpIHsKICAgICAgICAg
ICAgICAgICBpZiAoaXRlbXMtPmxlbmd0aCgpID09IDEpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChpdGVtcy0+Zmlyc3RJdGVt
KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGl0ZW1zLnJlbGVhc2UoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KGl0ZW1zLT5maXJzdEl0ZW0oKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRvVjgoaXRlbXMucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFs
bENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1NDI1MSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhOYW1lZE5vZGVzQ29s
bGVjdGlvbi5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgorI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDEwICs1
MSwxMCBAQAogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAKICAgICBp
ZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5hbWVkSXRlbXMuYXQoMCkucmVsZWFzZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHRvVjgobmFtZWRJdGVtcy5hdCgwKS5yZWxlYXNlKCkpOwogCiAgICAgTm9kZUxp
c3QqIGxpc3QgPSBuZXcgVjhOYW1lZE5vZGVzQ29sbGVjdGlvbihuYW1lZEl0ZW1zKTsKLSAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVM
SVNULCBsaXN0KTsKKyAgICByZXR1cm4gdG9WOChsaXN0KTsKIH0KIAogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBnZXRJdGVtKEhUTUxBbGxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gYXJndW1lbnQpCkBAIC02OCw3ICs3MCw3IEBACiAgICAgfQogCiAg
ICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgtPlVpbnQzMlZh
bHVlKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChy
ZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0K
IAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFsbENvbGxlY3Rpb246Om5hbWVkUHJvcGVy
dHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCkBAIC0xMzAsNyArMTMyLDcgQEAKICAgICBOb2RlKiBub2RlID0gaW1wLT5uYW1l
ZEl0ZW0obmFtZSk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKCFjdXJyZW50KQot
ICAgICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5v
ZGUpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgobm9kZSk7CiAKICAgICAgICAgbm9kZSA9IGlt
cC0+bmV4dE5hbWVkSXRlbShuYW1lKTsKICAgICAgICAgY3VycmVudC0tOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2
LDEwIEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIK
ICNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Nywx
MCArNzgsMTAgQEAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKICAgICBpZiAocmVzdWx0LT5pczJkKCkpCi0gICAgICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVY
VDJELCByZXN1bHQpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqPihyZXN1bHQpKTsKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogICAgIGVs
c2UgaWYgKHJlc3VsdC0+aXMzZCgpKQotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQkdMUkVOREVSSU5HQ09OVEVYVCwgcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj4ocmVzdWx0KSk7CiAjZW5kaWYKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
b2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDE2ICszNywxNyBAQAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJYUGF0aE5TUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJYUGF0aFJlc3VsdC5oIgotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5j
bHVkZSAiVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJWOERPTUltcGxlbWVu
dGF0aW9uLmgiCiAjaW5jbHVkZSAiVjhIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOElzb2xh
dGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
ICNpbmNsdWRlICJWOFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAiVjhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJWOFhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlY4WFBh
dGhSZXN1bHQuaCIKIApAQCAtODIsNyArODMsNyBAQAogICAgIGlmIChlYykKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpYUEFUSFJFU1VMVCwgcmVzdWx0LnJlbGVhc2UoKSk7Cisg
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0Q2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKQEAgLTk4LDEwICs5OSwxMCBAQAogICAgIGlmICghcmVzdWx0KQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIGlmIChyZXN1bHQtPmlzMmQoKSkKLSAg
ICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KHJlc3VsdCkpOwogI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVzdWx0LT5pczNkKCkpCi0gICAgICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCR0xS
RU5ERVJJTkdDT05URVhULCByZXN1bHQpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZXN1bHQpKTsKICNlbmRpZiAvLyBFTkFCTEUoM0Rf
Q0FOVkFTKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CkBAIC0xMjcsNyArMTI4LDcgQEAKIAogICAgIC8vIEdlbmVyYXRlIGEgd3JhcHBlci4K
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBWOERvY3VtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTUltcGxlbWVudGF0aW9uVG9WOE9iamVjdChkb2N1bWVudC0+aW1wbGVtZW50YXRp
b24oKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSB0b1Y4KGRvY3VtZW50
LT5pbXBsZW1lbnRhdGlvbigpKTsKIAogICAgIC8vIFN0b3JlIHRoZSB3cmFwcGVyIGluIHRoZSBp
bnRlcm5hbCBmaWVsZC4KICAgICBpbmZvLkhvbGRlcigpLT5TZXRJbnRlcm5hbEZpZWxkKGltcGxl
bWVudGF0aW9uSW5kZXgsIHdyYXBwZXIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUx
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJWOEN1c3RvbUJp
bmRpbmcuaCIKICNpbmNsdWRlICJWOEhUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhO
YW1lZE5vZGVzQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgorI2luY2x1ZGUgIlY4
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ5LDEwICs1MSwxMCBAQAogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5hbWVkSXRlbXMuYXQoMCkucmVsZWFz
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgobmFtZWRJdGVtcy5hdCgwKS5yZWxlYXNlKCkpOwog
CiAgICAgTm9kZUxpc3QqIGxpc3QgPSBuZXcgVjhOYW1lZE5vZGVzQ29sbGVjdGlvbihuYW1lZEl0
ZW1zKTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6Ok5PREVMSVNULCBsaXN0KTsKKyAgICByZXR1cm4gdG9WOChsaXN0KTsKIH0KIAogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRJdGVtKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndW1lbnQpCkBAIC02OCw3ICs3MCw3IEBACiAg
ICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgt
PlVpbnQzMlZhbHVlKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9W
OE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFz
ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENvbGxlY3Rpb246Om5hbWVk
UHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCkBAIC0xMzAsNyArMTMyLDcgQEAKICAgICBOb2RlKiBub2RlID0gaW1w
LT5uYW1lZEl0ZW0obmFtZSk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKCFjdXJy
ZW50KQotICAgICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgobm9kZSk7CiAKICAgICAgICAgbm9k
ZSA9IGltcC0+bmV4dE5hbWVkSXRlbShuYW1lKTsKICAgICAgICAgY3VycmVudC0tOwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2lu
Y2x1ZGUgIlY4QmVmb3JlTG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJWOENvbXBvc2l0aW9uRXZlbnQuaCIKLSNp
bmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEVycm9yRXZlbnQuaCIKICNp
bmNsdWRlICJWOEtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VFdmVudC5oIgpA
QCAtNzAsNyArNzAsNyBAQAogICAgIEV2ZW50KiBldmVudCA9IFY4RXZlbnQ6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwogCiAgICAgaWYgKGV2ZW50LT5pc0RyYWdFdmVudCgpKQotICAgICAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBC
T0FSRCwgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOworICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9h
cmQoKSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQpAQCAtODAsNyArODAsNyBA
QAogICAgIEV2ZW50KiBldmVudCA9IFY4RXZlbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwog
CiAgICAgaWYgKGV2ZW50LT5pc0NsaXBib2FyZEV2ZW50KCkpCi0gICAgICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBzdGF0
aWNfY2FzdDxDbGlwYm9hcmRFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOworICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDbGlwYm9hcmRFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJk
KCkpOwogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVl
dExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVk
ZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4U3R5bGVTaGVldC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVULCBpdGVtLT5zaGVldCgp
KTsKKyAgICByZXR1cm4gdG9WOChpdGVtLT5zaGVldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDggKzM1LDggQEAKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUg
IlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlY4
TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKQEAgLTUzLDcgKzUz
LDcgQEAKIAogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6
TmV3KHBvcnRzLT5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHMtPnNp
emUoKTsgKytpKQotICAgICAgICBwb3J0QXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGkpLCBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQs
ICgqcG9ydHMpW2ldLmdldCgpKSk7CisgICAgICAgIHBvcnRBcnJheS0+U2V0KHY4OjpJbnRlZ2Vy
OjpOZXcoaSksIHRvVjgoKCpwb3J0cylbaV0uZ2V0KCkpKTsKIAogICAgIHJldHVybiBwb3J0QXJy
YXk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1l
ZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
OCArMzMsOCBAQAogCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDksNyArNDksNyBAQAogICAgIGlmICghcmVzdWx0KQogICAg
ICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4TmFtZWROb2RlTWFwOjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNzAsNyArNzAsNyBAQAog
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1
bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTmFtZWROb2RlTWFwKiBpbXBsKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxl
bWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJWOEhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAK
QEAgLTc4LDcgKzc5LDcgQEAKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgYWRk
ZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgSFRNTEltYWdlRWxlbWVudCBp
bnN0YW5jZQogICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0aGUgbWFw
IGFuZCBnZXQgZ2FyYmFnZS1jY29sbGVjdGVkIHByZW1hdHVyZWx5LgotICAgIFY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGRvY3VtZW50KTsKKyAgICB0b1Y4KGRvY3VtZW50KTsK
IAogICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VFbGVt
ZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCk7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAwKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2Rl
SXRlcmF0b3JDdXN0b20uY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIK
ICNpbmNsdWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAt
NTQsNyArNTQsNyBAQAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwo
KTsKIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChvYmpl
Y3QpOworICAgIHJldHVybiB0b1Y4KG9iamVjdCk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOE5vZGVJdGVyYXRvcjo6bmV4dE5vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERv
Y3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDExIEBACiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5o
IgorI2luY2x1ZGUgIlY4SFRNTEFsbENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJWOEhUTUxDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKKyNpbmNsdWRlICJWOE5v
ZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTkyLDEyICs5NiwxMiBAQAogICAgICAgICBO
b2RlKiBub2RlID0gaXRlbXMtPmZpcnN0SXRlbSgpOwogICAgICAgICBGcmFtZSogZnJhbWUgPSAw
OwogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgJiYg
KGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnQqPihub2RlKS0+Y29udGVudEZy
YW1lKCkpKQotICAgICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGZyYW1lLT5kb21XaW5kb3coKSk7CisgICAgICAg
ICAgICByZXR1cm4gdG9WOChmcmFtZS0+ZG9tV2luZG93KCkpOwogCi0gICAgICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChub2RlKTsKKyAgICAgICAgcmV0dXJu
IHRvVjgobm9kZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMucmVsZWFzZSgpKTsK
KyAgICByZXR1cm4gdG9WOChpdGVtcy5yZWxlYXNlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MRG9jdW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRl
eCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyAmaW5mbykgCkBAIC0xODIsMTAgKzE4Niw5IEBACiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRG9jdW1lbnQ6OmFsbEFjY2Vzc29yR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxEb2N1bWVudC5hbGwuX2dldCIpOwotICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGlu
Zm8uSG9sZGVyKCk7CiAgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOEhUTUxEb2N1
bWVudDo6dG9OYXRpdmUoaG9sZGVyKTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBodG1sRG9jdW1lbnQtPmFs
bCgpKTsKKyAgICByZXR1cm4gdG9WOChodG1sRG9jdW1lbnQtPmFsbCgpKTsKIH0KIAogdm9pZCBW
OEhUTUxEb2N1bWVudDo6YWxsQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQyNTEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1MywxMCBAQAogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAg
ICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpCi0gICAgICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTR1JBRElFTlQsIHN0eWxl
LT5jYW52YXNHcmFkaWVudCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3R5bGUtPmNhbnZhc0dy
YWRpZW50KCkpOwogCiAgICAgaWYgKHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpCi0gICAgICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFT
UEFUVEVSTiwgc3R5bGUtPmNhbnZhc1BhdHRlcm4oKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0
eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogCiAgICAgcmV0dXJuIHY4U3RyaW5nKHN0eWxlLT5jb2xv
cigpKTsKIH0KQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKGVjKTsKICAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUEFUVEVSTiwgcGF0dGVybi5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm4gdG9WOChwYXR0ZXJuLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgaWYg
KFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKQEAgLTM1OSw3ICszNTks
NyBAQAogICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FO
VkFTUEFUVEVSTiwgcGF0dGVybi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gdG9WOChwYXR0
ZXJuLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZH
TWF0cml4Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR01hdHJpeEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNiArMzEsMTMgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KIAogI2lmIEVOQUJMRShTVkcpCi0K
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSAiU1ZHRXhjZXB0
aW9uLmgiCi0KICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTVkdNYXRyaXguaCIKICNp
bmNsdWRlICJWOFNWR1BPRFR5cGVXcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2LDcgKzUzLDggQEAKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtMSA9ICpWOFNWR1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbTIgPSAq
VjhTVkdQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OnRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwogCi0gICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIFY4U1ZHU3Rh
dGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUobTEubXVsdExl
ZnQobTIpKSk7CisgICAgUmVmUHRyPFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3Jt
YXRpb25NYXRyaXg+ID4gd3JhcHBlciA9IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjpjcmVhdGUobTEubXVsdExlZnQobTIpKTsKKyAgICByZXR1cm4gdG9W
OCh3cmFwcGVyLmdldCgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4
OjppbnZlcnNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTc0LDcgKzcy
LDggQEAKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogICAgIH0KIAot
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
U1ZHTUFUUklYLCBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4
Pjo6Y3JlYXRlKHJlc3VsdCkpOworICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVy
PFRyYW5zZm9ybWF0aW9uTWF0cml4PiA+IHdyYXBwZXIgPSBWOFNWR1N0YXRpY1BPRFR5cGVXcmFw
cGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKHJlc3VsdCk7CisgICAgcmV0dXJuIHRv
Vjgod3JhcHBlci5nZXQoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNWR01hdHJp
eDo6cm90YXRlRnJvbVZlY3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC05NCw3ICs5Myw4IEBACiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OlNWR01BVFJJWCwgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1bHQpKTsKKyAgICBSZWZQdHI8VjhTVkdTdGF0aWNQT0RU
eXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhTVkdTdGF0aWNQ
T0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShyZXN1bHQpOworICAg
IHJldHVybiB0b1Y4KHdyYXBwZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVt
ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQAogICAgIGlmIChl
YykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHRvVjgo
cmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEVsZW1lbnQ6
OnNldEF0dHJpYnV0ZU5TQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEy
Niw3ICsxMjYsNyBAQAogICAgIGlmIChlYykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKLSAg
ICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVh
c2UoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KEVsZW1lbnQqIGltcGwsIGJvb2wgZm9yY2VOZXdPYmplY3QpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
T3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOSBAQAogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiVjhIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTFNlbGVjdEVs
ZW1lbnRDdXN0b20uaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgp
KTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRleGVkUHJvcGVydHlTZXR0ZXIo
dWludDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDI1
MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJOb2Rl
LmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBpZiAoIWRvYykKICAg
ICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2MtPmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygp
KTsKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5kb21XaW5kb3coKSk7CiAgICAgfQog
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9j
dW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDcgQEAK
ICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2luY2x1ZGUgIlY4RG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJWOExvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCw3ICszOSw3IEBACiAgICAgICAgIHJldHVybiB2
ODo6TnVsbCgpOwogCiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBkb2N1bWVudC0+ZnJhbWUoKS0+
ZG9tV2luZG93KCk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpMT0NBVElPTiwgd2luZG93LT5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4g
dG9WOCh3aW5kb3ctPmxvY2F0aW9uKCkpOwogfQogCiB2b2lkIFY4RG9jdW1lbnQ6OmxvY2F0aW9u
QWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICsz
NywxMSBAQAogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9u
LmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhIVE1MT3B0aW9u
RWxlbWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJW
OE5hbWVkTm9kZXNDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCisjaW5jbHVkZSAi
VjhOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjcsMTAgKzY4LDEwIEBACiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwogCiAgICAgaWYgKGl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoaXRlbXMuYXQoMCkucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuIHRvVjgoaXRlbXMuYXQoMCkucmVsZWFzZSgpKTsKIAogICAgIE5vZGVM
aXN0KiBsaXN0ID0gbmV3IFY4TmFtZWROb2Rlc0NvbGxlY3Rpb24oaXRlbXMpOwotICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1Qs
IGxpc3QpOworICAgIHJldHVybiB0b1Y4KGxpc3QpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGlu
ZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtODAsNyArODEsNyBAQAogICAg
IGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
IAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQu
cmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTFNlbGVjdEVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eVNl
dHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOSArMzIsOCBAQAogI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIgCiAKICNpbmNsdWRlICJOb2Rl
TGlzdC5oIgotCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5k
aW5nLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTcsNyArNTYsNyBAQAogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKKyAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogLy8gTmVlZCB0byBzdXBwb3J0
IGNhbGwgc28gdGhhdCBsaXN0KDApIHdvcmtzLgpAQCAtNzUsNyArNzQsNyBAQAogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IGxpc3Qt
Pml0ZW0oaW5kZXgtPlVpbnQzMlZhbHVlKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChy
ZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2Vu
dGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQyNTEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDYgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJOb3RpZmlj
YXRpb25DZW50ZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3Rv
bUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4Tm90aWZpY2F0aW9uLmgiCkBA
IC05NSw3ICs5NCw3IEBACiAgICAgaWYgKG5vdGlmaWNhdGlvbkNlbnRlci0+Y29udGV4dCgpLT5p
c1dvcmtlckNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlm
aWNhdGlvbi5nZXQoKSk7CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uLmdldCgpKTsKKyAg
ICByZXR1cm4gdG9WOChub3RpZmljYXRpb24uZ2V0KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZU5vdGlmaWNhdGlvbkNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTIsNyArMTExLDcgQEAKICAgICBpZiAobm90
aWZpY2F0aW9uQ2VudGVyLT5jb250ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKQogICAgICAgICBy
ZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uLmdldCgpKTsKIAotICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FU
SU9OLCBub3RpZmljYXRpb24uZ2V0KCkpOworICAgIHJldHVybiB0b1Y4KG5vdGlmaWNhdGlvbi5n
ZXQoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNhdGlvbkNlbnRlcjo6
cmVxdWVzdFBlcm1pc3Npb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JD
dXN0b20uY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDgg
QEAKICNpbmNsdWRlICJOb2RlLmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOERvY3VtZW50LmgiCisjaW5jbHVkZSAi
VjhEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQ
cm94eS5oIgogI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKQEAgLTc4LDcgKzc4LDcgQEAKICAg
ICBOb2RlKiBzb3VyY2UgPSBWOE5vZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoYXJnc1swXSkpOwogICAgIERvY3VtZW50KiBvd25lciA9IFY4RG9jdW1lbnQ6OnRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkpOwogICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiByZXN1bHQgPSBpbXAtPnRyYW5zZm9ybVRvRnJhZ21lbnQoc291cmNl
LCBvd25lcik7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwog
fQogCiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2Rl
VG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVs
ZWFzZSgpKTsKIH0KIAogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1
NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIiAgLy8gRm9yIGlu
dm9rZUNhbGxiYWNrCisjaW5jbHVkZSAiVjhQb3NpdGlvbkVycm9yLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTMsNyArNTQsNyBAQAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29w
ZShjb250ZXh0KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7Ci0gICAg
ICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpQT1NJVElP
TkVSUk9SLCBlcnJvcikKKyAgICAgICAgdG9WOChlcnJvcikKICAgICB9OwogCiAgICAgLy8gUHJv
dGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDU0MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIlRyZWVX
YWxrZXIuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC01Miw3ICs1Miw3IEBACiAgICAgaWYgKCFvYmpl
Y3QpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG9iamVjdCk7CisgICAgcmV0dXJuIHRvVjgob2JqZWN0
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJlZVdhbGtlcjo6cGFyZW50Tm9kZUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQAog
I2luY2x1ZGUgIlBhZ2UuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4
Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4RGF0YWJhc2UuaCIKICNpbmNsdWRlICJWOE5v
ZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC04NSw3ICs4NCw3IEBACiAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShpbnNwZWN0ZWRDb250ZXh0KTsKIAogICAgIC8vIENh
bGwgY3VzdG9tIGNvZGUgdG8gY3JlYXRlIEluamVjdGVkU2NyaXBIb3N0IHdyYXBwZXIgc3BlY2lm
aWMgZm9yIHRoZSBjb250ZXh0Ci0gICAgLy8gaW5zdGVhZCBvZiBjYWxsaW5nIFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvVjhPYmplY3QgdGhhdCB3b3VsZCBjcmVhdGUgdGhlCisgICAgLy8gaW5zdGVh
ZCBvZiBjYWxsaW5nIHRvVjgoKSB0aGF0IHdvdWxkIGNyZWF0ZSB0aGUKICAgICAvLyB3cmFwcGVy
IGluIHRoZSBjdXJyZW50IGNvbnRleHQuCiAgICAgLy8gRklYTUU6IG1ha2UgaXQgcG9zc2libGUg
dG8gdXNlIGdlbmVyaWMgYmluZGluZ3MgZmFjdG9yeSBmb3IgSW5qZWN0ZWRTY3JpcHRIb3N0Lgog
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzY3JpcHRIb3N0V3JhcHBlciA9IGNyZWF0ZUluamVj
dGVkU2NyaXB0SG9zdFY4V3JhcHBlcihpbmplY3RlZFNjcmlwdEhvc3QpOwpAQCAtMTMwLDcgKzEy
OSw3IEBACiAgICAgaWYgKCFpYykKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAot
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
Tk9ERSwgbm9kZSk7CisgICAgcmV0dXJuIHRvVjgobm9kZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNjAsNyArMTU5LDcgQEAKICAgICBE
YXRhYmFzZSogZGF0YWJhc2UgPSBob3N0LT5kYXRhYmFzZUZvcklkKGFyZ3NbMF0tPlRvSW50MzIo
KS0+VmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdDxEYXRh
YmFzZT4oVjhDbGFzc0luZGV4OjpEQVRBQkFTRSwgZGF0YWJhc2UpOworICAgIHJldHVybiB0b1Y4
KGRhdGFiYXNlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRI
b3N0OjpzZWxlY3REYXRhYmFzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
QXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhEb2N1
bWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTEF1ZGlvRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKIApAQCAtNzgsNyArNzksNyBAQAogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBkb2N1bWVu
dCBpcyBhZGRlZCB0byB0aGUgRE9NIE5vZGUgbWFwLiBPdGhlcndpc2UsIHRoZSBIVE1MQXVkaW9F
bGVtZW50IGluc3RhbmNlCiAgICAgLy8gbWF5IGVuZCB1cCBiZWluZyB0aGUgb25seSBub2RlIGlu
IHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNjb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCi0gICAgVjhE
T01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZG9jdW1lbnQpOworICAgIHRvVjgoZG9j
dW1lbnQpOwogCiAgICAgUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGF1ZGlvID0gbmV3IEhUTUxB
dWRpb0VsZW1lbnQoSFRNTE5hbWVzOjphdWRpb1RhZywgZG9jdW1lbnQpOwogICAgIGF1ZGlvLT5z
ZXRBdXRvYnVmZmVyKHRydWUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
CShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDggQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJh
Y2suaCIKKyNpbmNsdWRlICJWOFNRTEVycm9yLmgiCisjaW5jbHVkZSAiVjhTUUxUcmFuc2FjdGlv
bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYxLDggKzYzLDggQEAKICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gYXJndltdID0gewotICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6U1FMVFJBTlNBQ1RJT04sIHRyYW5zYWN0aW9uKSwKLSAgICAgICAgVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTEVSUk9SLCBlcnJvcikK
KyAgICAgICAgdG9WOCh0cmFuc2FjdGlvbiksCisgICAgICAgIHRvVjgoZXJyb3IpCiAgICAgfTsK
IAogICAgIC8vIFByb3RlY3QgdGhlIGZyYW1lIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA1NDI1MSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21W
b2lkQ2FsbGJhY2suaCIgIC8vIEZvciBpbnZva2VDYWxsYmFjaworI2luY2x1ZGUgIlY4R2VvcG9z
aXRpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw3ICs1NCw3IEBACiAgICAg
djg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6OkdFT1BPU0lUSU9OLCBwb3NpdGlvbikKKyAgICAgICAgdG9WOChwb3Np
dGlvbikKICAgICB9OwogCiAgICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxi
YWNrIHJldHVybnMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDU0
MjUxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIgorI2luY2x1ZGUg
IlY4U1FMVHJhbnNhY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Miw3ICs2
Myw3IEBACiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFuc2FjdGlvbikK
KyAgICAgICAgdG9WOCh0cmFuc2FjdGlvbikKICAgICB9OwogCiAgICAgLy8gUHJvdGVjdCB0aGUg
ZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNTQyNTEpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEV2ZW50LmgiCiAj
aW5jbHVkZSAiVjhFdmVudExpc3RlbmVyTGlzdC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNp
bmNsdWRlICJWOFV0aWxpdGllcy5oIgpAQCAtODQsNyArODUsNyBAQAogICAgIHY4OjpDb250ZXh0
OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgLy8gR2V0IHRoZSBWOCB3cmFwcGVyIGZv
ciB0aGUgZXZlbnQgb2JqZWN0LgotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KGV2ZW50KTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IHRvVjgoZXZlbnQpOwogCiAgICAgaW52b2tlRXZlbnRI
YW5kbGVyKGNvbnRleHQsIGV2ZW50LCBqc0V2ZW50KTsKIAo=
</data>
<flag name="review"
          id="30563"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48067</attachid>
            <date>2010-02-03 14:06:17 -0800</date>
            <delta_ts>2010-02-03 14:10:07 -0800</delta_ts>
            <desc>Now without Chromium test failures!</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>116911</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDItMDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
VjhdIFVzZSB0b1Y4KCkgdG8gd3JhcCBpbiB0aGUgY3VzdG9tIGJpbmRpbmdzLCBhbmQgcmVtb3Zl
CisgICAgICAgIHRoZSBvbGQgd3JhcHBpbmcgY29kZSBmcm9tIFY4RE9NV3JhcHBlci4KKyAgICAg
ICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjU2
MworCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmg6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxi
YWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9u
Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxl
bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5hbWVkTm9kZU1hcEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhO
b2RlTGlzdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZp
Y2F0aW9uQ2VudGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdNYXRyaXhDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxl
U2hlZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVl
V2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwOgorCiAyMDEwLTAyLTAzICBEcmV3IFdpbHNvbiAgPGF0
d2lsc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1
cnlha292LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTE5OTcsOSArMTk5NywxNiBAQAogRU5ECiAg
ICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICBpZiAoTmVlZHNXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHlUb1Y4KCRpbnRlcmZhY2VOYW1lKSkgeworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9ID0gMTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgd3JhcHBlciA9IFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6dG9WOCgke3dyYXBwZXJUeXBlfSwgaW1wbCk7CitFTkQKKyAgICB9IGVs
c2UgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogICB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KHByb3h5LCAke3dyYXBwZXJUeXBlfSwgaW1w
bCk7CiBFTkQKKyAgICB9CiAKICAgICBpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CkBAIC0yMDQ3LDYgKzIwNTQsMTkgQEAK
ICAgICB9CiB9CiAKK3N1YiBOZWVkc1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eVRvVjggewor
ICAgICMgVGhlc2Ugb2JqZWN0cyBjYW4gYmUgY29uc3RydWN0ZWQgdW5kZXIgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LiBUaGV5IG5lZWQgc3BlY2lhbAorICAgICMgaGFuZGxpbmcsIHNpbmNl
IGlmIHdlIGNhbGwgVjhQcm94eTo6cmV0cmlldmUoKSwgd2Ugd2lsbCBjcmFzaC4KKyAgICAjIEZJ
WE1FOiB3ZWJzb2NrZXQ/CisgICAgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NQ29yZUV4Y2VwdGlvbiI7CisgICAgcmV0dXJuIDEg
aWYgJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50RXhjZXB0aW9uIjsKKyAgICByZXR1cm4gMSBpZiAk
aW50ZXJmYWNlTmFtZSBlcSAiUmFuZ2VFeGNlcHRpb24iOworICAgIHJldHVybiAxIGlmICRpbnRl
cmZhY2VOYW1lIGVxICJYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbiI7CisgICAgcmV0dXJuIDEgaWYg
JGludGVyZmFjZU5hbWUgZXEgIk1lc3NhZ2VQb3J0IjsKKyAgICByZXR1cm4gMDsKK30KKwogc3Vi
IEhhc0N1c3RvbVRvVjhJbXBsZW1lbnRhdGlvbiB7CiAgICAgIyBGSVhNRTogVGhpcyBzdWJyb3V0
aW5lIGlzIGxhbWUuIFByb2JhYmx5IHNob3VsZCBiZSBhbiAuaWRsIGF0dHJpYnV0ZSAoQ3VzdG9t
VG9WOCk/CiAgICAgJGRhdGFOb2RlID0gc2hpZnQ7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuY3BwCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUg
IlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhET01BcHBsaWNhdGlv
bkNhY2hlLmgiCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKQEAgLTg0LDkzICs4Myw2IEBACiB0eXBl
ZGVmIEhhc2hNYXA8Tm9kZSosIHY4OjpPYmplY3QqPiBET01Ob2RlTWFwOwogdHlwZWRlZiBIYXNo
TWFwPHZvaWQqLCB2ODo6T2JqZWN0Kj4gRE9NT2JqZWN0TWFwOwogCi0jaWYgRU5BQkxFKFNWRykK
LQotc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb3duY2FzdFNWR1BhdGhTZWco
dm9pZCogcGF0aFNlZykKLXsKLSAgICBTVkdQYXRoU2VnKiByZWFsUGF0aFNlZyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8U1ZHUGF0aFNlZyo+KHBhdGhTZWcpOwotCi0gICAgc3dpdGNoIChyZWFsUGF0aFNl
Zy0+cGF0aFNlZ1R5cGUoKSkgewotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9TRVBB
VEg6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQ0xP
U0VQQVRIOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fQUJTOiAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHTU9WRVRPQUJTOwotICAg
IGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fUkVMOiAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHTU9WRVRPUkVMOwotICAgIGNhc2UgU1ZHUGF0
aFNlZzo6UEFUSFNFR19MSU5FVE9fQUJTOiAgICAgICAgICAgICAgICAgICByZXR1cm4gVjhDbGFz
c0luZGV4OjpTVkdQQVRIU0VHTElORVRPQUJTOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNF
R19MSU5FVE9fUkVMOiAgICAgICAgICAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQ
QVRIU0VHTElORVRPUkVMOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NV
QklDX0FCUzogICAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQ1VSVkVU
T0NVQklDQUJTOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1JF
TDogICAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQ1VSVkVUT0NVQklD
UkVMOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM6
ICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQ1VSVkVUT1FVQURSQVRJQ0FC
UzsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMOiAg
ICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNFR0NVUlZFVE9RVUFEUkFUSUNSRUw7
Ci0gICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FSQ19BQlM6ICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBWOENsYXNzSW5kZXg6OlNWR1BBVEhTRUdBUkNBQlM7Ci0gICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0FSQ19SRUw6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWOENs
YXNzSW5kZXg6OlNWR1BBVEhTRUdBUkNSRUw7Ci0gICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VH
X0xJTkVUT19IT1JJWk9OVEFMX0FCUzogICAgICAgIHJldHVybiBWOENsYXNzSW5kZXg6OlNWR1BB
VEhTRUdMSU5FVE9IT1JJWk9OVEFMQUJTOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19M
SU5FVE9fSE9SSVpPTlRBTF9SRUw6ICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRI
U0VHTElORVRPSE9SSVpPTlRBTFJFTDsKLSAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElO
RVRPX1ZFUlRJQ0FMX0FCUzogICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNF
R0xJTkVUT1ZFUlRJQ0FMQUJTOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5FVE9f
VkVSVElDQUxfUkVMOiAgICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHTElO
RVRPVkVSVElDQUxSRUw7Ci0gICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VC
SUNfU01PT1RIX0FCUzogICAgIHJldHVybiBWOENsYXNzSW5kZXg6OlNWR1BBVEhTRUdDVVJWRVRP
Q1VCSUNTTU9PVEhBQlM7Ci0gICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VC
SUNfU01PT1RIX1JFTDogICAgIHJldHVybiBWOENsYXNzSW5kZXg6OlNWR1BBVEhTRUdDVVJWRVRP
Q1VCSUNTTU9PVEhSRUw7Ci0gICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fUVVB
RFJBVElDX1NNT09USF9BQlM6IHJldHVybiBWOENsYXNzSW5kZXg6OlNWR1BBVEhTRUdDVVJWRVRP
UVVBRFJBVElDU01PT1RIQUJTOwotICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRP
X1FVQURSQVRJQ19TTU9PVEhfUkVMOiByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHQ1VS
VkVUT1FVQURSQVRJQ1NNT09USFJFTDsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9D
TEFTU19JTkRFWDsKLSAgICB9Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRTVkdFbGVtZW50SW5zdGFuY2VUb1Y4T2JqZWN0KFNWR0VsZW1lbnRJbnN0YW5j
ZSogaW5zdGFuY2UpCi17Ci0gICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIHY4OjpO
dWxsKCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGV4aXN0aW5nSW5zdGFuY2UgPSBn
ZXRET01TVkdFbGVtZW50SW5zdGFuY2VNYXAoKS5nZXQoaW5zdGFuY2UpOwotICAgIGlmICghZXhp
c3RpbmdJbnN0YW5jZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBleGlzdGluZ0luc3RhbmNl
OwotCi0gICAgaW5zdGFuY2UtPnJlZigpOwotCi0gICAgLy8gSW5zdGFudGlhdGUgdGhlIFY4IG9i
amVjdCBhbmQgcmVtZW1iZXIgaXQKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9
IGluc3RhbnRpYXRlVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdFTEVNRU5USU5TVEFOQ0UsIFY4
Q2xhc3NJbmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFLCBpbnN0YW5jZSk7Ci0gICAgaWYgKCFyZXN1
bHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBET00gU1ZHIGVsZW1l
bnQgbWFwIGlmIHRoZSByZXN1bHQgaXMgbm9uLWVtcHR5LgotICAgICAgICBnZXRET01TVkdFbGVt
ZW50SW5zdGFuY2VNYXAoKS5zZXQoaW5zdGFuY2UsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcocmVzdWx0KSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRTVkdPYmplY3RXaXRoQ29udGV4dFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIG9iamVjdCkK
LXsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiByZXN1bHQgPSBnZXRET01TVkdPYmplY3RXaXRoQ29u
dGV4dE1hcCgpLmdldChvYmplY3QpOwotICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFNwZWNpYWwgY2FzZTogU1ZHUGF0aFNlZ3MgbmVl
ZCB0byBiZSBkb3duY2FzdCB0byB0aGVpciByZWFsIHR5cGUKLSAgICBpZiAodHlwZSA9PSBWOENs
YXNzSW5kZXg6OlNWR1BBVEhTRUcpCi0gICAgICAgIHR5cGUgPSBkb3duY2FzdFNWR1BhdGhTZWco
b2JqZWN0KTsKLQotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OE9iamVjdCA9IGluc3RhbnRp
YXRlVjhPYmplY3QodHlwZSwgdHlwZSwgb2JqZWN0KTsKLSAgICBpZiAoIXY4T2JqZWN0LklzRW1w
dHkoKSkgewotICAgICAgICByZXN1bHQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3
KHY4T2JqZWN0KTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShU
WVBFLCBOQU1FKSAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogc3RhdGlj
X2Nhc3Q8TkFNRSo+KG9iamVjdCktPnJlZigpOyBicmVhazsKLSAgICAgICAgU1ZHX09CSkVDVF9U
WVBFUyhNQUtFX0NBU0UpCi0jdW5kZWYgTUFLRV9DQVNFCi0jZGVmaW5lIE1BS0VfQ0FTRShUWVBF
LCBOQU1FKSAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogICAgXAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjxOQU1FPio+KG9iamVjdCkt
PnJlZigpOyBicmVhazsKLSAgICAgICAgU1ZHX1BPRF9OQVRJVkVfVFlQRVMoTUFLRV9DQVNFKQot
I3VuZGVmIE1BS0VfQ0FTRQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRl
eHRNYXAoKS5zZXQob2JqZWN0LCByZXN1bHQpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIHZv
aWQgVjhET01XcmFwcGVyOjpzZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LApAQCAtMzI0LDE4OCArMjM2LDYg
QEAKICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KHR5cGUsIGNvbnRleHQpOwog
fQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCkKLXsKLSAgICBB
U1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElTVEVORVIpOwotICAgIEFTU0VSVCh0
eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRUQVJHRVQpOwotICAgIEFTU0VSVCh0eXBlICE9IFY4
Q2xhc3NJbmRleDo6RVZFTlQpOwotCi0gICAgLy8gVGhlc2Ugb2JqZWN0cyBjYW4gYmUgY29uc3Ry
dWN0ZWQgdW5kZXIgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LiAgVGhleSBuZWVkIHNwZWNp
YWwKLSAgICAvLyBoYW5kbGluZywgc2luY2UgaWYgd2UgcHJvY2VlZCBiZWxvdyBWOFByb3h5Ojpy
ZXRyaWV2ZSgpIHdpbGwgZ2V0IGNhbGxlZCBhbmQgd2lsbCBjcmFzaC4KLSAgICAvLyBUT0RPKHVr
YWkpOiB3ZWJzb2NrZXQ/Ci0gICAgaWYgKCh0eXBlID09IFY4Q2xhc3NJbmRleDo6RE9NQ09SRUVY
Q0VQVElPTgotICAgICAgICAgfHwgdHlwZSA9PSBWOENsYXNzSW5kZXg6OlJBTkdFRVhDRVBUSU9O
Ci0gICAgICAgICB8fCB0eXBlID09IFY4Q2xhc3NJbmRleDo6RVZFTlRFWENFUFRJT04KLSAgICAg
ICAgIHx8IHR5cGUgPT0gVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVEVYQ0VQVElPTgotICAg
ICAgICAgfHwgdHlwZSA9PSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKQotICAgICAgICAmJiBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCkpIHsKLSAgICAgICAgcmV0dXJu
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QodHlwZSwgaW1w
bCk7Ci0gICAgfQotCi0gICAgYm9vbCBpc0FjdGl2ZURvbU9iamVjdCA9IGZhbHNlOwotICAgIHN3
aXRjaCAodHlwZSkgewotI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgY2FzZSBWOENsYXNz
SW5kZXg6OlRZUEU6Ci0gICAgICAgIERPTV9OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKLSNpZiBFTkFC
TEUoU1ZHKQotICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIGNvbnZlcnROb2RlVG9WOE9iamVjdChzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCkp
OwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDU1NWQUxVRToKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnRDU1NWYWx1ZVRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8Q1NTVmFsdWUqPihpbXBsKSk7Ci0gICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkNTU1JVTEU6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0Q1NTUnVs
ZVRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KGltcGwpKTsKLSAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6U1RZTEVTSEVFVDoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRTdHlsZVNoZWV0VG9W
OE9iamVjdChzdGF0aWNfY2FzdDxTdHlsZVNoZWV0Kj4oaW1wbCkpOwotICAgIGNhc2UgVjhDbGFz
c0luZGV4OjpET01XSU5ET1c6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0V2luZG93VG9WOE9iamVj
dChzdGF0aWNfY2FzdDxET01XaW5kb3cqPihpbXBsKSk7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6
Ok5BTUVETk9ERU1BUDoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnROYW1lZE5vZGVNYXBUb1Y4T2Jq
ZWN0KHN0YXRpY19jYXN0PE5hbWVkTm9kZU1hcCo+KGltcGwpKTsKLSNpZiBFTkFCTEUoU1ZHKQot
ICAgICAgICBTVkdfTk9OTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0gICAgICAgIGlmICh0eXBlID09
IFY4Q2xhc3NJbmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFKQotICAgICAgICAgICAgcmV0dXJuIGNv
bnZlcnRTVkdFbGVtZW50SW5zdGFuY2VUb1Y4T2JqZWN0KHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJ
bnN0YW5jZSo+KGltcGwpKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRTVkdPYmplY3RXaXRoQ29u
dGV4dFRvVjhPYmplY3QodHlwZSwgaW1wbCk7Ci0jZW5kaWYKLQotICAgICAgICBBQ1RJVkVfRE9N
X09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCi0gICAgICAgIGlzQWN0aXZlRG9tT2JqZWN0ID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gIH0KLQot
I3VuZGVmIE1BS0VfQ0FTRQotCi0gICAgaWYgKCFpbXBsKQotICAgICAgICByZXR1cm4gdjg6Ok51
bGwoKTsKLQotICAgIC8vIE5vbiBET00gbm9kZQotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHJlc3VsdCA9IGlzQWN0aXZlRG9tT2JqZWN0ID8gZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCku
Z2V0KGltcGwpIDogZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOwotICAgIGlmIChyZXN1bHQu
SXNFbXB0eSgpKSB7Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICAgICAgaWYgKHR5cGUgPT0g
VjhDbGFzc0luZGV4OjpXRUJHTEFSUkFZICYmIGltcGwpIHsKLSAgICAgICAgICAgIC8vIERldGVy
bWluZSB3aGljaCBzdWJjbGFzcyB3ZSBhcmUgd3JhcHBpbmcuCi0gICAgICAgICAgICBXZWJHTEFy
cmF5KiBhcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xBcnJheSo+KGltcGwpOwotICAgICAg
ICAgICAgaWYgKGFycmF5LT5pc0J5dGVBcnJheSgpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBW
OENsYXNzSW5kZXg6OldFQkdMQllURUFSUkFZOwotICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXkt
PmlzRmxvYXRBcnJheSgpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldF
QkdMRkxPQVRBUlJBWTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFycmF5LT5pc0ludEFycmF5KCkp
Ci0gICAgICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCR0xJTlRBUlJBWTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGFycmF5LT5pc1Nob3J0QXJyYXkoKSkKLSAgICAgICAgICAgICAg
ICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJHTFNIT1JUQVJSQVk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChhcnJheS0+aXNVbnNpZ25lZEJ5dGVBcnJheSgpKQotICAgICAgICAgICAgICAgIHR5cGUg
PSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChhcnJheS0+aXNVbnNpZ25lZEludEFycmF5KCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9
IFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZOwotICAgICAgICAgICAgZWxzZSBp
ZiAoYXJyYXktPmlzVW5zaWduZWRTaG9ydEFycmF5KCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9
IFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRFNIT1JUQVJSQVk7Ci0gICAgICAgIH0KLSNlbmRp
ZgotCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OE9iamVjdCA9IGluc3RhbnRpYXRl
VjhPYmplY3QodHlwZSwgdHlwZSwgaW1wbCk7Ci0gICAgICAgIGlmICghdjhPYmplY3QuSXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAvLyBHbyB0aHJvdWdoIGJpZyBzd2l0Y2ggc3RhdGVtZW50LCBp
dCBoYXMgc29tZSBkdXBsaWNhdGlvbnMKLSAgICAgICAgICAgIC8vIHRoYXQgd2VyZSBoYW5kbGVk
IGJ5IGNvZGUgYWJvdmUgKHN1Y2ggYXMgQ1NTVkFMVUUsIENTU1JVTEUsIGV0YykuCi0gICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpIFwKLSAg
ICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOiBzdGF0aWNfY2FzdDxOQU1FKj4oaW1w
bCktPnJlZigpOyBicmVhazsKLSAgICAgICAgICAgICAgICBET01fT0JKRUNUX1RZUEVTKE1BS0Vf
Q0FTRSkKLSN1bmRlZiBNQUtFX0NBU0UKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXN1bHQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHY4T2JqZWN0KTsKLSAgICAg
ICAgICAgIGlmIChpc0FjdGl2ZURvbU9iamVjdCkKLSAgICAgICAgICAgICAgICBzZXRKU1dyYXBw
ZXJGb3JBY3RpdmVET01PYmplY3QoaW1wbCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgcmVzdWx0KTsKLQot
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpDQU5WQVNQSVhFTEFSUkFZKSB7
Ci0gICAgICAgICAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzID0gcmVpbnRlcnByZXRf
Y2FzdDxDYW52YXNQaXhlbEFycmF5Kj4oaW1wbCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LT5T
ZXRJbmRleGVkUHJvcGVydGllc1RvUGl4ZWxEYXRhKHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIHBp
eGVscy0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgfQotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykK
LSAgICAgICAgICAgIC8vIFNldCB1cCBXZWJHTEFycmF5IHN1YmNsYXNzZXMnIGFjY2Vzc2VzIHNp
bWlsYXJseS4KLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBW
OENsYXNzSW5kZXg6OldFQkdMQllURUFSUkFZOgotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5k
ZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVk6Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRl
eDo6V0VCR0xTSE9SVEFSUkFZOgotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdM
VU5TSUdORURTSE9SVEFSUkFZOgotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdM
SU5UQVJSQVk6Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElO
VEFSUkFZOgotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWTog
ewotICAgICAgICAgICAgICAgIFdlYkdMQXJyYXkqIGFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJHTEFycmF5Kj4oaW1wbCk7Ci0gICAgICAgICAgICAgICAgc2V0SW5kZXhlZFByb3BlcnRpZXNU
b0V4dGVybmFsQXJyYXkocmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXktPmJhc2VBZGRy
ZXNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJyYXktPmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBub24tbm9k
ZSBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBhCi0gICAgICAgICAgICAvLyBET01XaW5kb3cuIEJv
dGggU2FmYXJpIGFuZCBGRiBsZXQgdGhlIEpTIHdyYXBwZXJzIGZvciB0aGVzZQotICAgICAgICAg
ICAgLy8gb2JqZWN0cyBzdXJ2aXZlIEdDLiBUbyBtaW1pYyB0aGVpciBiZWhhdmlvciwgVjggY3Jl
YXRlcwotICAgICAgICAgICAgLy8gaGlkZGVuIHJlZmVyZW5jZXMgZnJvbSB0aGUgRE9NV2luZG93
IHRvIHRoZXNlIHdyYXBwZXIKLSAgICAgICAgICAgIC8vIG9iamVjdHMuIFRoZXNlIHJlZmVyZW5j
ZXMgZ2V0IGNsZWFyZWQgd2hlbiB0aGUgRE9NV2luZG93IGlzCi0gICAgICAgICAgICAvLyByZXVz
ZWQgYnkgYSBuZXcgcGFnZS4KLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBWOENsYXNzSW5kZXg6OkNPTlNPTEU6Ci0gICAgICAgICAgICAgICAgc2V0SGlkZGVu
V2luZG93UmVmZXJlbmNlKHN0YXRpY19jYXN0PENvbnNvbGUqPihpbXBsKS0+ZnJhbWUoKSwgVjhE
T01XaW5kb3c6OmNvbnNvbGVJbmRleCwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpISVNUT1JZOgotICAgICAgICAgICAgICAg
IHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxIaXN0b3J5Kj4oaW1wbCktPmZy
YW1lKCksIFY4RE9NV2luZG93OjpoaXN0b3J5SW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6TkFWSUdBVE9SOgotICAg
ICAgICAgICAgICAgIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxOYXZpZ2F0
b3IqPihpbXBsKS0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Om5hdmlnYXRvckluZGV4LCByZXN1bHQp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
OlNDUkVFTjoKLSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uoc3RhdGlj
X2Nhc3Q8U2NyZWVuKj4oaW1wbCktPmZyYW1lKCksIFY4RE9NV2luZG93OjpzY3JlZW5JbmRleCwg
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVjhDbGFz
c0luZGV4OjpMT0NBVElPTjoKLSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVu
Y2Uoc3RhdGljX2Nhc3Q8TG9jYXRpb24qPihpbXBsKS0+ZnJhbWUoKSwgVjhET01XaW5kb3c6Omxv
Y2F0aW9uSW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NU0VMRUNUSU9OOgotICAgICAgICAgICAgICAgIHNldEhp
ZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxET01TZWxlY3Rpb24qPihpbXBsKS0+ZnJh
bWUoKSwgVjhET01XaW5kb3c6OmRvbVNlbGVjdGlvbkluZGV4LCByZXN1bHQpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OkJBUklORk86IHsK
LSAgICAgICAgICAgICAgICBCYXJJbmZvKiBiYXJJbmZvID0gc3RhdGljX2Nhc3Q8QmFySW5mbyo+
KGltcGwpOwotICAgICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGJhckluZm8tPmZyYW1lKCk7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChiYXJJbmZvLT50eXBlKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIEJhckluZm86OkxvY2F0aW9uYmFyOgotICAgICAgICAgICAgICAgICAgICBzZXRI
aWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93Ojpsb2NhdGlvbmJhckluZGV4
LCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIEJhckluZm86Ok1lbnViYXI6Ci0gICAgICAgICAgICAgICAgICAgIHNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShmcmFtZSwgVjhET01XaW5kb3c6Om1lbnViYXJJbmRleCwgcmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpQ
ZXJzb25hbGJhcjoKLSAgICAgICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNl
KGZyYW1lLCBWOERPTVdpbmRvdzo6cGVyc29uYWxiYXJJbmRleCwgcmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpTY3JvbGxi
YXJzOgotICAgICAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUs
IFY4RE9NV2luZG93OjpzY3JvbGxiYXJzSW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQmFySW5mbzo6U3RhdHVzYmFyOgotICAg
ICAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2lu
ZG93OjpzdGF0dXNiYXJJbmRleCwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBCYXJJbmZvOjpUb29sYmFyOgotICAgICAgICAgICAgICAg
ICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoZnJhbWUsIFY4RE9NV2luZG93Ojp0b29sYmFy
SW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdm9pZCBWOERPTVdyYXBwZXI6OnNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSogZnJhbWUsIGNvbnN0IGludCBpbnRlcm5hbElu
ZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzT2JqZWN0KQogewogICAgIC8vIEdldCBET01X
aW5kb3cKQEAgLTU0OSwxMiArMjc5LDggQEAKICAgICByZXR1cm4gTm9kZUZpbHRlcjo6Y3JlYXRl
KGNvbmRpdGlvbik7CiB9CiAKLXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omlu
c3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSBkZXNjcmlwdG9yVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBl
LCB2b2lkKiBpbXBsKQordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIHZvaWQqIGltcGwpCiB7Ci0gICAgLy8gTWFrZSBhIHNwZWNpYWwgY2FzZSBmb3IgZG9j
dW1lbnQuYWxsCi0gICAgaWYgKGRlc2NyaXB0b3JUeXBlID09IFY4Q2xhc3NJbmRleDo6SFRNTENP
TExFQ1RJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihpbXBsKS0+dHlwZSgpID09
IERvY0FsbCkKLSAgICAgICAgZGVzY3JpcHRvclR5cGUgPSBWOENsYXNzSW5kZXg6OkhUTUxBTExD
T0xMRUNUSU9OOwotCiAgICAgaWYgKFY4SXNvbGF0ZWRDb250ZXh0OjpnZXRFbnRlcmVkKCkpIHsK
ICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgd3JhcHBlciBjYWNoZSBm
b3IgaXNvbGF0ZWQgd29ybGRzLgogICAgICAgICBwcm94eSA9IDA7CkBAIC01NjcsMTQgKzI5Mywx
NCBAQAogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZTsKICAgICBpZiAocHJveHkp
CiAgICAgICAgIC8vIEZJWE1FOiBGaXggdGhpcyB0byB3b3JrIHByb3Blcmx5IHdpdGggaXNvbGF0
ZWQgd29ybGRzIChzZWUgYWJvdmUpLgotICAgICAgICBpbnN0YW5jZSA9IHByb3h5LT53aW5kb3dT
aGVsbCgpLT5jcmVhdGVXcmFwcGVyRnJvbUNhY2hlKGRlc2NyaXB0b3JUeXBlKTsKKyAgICAgICAg
aW5zdGFuY2UgPSBwcm94eS0+d2luZG93U2hlbGwoKS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZSh0
eXBlKTsKICAgICBlbHNlIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rp
b24gPSBnZXRUZW1wbGF0ZShkZXNjcmlwdG9yVHlwZSktPkdldEZ1bmN0aW9uKCk7CisgICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gZ2V0VGVtcGxhdGUodHlwZSktPkdl
dEZ1bmN0aW9uKCk7CiAgICAgICAgIGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3Rh
bmNlKGZ1bmN0aW9uKTsKICAgICB9CiAgICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0
aW9ucy4KLSAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0lu
dChjcHRyVHlwZSksIGltcGwpOworICAgICAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENs
YXNzSW5kZXg6OlRvSW50KHR5cGUpLCBpbXBsKTsKICAgICB9CiAgICAgcmV0dXJuIGluc3RhbmNl
OwogfQpAQCAtNjAyLDEzICszMjgsNiBAQAogfQogI2VuZGlmCiAKLWJvb2wgVjhET01XcmFwcGVy
Ojppc0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi17Ci0gICAg
Ly8gQWxsIGtpbmRzIG9mIGV2ZW50cyB1c2UgRVZFTlQgYXMgZG9tIHR5cGUgaW4gSlMgd3JhcHBl
cnMuCi0gICAgLy8gU2VlIEV2ZW50VG9WOE9iamVjdAotICAgIHJldHVybiBpc1dyYXBwZXJPZlR5
cGUodmFsdWUsIFY4Q2xhc3NJbmRleDo6RVZFTlQpOwotfQotCiBib29sIFY4RE9NV3JhcHBlcjo6
aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIGNsYXNzVHlwZSkKIHsKICAgICBpZiAodmFsdWUuSXNFbXB0eSgpIHx8
ICF2YWx1ZS0+SXNPYmplY3QoKSkKQEAgLTYzMCwzNTkgKzM0OSw2IEBACiAgICAgcmV0dXJuIFY4
Q2xhc3NJbmRleDo6RnJvbUludCh0eXBlLT5JbnQzMlZhbHVlKCkpID09IGNsYXNzVHlwZTsKIH0K
IAotI2lmIEVOQUJMRShWSURFTykKLSNkZWZpbmUgRk9SX0VBQ0hfVklERU9fVEFHKG1hY3JvKSAg
ICAgICAgICAgICAgICAgIFwKLSAgICBtYWNybyhhdWRpbywgQVVESU8pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBtYWNybyhzb3VyY2UsIFNPVVJDRSkgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBtYWNybyh2aWRlbywgVklERU8pCi0jZWxzZQotI2RlZmluZSBGT1Jf
RUFDSF9WSURFT19UQUcobWFjcm8pCi0jZW5kaWYKLQotI2lmIEVOQUJMRShEQVRBR1JJRCkKLSNk
ZWZpbmUgRk9SX0VBQ0hfREFUQUdSSURfVEFHKG1hY3JvKSAgICAgICAgICAgICAgIFwKLSAgICBt
YWNybyhkYXRhZ3JpZCwgREFUQUdSSUQpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKGRjZWxsLCBEQVRBR1JJRENFTEwpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFj
cm8oZGNvbCwgREFUQUdSSURDT0wpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWNy
byhkcm93LCBEQVRBR1JJRFJPVykKLSNlbHNlCi0jZGVmaW5lIEZPUl9FQUNIX0RBVEFHUklEX1RB
RyhtYWNybykKLSNlbmRpZgotCi0jZGVmaW5lIEZPUl9FQUNIX1RBRyhtYWNybykgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgRk9SX0VBQ0hfREFUQUdSSURfVEFHKG1hY3JvKSAgICAgICAg
ICAgICAgICAgICBcCi0gICAgbWFjcm8oYSwgQU5DSE9SKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgbWFjcm8oYXBwbGV0LCBBUFBMRVQpICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFjcm8oYXJlYSwgQVJFQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgbWFjcm8oYmFzZSwgQkFTRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgbWFjcm8oYmFzZWZvbnQsIEJBU0VGT05UKSAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgbWFjcm8oYmxvY2txdW90ZSwgQkxPQ0tRVU9URSkgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFjcm8oYm9keSwgQk9EWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFj
cm8oYnIsIEJSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8o
YnV0dG9uLCBCVVRUT04pICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oY2Fw
dGlvbiwgVEFCTEVDQVBUSU9OKSAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oY29sLCBU
QUJMRUNPTCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oY29sZ3JvdXAs
IFRBQkxFQ09MKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oZGVsLCBNT0QpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oY2FudmFzLCBDQU5WQVMp
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oZGlyLCBESVJFQ1RPUlkpICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oZGl2LCBESVYpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oZGwsIERMSVNUKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oZW1iZWQsIEVNQkVEKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oZmllbGRzZXQsIEZJRUxEU0VUKSAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgbWFjcm8oZm9udCwgRk9OVCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgbWFjcm8oZm9ybSwgRk9STSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFjcm8oZnJhbWUsIEZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgbWFjcm8oZnJhbWVzZXQsIEZSQU1FU0VUKSAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgbWFjcm8oaDEsIEhFQURJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgbWFjcm8oaDIsIEhFQURJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFjcm8oaDMsIEhFQURJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFj
cm8oaDQsIEhFQURJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8o
aDUsIEhFQURJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaDYs
IEhFQURJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaGVhZCwg
SEVBRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaHIsIEhSKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaHRtbCwgSFRNTCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaW1nLCBJTUFHRSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaWZyYW1lLCBJRlJBTUUpICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaW1hZ2UsIElNQUdFKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaW5wdXQsIElOUFVUKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaW5zLCBNT0QpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oaXNpbmRleCwgSVNJTkRFWCkgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgbWFjcm8oa2V5Z2VuLCBTRUxFQ1QpICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgbWFjcm8obGFiZWwsIExBQkVMKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFjcm8obGVnZW5kLCBMRUdFTkQpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgbWFjcm8obGksIExJKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgbWFjcm8obGluaywgTElOSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgbWFjcm8obGlzdGluZywgUFJFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFjcm8obWFwLCBNQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFj
cm8obWFycXVlZSwgTUFSUVVFRSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8o
bWVudSwgTUVOVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8obWV0
YSwgTUVUQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ob2JqZWN0
LCBPQkpFQ1QpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ob2wsIE9MSVNU
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ob3B0Z3JvdXAsIE9Q
VEdST1VQKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ob3B0aW9uLCBPUFRJT04p
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ocCwgUEFSQUdSQVBIKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ocGFyYW0sIFBBUkFNKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ocHJlLCBQUkUpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8ocSwgUVVPVEUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oc2NyaXB0LCBTQ1JJUFQpICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgbWFjcm8oc2VsZWN0LCBTRUxFQ1QpICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgbWFjcm8oc3R5bGUsIFNUWUxFKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbWFjcm8odGFibGUsIFRBQkxFKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgbWFjcm8odGhlYWQsIFRBQkxFU0VDVElPTikgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgbWFjcm8odGJvZHksIFRBQkxFU0VDVElPTikgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgbWFjcm8odGZvb3QsIFRBQkxFU0VDVElPTikgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bWFjcm8odGQsIFRBQkxFQ0VMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFj
cm8odGgsIFRBQkxFQ0VMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8o
dHIsIFRBQkxFUk9XKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8odGV4
dGFyZWEsIFRFWFRBUkVBKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8odGl0bGUs
IFRJVExFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8odWwsIFVMSVNU
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFjcm8oeG1wLCBQUkUpCi0K
LVY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdyYXBwZXI6Omh0bWxFbGVtZW50VHlw
ZShIVE1MRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGU+IFdyYXBwZXJUeXBlTWFwOwotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoV3JhcHBlclR5cGVNYXAsIHdyYXBwZXJUeXBlTWFwLCAoKSk7Ci0gICAgaWYg
KHdyYXBwZXJUeXBlTWFwLmlzRW1wdHkoKSkgewotI2RlZmluZSBBRERfVE9fSEFTSF9NQVAodGFn
LCBuYW1lKSBcCi0gICAgICAgIHdyYXBwZXJUeXBlTWFwLnNldCgjdGFnLCBWOENsYXNzSW5kZXg6
OkhUTUwjI25hbWUjI0VMRU1FTlQpOwotICAgICAgICBGT1JfRUFDSF9UQUcoQUREX1RPX0hBU0hf
TUFQKQotI2lmIEVOQUJMRShWSURFTykKLSAgICAgICAgaWYgKE1lZGlhUGxheWVyOjppc0F2YWls
YWJsZSgpKSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9WSURFT19UQUcoQUREX1RPX0hBU0hfTUFQ
KQotICAgICAgICB9Ci0jZW5kaWYKLSN1bmRlZiBBRERfVE9fSEFTSF9NQVAKLSAgICB9Ci0KLSAg
ICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IHdyYXBwZXJUeXBlTWFwLmdldChl
bGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIGlmICghdHlwZSkKLSAgICAgICAgcmV0
dXJuIFY4Q2xhc3NJbmRleDo6SFRNTEVMRU1FTlQ7Ci0gICAgcmV0dXJuIHR5cGU7Ci19Ci0jdW5k
ZWYgRk9SX0VBQ0hfVEFHCi0KLSNpZiBFTkFCTEUoU1ZHKQotCi0jaWYgRU5BQkxFKFNWR19BTklN
QVRJT04pCi0jZGVmaW5lIEZPUl9FQUNIX0FOSU1BVElPTl9UQUcobWFjcm8pIFwKLSAgICBtYWNy
byhhbmltYXRlQ29sb3IsIEFOSU1BVEVDT0xPUikgXAotICAgIG1hY3JvKGFuaW1hdGUsIEFOSU1B
VEUpIFwKLSAgICBtYWNybyhhbmltYXRlVHJhbnNmb3JtLCBBTklNQVRFVFJBTlNGT1JNKSBcCi0g
ICAgbWFjcm8oc2V0LCBTRVQpCi0jZWxzZQotI2RlZmluZSBGT1JfRUFDSF9BTklNQVRJT05fVEFH
KG1hY3JvKQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNk
ZWZpbmUgRk9SX0VBQ0hfRklMVEVSU19UQUcobWFjcm8pIFwKLSAgICBtYWNybyhmZUJsZW5kLCBG
RUJMRU5EKSBcCi0gICAgbWFjcm8oZmVDb2xvck1hdHJpeCwgRkVDT0xPUk1BVFJJWCkgXAotICAg
IG1hY3JvKGZlQ29tcG9uZW50VHJhbnNmZXIsIEZFQ09NUE9ORU5UVFJBTlNGRVIpIFwKLSAgICBt
YWNybyhmZUNvbXBvc2l0ZSwgRkVDT01QT1NJVEUpIFwKLSAgICBtYWNybyhmZURpZmZ1c2VMaWdo
dGluZywgRkVESUZGVVNFTElHSFRJTkcpIFwKLSAgICBtYWNybyhmZURpc3BsYWNlbWVudE1hcCwg
RkVESVNQTEFDRU1FTlRNQVApIFwKLSAgICBtYWNybyhmZURpc3RhbnRMaWdodCwgRkVESVNUQU5U
TElHSFQpIFwKLSAgICBtYWNybyhmZUZsb29kLCBGRUZMT09EKSBcCi0gICAgbWFjcm8oZmVGdW5j
QSwgRkVGVU5DQSkgXAotICAgIG1hY3JvKGZlRnVuY0IsIEZFRlVOQ0IpIFwKLSAgICBtYWNybyhm
ZUZ1bmNHLCBGRUZVTkNHKSBcCi0gICAgbWFjcm8oZmVGdW5jUiwgRkVGVU5DUikgXAotICAgIG1h
Y3JvKGZlR2F1c3NpYW5CbHVyLCBGRUdBVVNTSUFOQkxVUikgXAotICAgIG1hY3JvKGZlSW1hZ2Us
IEZFSU1BR0UpIFwKLSAgICBtYWNybyhmZU1lcmdlLCBGRU1FUkdFKSBcCi0gICAgbWFjcm8oZmVN
ZXJnZU5vZGUsIEZFTUVSR0VOT0RFKSBcCi0gICAgbWFjcm8oZmVNb3JwaG9sb2d5LCBGRU1PUlBI
T0xPR1kpIFwKLSAgICBtYWNybyhmZU9mZnNldCwgRkVPRkZTRVQpIFwKLSAgICBtYWNybyhmZVBv
aW50TGlnaHQsIEZFUE9JTlRMSUdIVCkgXAotICAgIG1hY3JvKGZlU3BlY3VsYXJMaWdodGluZywg
RkVTUEVDVUxBUkxJR0hUSU5HKSBcCi0gICAgbWFjcm8oZmVTcG90TGlnaHQsIEZFU1BPVExJR0hU
KSBcCi0gICAgbWFjcm8oZmVUaWxlLCBGRVRJTEUpIFwKLSAgICBtYWNybyhmZVR1cmJ1bGVuY2Us
IEZFVFVSQlVMRU5DRSkgXAotICAgIG1hY3JvKGZpbHRlciwgRklMVEVSKQotI2Vsc2UKLSNkZWZp
bmUgRk9SX0VBQ0hfRklMVEVSU19UQUcobWFjcm8pCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0jZGVmaW5lIEZPUl9FQUNIX0ZPTlRTX1RBRyhtYWNybykgXAotICAgIG1hY3JvKGZv
bnQtZmFjZSwgRk9OVEZBQ0UpIFwKLSAgICBtYWNybyhmb250LWZhY2UtZm9ybWF0LCBGT05URkFD
RUZPUk1BVCkgXAotICAgIG1hY3JvKGZvbnQtZmFjZS1uYW1lLCBGT05URkFDRU5BTUUpIFwKLSAg
ICBtYWNybyhmb250LWZhY2Utc3JjLCBGT05URkFDRVNSQykgXAotICAgIG1hY3JvKGZvbnQtZmFj
ZS11cmksIEZPTlRGQUNFVVJJKQotI2Vsc2UKLSNkZWZpbmUgRk9SX0VBQ0hfRk9OVFNfVEFHKG1h
cmNvKQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQotI2RlZmluZSBG
T1JfRUFDSF9GT1JFSUdOX09CSkVDVF9UQUcobWFjcm8pIFwKLSAgICBtYWNybyhmb3JlaWduT2Jq
ZWN0LCBGT1JFSUdOT0JKRUNUKQotI2Vsc2UKLSNkZWZpbmUgRk9SX0VBQ0hfRk9SRUlHTl9PQkpF
Q1RfVEFHKG1hY3JvKQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHX1VTRSkKLSNkZWZpbmUgRk9S
X0VBQ0hfVVNFX1RBRyhtYWNybykgXAotICAgIG1hY3JvKHVzZSwgVVNFKQotI2Vsc2UKLSNkZWZp
bmUgRk9SX0VBQ0hfVVNFX1RBRyhtYWNybykKLSNlbmRpZgotCi0jZGVmaW5lIEZPUl9FQUNIX1RB
RyhtYWNybykgXAotICAgIEZPUl9FQUNIX0FOSU1BVElPTl9UQUcobWFjcm8pIFwKLSAgICBGT1Jf
RUFDSF9GSUxURVJTX1RBRyhtYWNybykgXAotICAgIEZPUl9FQUNIX0ZPTlRTX1RBRyhtYWNybykg
XAotICAgIEZPUl9FQUNIX0ZPUkVJR05fT0JKRUNUX1RBRyhtYWNybykgXAotICAgIEZPUl9FQUNI
X1VTRV9UQUcobWFjcm8pIFwKLSAgICBtYWNybyhhLCBBKSBcCi0gICAgbWFjcm8oYWx0R2x5cGgs
IEFMVEdMWVBIKSBcCi0gICAgbWFjcm8oY2lyY2xlLCBDSVJDTEUpIFwKLSAgICBtYWNybyhjbGlw
UGF0aCwgQ0xJUFBBVEgpIFwKLSAgICBtYWNybyhjdXJzb3IsIENVUlNPUikgXAotICAgIG1hY3Jv
KGRlZnMsIERFRlMpIFwKLSAgICBtYWNybyhkZXNjLCBERVNDKSBcCi0gICAgbWFjcm8oZWxsaXBz
ZSwgRUxMSVBTRSkgXAotICAgIG1hY3JvKGcsIEcpIFwKLSAgICBtYWNybyhnbHlwaCwgR0xZUEgp
IFwKLSAgICBtYWNybyhpbWFnZSwgSU1BR0UpIFwKLSAgICBtYWNybyhsaW5lYXJHcmFkaWVudCwg
TElORUFSR1JBRElFTlQpIFwKLSAgICBtYWNybyhsaW5lLCBMSU5FKSBcCi0gICAgbWFjcm8obWFy
a2VyLCBNQVJLRVIpIFwKLSAgICBtYWNybyhtYXNrLCBNQVNLKSBcCi0gICAgbWFjcm8obWV0YWRh
dGEsIE1FVEFEQVRBKSBcCi0gICAgbWFjcm8ocGF0aCwgUEFUSCkgXAotICAgIG1hY3JvKHBhdHRl
cm4sIFBBVFRFUk4pIFwKLSAgICBtYWNybyhwb2x5bGluZSwgUE9MWUxJTkUpIFwKLSAgICBtYWNy
byhwb2x5Z29uLCBQT0xZR09OKSBcCi0gICAgbWFjcm8ocmFkaWFsR3JhZGllbnQsIFJBRElBTEdS
QURJRU5UKSBcCi0gICAgbWFjcm8ocmVjdCwgUkVDVCkgXAotICAgIG1hY3JvKHNjcmlwdCwgU0NS
SVBUKSBcCi0gICAgbWFjcm8oc3RvcCwgU1RPUCkgXAotICAgIG1hY3JvKHN0eWxlLCBTVFlMRSkg
XAotICAgIG1hY3JvKHN2ZywgU1ZHKSBcCi0gICAgbWFjcm8oc3dpdGNoLCBTV0lUQ0gpIFwKLSAg
ICBtYWNybyhzeW1ib2wsIFNZTUJPTCkgXAotICAgIG1hY3JvKHRleHQsIFRFWFQpIFwKLSAgICBt
YWNybyh0ZXh0UGF0aCwgVEVYVFBBVEgpIFwKLSAgICBtYWNybyh0aXRsZSwgVElUTEUpIFwKLSAg
ICBtYWNybyh0cmVmLCBUUkVGKSBcCi0gICAgbWFjcm8odHNwYW4sIFRTUEFOKSBcCi0gICAgbWFj
cm8odmlldywgVklFVykgXAotICAgIC8vIGVuZCBvZiBtYWNybwotCi1WOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUgVjhET01XcmFwcGVyOjpzdmdFbGVtZW50VHlwZShTVkdFbGVtZW50KiBlbGVt
ZW50KQotewotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZT4gV3JhcHBlclR5cGVNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChXcmFwcGVy
VHlwZU1hcCwgd3JhcHBlclR5cGVNYXAsICgpKTsKLSAgICBpZiAod3JhcHBlclR5cGVNYXAuaXNF
bXB0eSgpKSB7Ci0jZGVmaW5lIEFERF9UT19IQVNIX01BUCh0YWcsIG5hbWUpIFwKLSAgICAgICAg
d3JhcHBlclR5cGVNYXAuc2V0KCN0YWcsIFY4Q2xhc3NJbmRleDo6U1ZHIyNuYW1lIyNFTEVNRU5U
KTsKLSAgICAgICAgRk9SX0VBQ0hfVEFHKEFERF9UT19IQVNIX01BUCkKLSN1bmRlZiBBRERfVE9f
SEFTSF9NQVAKLSAgICB9Ci0KLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9
IHdyYXBwZXJUeXBlTWFwLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIGlm
ICghdHlwZSkKLSAgICAgICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6U1ZHRUxFTUVOVDsKLSAgICBy
ZXR1cm4gdHlwZTsKLX0KLSN1bmRlZiBGT1JfRUFDSF9UQUcKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpCi0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRv
VjhPYmplY3QoRXZlbnQqIGV2ZW50KQotewotICAgIGlmICghZXZlbnQpCi0gICAgICAgIHJldHVy
biB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0
RE9NT2JqZWN0TWFwKCkuZ2V0KGV2ZW50KTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLQotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlID0gVjhDbGFzc0luZGV4OjpFVkVOVDsKLQotICAgIGlmIChldmVudC0+aXNVSUV2ZW50
KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OktFWUJPQVJERVZFTlQ7Ci0gICAgICAgIGVsc2UgaWYgKGV2
ZW50LT5pc1RleHRFdmVudCgpKQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6VEVY
VEVWRU5UOwotICAgICAgICBlbHNlIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAg
ICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpNT1VTRUVWRU5UOwotICAgICAgICBlbHNlIGlmIChl
dmVudC0+aXNXaGVlbEV2ZW50KCkpCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpX
SEVFTEVWRU5UOwotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc1NW
R1pvb21FdmVudCgpKQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6U1ZHWk9PTUVW
RU5UOwotI2VuZGlmCi0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc0NvbXBvc2l0aW9uRXZlbnQo
KSkKLSAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNPTVBPU0lUSU9ORVZFTlQ7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OlVJRVZFTlQ7Ci0g
ICAgfSBlbHNlIGlmIChldmVudC0+aXNNdXRhdGlvbkV2ZW50KCkpCi0gICAgICAgIHR5cGUgPSBW
OENsYXNzSW5kZXg6Ok1VVEFUSU9ORVZFTlQ7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZs
b3dFdmVudCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpPVkVSRkxPV0VWRU5UOwot
ICAgIGVsc2UgaWYgKGV2ZW50LT5pc01lc3NhZ2VFdmVudCgpKQotICAgICAgICB0eXBlID0gVjhD
bGFzc0luZGV4OjpNRVNTQUdFRVZFTlQ7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzUGFnZVRyYW5z
aXRpb25FdmVudCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpQQUdFVFJBTlNJVElP
TkVWRU5UOwotICAgIGVsc2UgaWYgKGV2ZW50LT5pc1BvcFN0YXRlRXZlbnQoKSkKLSAgICAgICAg
dHlwZSA9IFY4Q2xhc3NJbmRleDo6UE9QU1RBVEVFVkVOVDsKLSAgICBlbHNlIGlmIChldmVudC0+
aXNQcm9ncmVzc0V2ZW50KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5pc1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudCgpKQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6WE1MSFRU
UFJFUVVFU1RQUk9HUkVTU0VWRU5UOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0g
VjhDbGFzc0luZGV4OjpQUk9HUkVTU0VWRU5UOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzV2Vi
S2l0QW5pbWF0aW9uRXZlbnQoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCS0lU
QU5JTUFUSU9ORVZFTlQ7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNpdGlvbkV2
ZW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQktJVFRSQU5TSVRJT05FVkVO
VDsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBlbHNlIGlmIChldmVudC0+aXNFcnJvckV2ZW50
KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkVSUk9SRVZFTlQ7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgZWxzZSBpZiAoZXZlbnQtPmlzU3RvcmFnZUV2ZW50
KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OlNUT1JBR0VFVkVOVDsKLSNlbmRpZgot
ICAgIGVsc2UgaWYgKGV2ZW50LT5pc0JlZm9yZUxvYWRFdmVudCgpKQotICAgICAgICB0eXBlID0g
VjhDbGFzc0luZGV4OjpCRUZPUkVMT0FERVZFTlQ7Ci0KLQotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gcmVzdWx0ID0gaW5zdGFudGlhdGVWOE9iamVjdCh0eXBlLCBWOENsYXNzSW5kZXg6OkVW
RU5ULCBldmVudCk7Ci0gICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSW5z
dGFudGlhdGlvbiBmYWlsZWQuIEF2b2lkIHVwZGF0aW5nIHRoZSBET00gb2JqZWN0IG1hcCBhbmQK
LSAgICAgICAgLy8gcmV0dXJuIG51bGwgd2hpY2ggaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGNhbGxl
cnMgb2YgdGhpcyBmdW5jdGlvbgotICAgICAgICAvLyBpbiBjYXNlIHRoZSBldmVudCBpcyBOVUxM
LgotICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKLSAgICB9Ci0KLSAgICBldmVudC0+cmVmKCk7
IC8vIGZhc3QgcmVmCi0gICAgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGV2ZW50LCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIGNvbnN0IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBtYXBwaW5nW10g
PSB7Ci0gICAgVjhDbGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYLCAgICAvLyBOT05FCi0g
ICAgVjhDbGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYLCAgICAvLyBFTEVNRU5UX05PREUg
bmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQKLSAgICBWOENsYXNzSW5kZXg6OkFUVFIsICAgICAgICAg
ICAgICAgICAgIC8vIEFUVFJJQlVURV9OT0RFCi0gICAgVjhDbGFzc0luZGV4OjpURVhULCAgICAg
ICAgICAgICAgICAgICAvLyBURVhUX05PREUKLSAgICBWOENsYXNzSW5kZXg6OkNEQVRBU0VDVElP
TiwgICAgICAgICAgIC8vIENEQVRBX1NFQ1RJT05fTk9ERQotICAgIFY4Q2xhc3NJbmRleDo6RU5U
SVRZUkVGRVJFTkNFLCAgICAgICAgLy8gRU5USVRZX1JFRkVSRU5DRV9OT0RFCi0gICAgVjhDbGFz
c0luZGV4OjpFTlRJVFksICAgICAgICAgICAgICAgICAvLyBFTlRJVFlfTk9ERQotICAgIFY4Q2xh
c3NJbmRleDo6UFJPQ0VTU0lOR0lOU1RSVUNUSU9OLCAgLy8gUFJPQ0VTU0lOR19JTlNUUlVDVElP
Tl9OT0RFCi0gICAgVjhDbGFzc0luZGV4OjpDT01NRU5ULCAgICAgICAgICAgICAgICAvLyBDT01N
RU5UX05PREUKLSAgICBWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVgsICAgIC8vIERP
Q1VNRU5UX05PREUgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQKLSAgICBWOENsYXNzSW5kZXg6OkRP
Q1VNRU5UVFlQRSwgICAgICAgICAgIC8vIERPQ1VNRU5UX1RZUEVfTk9ERQotICAgIFY4Q2xhc3NJ
bmRleDo6RE9DVU1FTlRGUkFHTUVOVCwgICAgICAgLy8gRE9DVU1FTlRfRlJBR01FTlRfTk9ERQot
ICAgIFY4Q2xhc3NJbmRleDo6Tk9UQVRJT04sICAgICAgICAgICAgICAgLy8gTk9UQVRJT05fTk9E
RQotICAgIFY4Q2xhc3NJbmRleDo6Tk9ERSwgICAgICAgICAgICAgICAgICAgLy8gWFBBVEhfTkFN
RVNQQUNFX05PREUKLX07Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNv
bnZlcnREb2N1bWVudFRvVjhPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIC8vIEZp
bmQgYSBwcm94eSBmb3IgdGhpcyBub2RlLgotICAgIC8vCi0gICAgLy8gTm90ZSB0aGF0IGlmIHBy
b3h5IGlzIGZvdW5kLCB3ZSBtaWdodCBpbml0aWFsaXplIHRoZSBjb250ZXh0IHdoaWNoIGNhbgot
ICAgIC8vIGluc3RhbnRpYXRlIGEgZG9jdW1lbnQgd3JhcHBlci4gIFRoZXJlZm9yZSwgd2UgZ2V0
IHRoZSBwcm94eSBiZWZvcmUKLSAgICAvLyBjaGVja2luZyBpZiB0aGUgbm9kZSBhbHJlYWR5IGhh
cyBhIHdyYXBwZXIuCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShkb2N1
bWVudC0+ZnJhbWUoKSk7Ci0gICAgaWYgKHByb3h5KQotICAgICAgICBwcm94eS0+d2luZG93U2hl
bGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwotCi0gICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5v
ZGVNYXAgPSBnZXRET01Ob2RlTWFwKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gZG9tTm9kZU1hcC5nZXQoZG9jdW1lbnQpOwotICAgIGlmICh3cmFwcGVyLklzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChkb2N1bWVudCwgcHJv
eHksIGRvbU5vZGVNYXApOwotCi0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjpnZXRXcmFwcGVyKE5vZGUqIG5vZGUpCiB7CiAgICAg
QVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwpAQCAtOTk4LDEwMSArMzY0LDYgQEAKICAgICBy
ZXR1cm4gZG9tTm9kZU1hcC5nZXQobm9kZSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKiBub2RlKQotewotICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAgCi0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBnZXRXcmFwcGVyKG5vZGUpOwotICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAobm9kZSA9PSBkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnREb2N1bWVudFRvVjhPYmplY3QoZG9jdW1lbnQpOwotCi0gICAg
cmV0dXJuIGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChub2RlLCAwLCBnZXRET01Ob2RlTWFwKCkp
OwotfQotICAgIAotLy8gQ2FsbGVyIGNoZWNrcyBub2RlIGlzIG5vdCBudWxsLgotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUq
IG5vZGUsIFY4UHJveHkqIHByb3h5LCBET01Ob2RlTWFwcGluZyYgZG9tTm9kZU1hcCkKLXsKLSAg
ICBpZiAoIXByb3h5ICYmIG5vZGUtPmRvY3VtZW50KCkpCi0gICAgICAgIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7Ci0KLSAgICBib29sIGlzRG9j
dW1lbnQgPSBmYWxzZTsgLy8gZG9jdW1lbnQgdHlwZSBub2RlIGhhcyBzcGVjaWFsIGhhbmRsaW5n
Ci0gICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGU7Ci0KLSAgICBOb2RlOjpOb2Rl
VHlwZSBub2RlVHlwZSA9IG5vZGUtPm5vZGVUeXBlKCk7Ci0gICAgaWYgKG5vZGVUeXBlID09IE5v
ZGU6OkVMRU1FTlRfTk9ERSkgewotICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKQot
ICAgICAgICAgICAgdHlwZSA9IGh0bWxFbGVtZW50VHlwZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KG5vZGUpKTsKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBlbHNlIGlmIChub2RlLT5pc1NW
R0VsZW1lbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBzdmdFbGVtZW50VHlwZShzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4obm9kZSkpOwotI2VuZGlmCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OkVMRU1FTlQ7Ci0gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9
PSBOb2RlOjpET0NVTUVOVF9OT0RFKSB7Ci0gICAgICAgIGlzRG9jdW1lbnQgPSB0cnVlOwotICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG5vZGUpOwot
ICAgICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICB0eXBl
ID0gVjhDbGFzc0luZGV4OjpIVE1MRE9DVU1FTlQ7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAg
ZWxzZSBpZiAoZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBW
OENsYXNzSW5kZXg6OlNWR0RPQ1VNRU5UOwotI2VuZGlmCi0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkRPQ1VNRU5UOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVChub2RlVHlwZSA8IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKG1hcHBpbmcpL3NpemVv
ZihtYXBwaW5nWzBdKSkpOwotICAgICAgICB0eXBlID0gbWFwcGluZ1tub2RlVHlwZV07Ci0gICAg
ICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCk7Ci0g
ICAgfQotCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKLSAgICBpZiAocHJv
eHkpCi0gICAgICAgIGNvbnRleHQgPSBwcm94eS0+Y29udGV4dCgpOwotCi0gICAgLy8gRW50ZXIg
dGhlIG5vZGUncyBjb250ZXh0IGFuZCBjcmVhdGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0
LgotICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIGNvbnRleHQtPkVudGVyKCk7
Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5zdGFudGlhdGVWOE9iamVj
dChwcm94eSwgdHlwZSwgVjhDbGFzc0luZGV4OjpOT0RFLCBub2RlKTsKLQotICAgIC8vIEV4aXQg
dGhlIG5vZGUncyBjb250ZXh0IGlmIGl0IHdhcyBlbnRlcmVkLgotICAgIGlmICghY29udGV4dC5J
c0VtcHR5KCkpCi0gICAgICAgIGNvbnRleHQtPkV4aXQoKTsKLQotICAgIGlmIChyZXN1bHQuSXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbGVkIGl0J3MgaW1wb3J0
YW50IG5vdCB0byBhZGQgdGhlIHJlc3VsdAotICAgICAgICAvLyB0byB0aGUgRE9NIG5vZGUgbWFw
LiBJbnN0ZWFkIHdlIHJldHVybiBhbiBlbXB0eSBoYW5kbGUsIHdoaWNoCi0gICAgICAgIC8vIHNo
b3VsZCBhbHJlYWR5IGJlIGhhbmRsZWQgYnkgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGluIGNh
c2UKLSAgICAgICAgLy8gdGhlIG5vZGUgaXMgTlVMTC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICBub2RlLT5yZWYoKTsKLSAgICBkb21Ob2RlTWFwLnNldChub2RlLCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotCi0gICAgaWYgKGlzRG9jdW1l
bnQpIHsKLSAgICAgICAgaWYgKHByb3h5KQotICAgICAgICAgICAgcHJveHktPndpbmRvd1NoZWxs
KCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcihyZXN1bHQpOwotCi0gICAgICAgIGlmICh0eXBlID09
IFY4Q2xhc3NJbmRleDo6SFRNTERPQ1VNRU5UKSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgbWFy
a2VyIG9iamVjdCBhbmQgaW5zZXJ0IGl0IGluIHR3byBpbnRlcm5hbCBmaWVsZHMuCi0gICAgICAg
ICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRlbXBvcmFyeSBzaGFkb3dpbmcgb2YK
LSAgICAgICAgICAgIC8vIGRvY3VtZW50LmFsbC4KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQt
PkludGVybmFsRmllbGRDb3VudCgpID09IFY4SFRNTERvY3VtZW50OjppbnRlcm5hbEZpZWxkQ291
bnQpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG1hcmtlciA9IHY4OjpPYmpl
Y3Q6Ok5ldygpOwotICAgICAgICAgICAgcmVzdWx0LT5TZXRJbnRlcm5hbEZpZWxkKFY4SFRNTERv
Y3VtZW50OjptYXJrZXJJbmRleCwgbWFya2VyKTsKLSAgICAgICAgICAgIHJlc3VsdC0+U2V0SW50
ZXJuYWxGaWVsZChWOEhUTUxEb2N1bWVudDo6c2hhZG93SW5kZXgsIG1hcmtlcik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBBIEpTIG9iamVjdCBvZiB0
eXBlIEV2ZW50VGFyZ2V0IGlzIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIgb2YgcG9zc2libGUg
Y2xhc3Nlcy4KIC8vIENoZWNrIEV2ZW50VGFyZ2V0LmggZm9yIG5ldyB0eXBlIGNvbnZlcnNpb24g
bWV0aG9kcwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50
VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KQpAQCAtMTE2NSwxNiArNDM2LDYg
QEAKICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIH0KIAotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
KQotewotICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0g
ICAgLy8gRklYTUU6IGNhbiBhIHVzZXIgdGFrZSBhIGxhenkgZXZlbnQgbGlzdGVuZXIgYW5kIHNl
dCB0byBvdGhlciBwbGFjZXM/Ci0gICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4bGlzdGVu
ZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKTsKLSAg
ICByZXR1cm4gdjhsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoY29udGV4dCk7Ci19Ci0KIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKE5v
ZGUqIG5vZGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBM
aXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKQogewogICAgIHJldHVybiAobG9va3VwID09IExpc3Rl
bmVyRmluZE9ubHkpID8gVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZFdyYXBwZXIodmFsdWUsIGlz
QXR0cmlidXRlKSA6IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhF
dmVudExpc3RlbmVyPih2YWx1ZSwgaXNBdHRyaWJ1dGUpOwpAQCAtMTI2MCwxOTMgKzUyMSw0IEBA
CiAgICAgcmV0dXJuIChsb29rdXAgPT0gTGlzdGVuZXJGaW5kT25seSkgPyBWOEV2ZW50TGlzdGVu
ZXJMaXN0OjpmaW5kV3JhcHBlcih2YWx1ZSwgaXNBdHRyaWJ1dGUpIDogVjhFdmVudExpc3RlbmVy
TGlzdDo6ZmluZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHZhbHVlLCBpc0F0dHJp
YnV0ZSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QoRE9NSW1wbGVtZW50YXRpb24qIGltcGwpCi17Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6RE9NSU1QTEVNRU5UQVRJT04sIFY4Q2xhc3NJbmRleDo6RE9NSU1QTEVNRU5U
QVRJT04sIGltcGwpOwotICAgIGlmIChyZXN1bHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIElm
IHRoZSBpbnN0YW50aWF0aW9uIGZhaWxlZCwgd2UgaWdub3JlIGl0IGFuZCByZXR1cm4gbnVsbCBp
bnN0ZWFkCi0gICAgICAgIC8vIG9mIHJldHVybmluZyBhbiBlbXB0eSBoYW5kbGUuCi0gICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmpl
Y3QoU3R5bGVTaGVldCogc2hlZXQpCi17Ci0gICAgaWYgKCFzaGVldCkKLSAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRE
T01PYmplY3RNYXAoKS5nZXQoc2hlZXQpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUgPSBWOENsYXNzSW5kZXg6OlNUWUxFU0hFRVQ7Ci0gICAgaWYgKHNoZWV0LT5pc0NTU1N0
eWxlU2hlZXQoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTU1RZTEVTSEVFVDsK
LQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5zdGFudGlhdGVWOE9iamVj
dCh0eXBlLCBWOENsYXNzSW5kZXg6OlNUWUxFU0hFRVQsIHNoZWV0KTsKLSAgICBpZiAoIXJlc3Vs
dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIERPTSBvYmplY3QgbWFw
IGlmIHRoZSByZXN1bHQgaXMgbm9uLWVtcHR5LgotICAgICAgICBzaGVldC0+cmVmKCk7Ci0gICAg
ICAgIHNldEpTV3JhcHBlckZvckRPTU9iamVjdChzaGVldCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD46Ok5ldyhyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgYSBoaWRkZW4gcmVmZXJl
bmNlIGZyb20gc3R5bGVzaGVldCBvYmplY3QgdG8gaXRzIG93bmVyIG5vZGUuCi0gICAgTm9kZSog
b3duZXJOb2RlID0gc2hlZXQtPm93bmVyTm9kZSgpOwotICAgIGlmIChvd25lck5vZGUpIHsKLSAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciA9IHY4OjpIYW5kbGU8djg6Ok9iamVj
dD46OkNhc3QoY29udmVydE5vZGVUb1Y4T2JqZWN0KG93bmVyTm9kZSkpOwotICAgICAgICByZXN1
bHQtPlNldEludGVybmFsRmllbGQoVjhTdHlsZVNoZWV0Ojpvd25lck5vZGVJbmRleCwgb3duZXIp
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOERPTVdyYXBwZXI6OmNvbnZlcnRDU1NWYWx1ZVRvVjhPYmplY3QoQ1NTVmFsdWUqIHZhbHVl
KQotewotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHZh
bHVlKTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBl
cjsKLQotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlOwotCi0gICAgaWYgKHZh
bHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6OldFQktJVENTU1RSQU5TRk9STVZBTFVFOwotICAgIGVsc2UgaWYgKHZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDU1NWQUxVRUxJU1Q7Ci0g
ICAgZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgdHlwZSA9IFY4
Q2xhc3NJbmRleDo6Q1NTUFJJTUlUSVZFVkFMVUU7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBlbHNl
IGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpT
VkdQQUlOVDsKLSAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICB0eXBl
ID0gVjhDbGFzc0luZGV4OjpTVkdDT0xPUjsKLSNlbmRpZgotICAgIGVsc2UKLSAgICAgICAgdHlw
ZSA9IFY4Q2xhc3NJbmRleDo6Q1NTVkFMVUU7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3QodHlwZSwgVjhDbGFzc0luZGV4OjpDU1NWQUxV
RSwgdmFsdWUpOwotICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBPbmx5
IHVwZGF0ZSB0aGUgRE9NIG9iamVjdCBtYXAgaWYgdGhlIHJlc3VsdCBpcyBub24tZW1wdHkuCi0g
ICAgICAgIHZhbHVlLT5yZWYoKTsKLSAgICAgICAgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHZh
bHVlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdChDU1NSdWxlKiBydWxlKQotewotICAgIGlmICgh
cnVsZSkgCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHJ1bGUpOwotICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGU7Ci0KLSAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkg
ewotICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJ
bmRleDo6Q1NTU1RZTEVSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6OkNI
QVJTRVRfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTQ0hBUlNFVFJVTEU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUnVsZTo6SU1QT1JUX1JVTEU6Ci0gICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU0lNUE9SVFJVTEU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUnVsZTo6TUVESUFfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6
Q1NTTUVESUFSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFD
RV9SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDU1NGT05URkFDRVJVTEU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUnVsZTo6UEFHRV9SVUxFOgotICAgICAgICB0eXBl
ID0gVjhDbGFzc0luZGV4OjpDU1NQQUdFUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NSdWxlOjpWQVJJQUJMRVNfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NT
VkFSSUFCTEVTUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NSdWxlOjpXRUJLSVRf
S0VZRlJBTUVfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCS0lUQ1NTS0VZ
RlJBTUVSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6OldFQktJVF9LRVlG
UkFNRVNfUlVMRToKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCS0lUQ1NTS0VZRlJB
TUVTUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogIC8vIENTU1J1bGU6OlVOS05P
V05fUlVMRQotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDU1NSVUxFOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGluc3Rh
bnRpYXRlVjhPYmplY3QodHlwZSwgVjhDbGFzc0luZGV4OjpDU1NSVUxFLCBydWxlKTsKLSAgICBp
ZiAoIXJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIERPTSBv
YmplY3QgbWFwIGlmIHRoZSByZXN1bHQgaXMgbm9uLWVtcHR5LgotICAgICAgICBydWxlLT5yZWYo
KTsKLSAgICAgICAgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHJ1bGUsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRXaW5kb3dUb1Y4
T2JqZWN0KERPTVdpbmRvdyogd2luZG93KQotewotICAgIGlmICghd2luZG93KQotICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKLSAgICAvLyBJbml0aWFsaXplcyBlbnZpcm9ubWVudCBvZiBhIGZy
YW1lLCBhbmQgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgLy8gb2YgdGhlIGZyYW1lLgot
ICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOwotCi0gICAgLy8gU3BlY2lhbCBj
YXNlOiBCZWNhdXNlIG9mIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKCkgb25lIERPTVdpbmRvdyBj
YW4gaGF2ZQotICAgIC8vIG11bHRpcGxlIGNvbnRleHRzIGFuZCBtdWx0aXBsZSBnbG9iYWwgb2Jq
ZWN0cyBhc3NvY2lhdGVkIHdpdGggaXQuIFdoZW4KLSAgICAvLyBjb2RlIHJ1bm5pbmcgaW4gb25l
IG9mIHRob3NlIGNvbnRleHRzIGFjY2Vzc2VzIHRoZSB3aW5kb3cgb2JqZWN0LCB3ZQotICAgIC8v
IHdhbnQgdG8gcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNv
bnRleHQsIG5vdAotICAgIC8vIG5lY2Vzc2FyaWx5IHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGFz
c29jaWF0ZWQgd2l0aCB0aGF0IERPTVdpbmRvdy4KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjdXJyZW50Q29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjdXJyZW50R2xvYmFsID0gY3VycmVudENvbnRleHQtPkdsb2JhbCgp
OwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBl
cjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY3VycmVudEdsb2Jh
bCk7Ci0gICAgaWYgKCF3aW5kb3dXcmFwcGVyLklzRW1wdHkoKSkgewotICAgICAgICBpZiAoVjhE
T01XaW5kb3c6OnRvTmF0aXZlKHdpbmRvd1dyYXBwZXIpID09IHdpbmRvdykKLSAgICAgICAgICAg
IHJldHVybiBjdXJyZW50R2xvYmFsOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgcmV0dXJu
IHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYW1lLgotICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKLSAg
ICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+KCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQt
Pkdsb2JhbCgpOwotICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIGds
b2JhbDsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydE5h
bWVkTm9kZU1hcFRvVjhPYmplY3QoTmFtZWROb2RlTWFwKiBtYXApCi17Ci0gICAgaWYgKCFtYXAp
Ci0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KG1hcCk7Ci0gICAgaWYgKCF3cmFwcGVy
LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOQU1F
RE5PREVNQVAsIFY4Q2xhc3NJbmRleDo6TkFNRUROT0RFTUFQLCBtYXApOwotICAgIGlmIChyZXN1
bHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gT25seSB1cGRh
dGUgdGhlIERPTSBvYmplY3QgbWFwIGlmIHRoZSByZXN1bHQgaXMgbm9uLWVtcHR5LgotICAgIG1h
cC0+cmVmKCk7Ci0gICAgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG1hcCwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhyZXN1bHQpKTsKLQotICAgIC8vIEFkZCBhIGhpZGRlbiByZWZl
cmVuY2UgZnJvbSBuYW1lZCBub2RlIG1hcCB0byBpdHMgb3duZXIgbm9kZS4KLSAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IG1hcC0+ZWxlbWVudCgpKSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb3duZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnZlcnROb2Rl
VG9WOE9iamVjdChlbGVtZW50KSk7Ci0gICAgICAgIHJlc3VsdC0+U2V0SW50ZXJuYWxGaWVsZChW
OE5hbWVkTm9kZU1hcDo6b3duZXJOb2RlSW5kZXgsIG93bmVyKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDEwIEBA
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yQmFja2VuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4SW5qZWN0ZWRTY3JpcHRIb3N0Lmgi
CisjaW5jbHVkZSAiVjhJbnNwZWN0b3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiVjhJbnNwZWN0b3JG
cm9udGVuZEhvc3QuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx2OC5oPgpA
QCAtMTQ0LDIxICsxNDUsMjEgQEAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKiB2
YWx1ZSkKIHsKICAgICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7Ci0gICAgc2NvcGUu
Z2xvYmFsKCktPlNldCh2ODo6U3RyaW5nOjpOZXcobmFtZSksIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCB2YWx1ZSkpOworICAg
IHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUpLCB0b1Y4KHZhbHVlKSk7
CiAgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKIH0KIAogYm9vbCBTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3Bl
Y3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0
U3RhdGUpOwotICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUpLCBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SRlJP
TlRFTkRIT1NULCB2YWx1ZSkpOworICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6
TmV3KG5hbWUpLCB0b1Y4KHZhbHVlKSk7CiAgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKIH0K
IAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUpCiB7CiAgICAgU2Ny
aXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOwotICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6
OlN0cmluZzo6TmV3KG5hbWUpLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6SU5KRUNURURTQ1JJUFRIT1NULCB2YWx1ZSkpOworICAgIHNjb3BlLmdsb2JhbCgp
LT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUpLCB0b1Y4KHZhbHVlKSk7CiAgICAgcmV0dXJuIHNj
b3BlLnN1Y2Nlc3MoKTsKIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShy
ZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNyBAQAogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgi
CiAjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhDb25zb2xlTWVzc2FnZS5o
IgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NQ29yZUV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIK
KyNpbmNsdWRlICJWOEV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0
eU5hbWUuaCIKICNpbmNsdWRlICJWOEluZGV4LmgiCiAjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRl
eHQuaCIKKyNpbmNsdWRlICJWOFJhbmdlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiVjhTVkdFeGNl
cHRpb24uaCIKKyNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCisjaW5jbHVk
ZSAiVjhYUGF0aEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjA3LDI1ICs2MTIsMjUgQEAKICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhjZXB0aW9uOwogICAgIHN3aXRjaCAoZGVzY3JpcHRp
b24udHlwZSkgewogICAgIGNhc2UgRE9NRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXhjZXB0aW9u
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTUNPUkVF
WENFUFRJT04sIERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAg
ICBleGNlcHRpb24gPSB0b1Y4KERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJhbmdlRXhjZXB0aW9uVHlwZToKLSAgICAgICAg
ZXhjZXB0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlJBTkdFRVhDRVBUSU9OLCBSYW5nZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Cisg
ICAgICAgIGV4Y2VwdGlvbiA9IHRvVjgoUmFuZ2VFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlv
bikpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEV2ZW50RXhjZXB0aW9uVHlwZToKLSAgICAg
ICAgZXhjZXB0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OkVWRU5URVhDRVBUSU9OLCBFdmVudEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7
CisgICAgICAgIGV4Y2VwdGlvbiA9IHRvVjgoRXZlbnRFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlw
dGlvbikpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9u
VHlwZToKLSAgICAgICAgZXhjZXB0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNURVhDRVBUSU9OLCBYTUxIdHRwUmVxdWVzdEV4
Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHRvVjgo
WE1MSHR0cFJlcXVlc3RFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwogICAgICAgICBi
cmVhazsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKLSAgICAg
ICAgZXhjZXB0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OlNWR0VYQ0VQVElPTiwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAg
ICAgICAgZXhjZXB0aW9uID0gdG9WOChTVkdFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikp
OwogICAgICAgICBicmVhazsKICNlbmRpZgogI2lmIEVOQUJMRShYUEFUSCkKICAgICBjYXNlIFhQ
YXRoRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXhjZXB0aW9uID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlhQQVRIRVhDRVBUSU9OLCBYUGF0aEV4Y2VwdGlv
bjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHRvVjgoWFBhdGhF
eGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwogICAgICAgICBicmVhazsKICNlbmRpZgog
ICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkocmV2aXNpb24gNTQyOTIp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIiAvLyBmb3IgV2ViQ29yZTo6U3RyaW5nCi0j
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21YUGF0aE5TUmVz
b2x2ZXIuaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgIlY4RXZlbnQuaCIKQEAg
LTEyMyw0NSArMTIyLDggQEAKICAgICAgICAgICAgIHJldHVybiBvYmplY3QuSXNFbXB0eSgpID8g
b2JqZWN0IDogb2JqZWN0LT5GaW5kSW5zdGFuY2VJblByb3RvdHlwZUNoYWluKGdldFRlbXBsYXRl
KHR5cGUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIFBhc3NSZWZQdHI8VD4gaW1wKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wLmdldCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2b2lkKik7Ci0KLSAgICAg
ICAgLy8gRmFzdC1wYXRoIGZvciBOb2RlIG9iamVjdHMuCi0gICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydE5vZGVUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROb2RlVG9WOE9iamVjdChu
b2RlLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydE5vZGVUb1Y4T2JqZWN0KE5vZGUqKTsKLQotICAgICAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnREb2N1bWVudFRvVjhPYmplY3QoRG9jdW1lbnQqKTsK
LQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROZXdOb2RlVG9W
OE9iamVjdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZS5nZXQoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROZXdOb2RlVG9WOE9i
amVjdChOb2RlKiBub2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydE5l
d05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGdldERPTU5vZGVNYXAoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROZXdOb2RlVG9WOE9i
amVjdChOb2RlKiwgVjhQcm94eSosIERPTU5vZGVNYXBwaW5nJik7Ci0KICAgICAgICAgc3RhdGlj
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnRFdmVudFRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KGV2ZW50LmdldCgpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2
ZW50VG9WOE9iamVjdChFdmVudCopOwotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
PiBldmVudFRhcmdldCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFdmVu
dFRhcmdldFRvVjhPYmplY3QoZXZlbnRUYXJnZXQuZ2V0KCkpOwpAQCAtMTY5LDE0ICsxMzEsNiBA
QAogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFy
Z2V0VG9WOE9iamVjdChFdmVudFRhcmdldCopOwogCi0gICAgICAgIC8vIFdyYXAgYW5kIHVud3Jh
cCBKUyBldmVudCBsaXN0ZW5lcnMuCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChj
b250ZXh0LCBldmVudExpc3RlbmVyLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudExpc3RlbmVyKik7Ci0KICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJMb29r
dXBUeXBlIGxvb2t1cCk7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZ2V0RXZlbnRMaXN0ZW5lcihTVkdFbGVtZW50SW5zdGFuY2UqIGVsZW1lbnQsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUg
bG9va3VwKTsKQEAgLTIxMSwxMCArMTY1LDYgQEAKICAgICAgICAgICAgIHJldHVybiByZXNvbHZl
cjsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIC8vIERPTUltcGxlbWVudGF0aW9uIGlzIGEg
c2luZ2xldG9uIGFuZCBpdCBpcyBoYW5kbGVkIGluIGEgc3BlY2lhbAotICAgICAgICAvLyB3YXku
IEEgd3JhcHBlciBpcyBnZW5lcmF0ZWQgcGVyIGRvY3VtZW50IGFuZCBzdG9yZWQgaW4gYW4KLSAg
ICAgICAgLy8gaW50ZXJuYWwgZmllbGQgb2YgdGhlIGRvY3VtZW50LgotICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3Qo
RE9NSW1wbGVtZW50YXRpb24qKTsKIAogICAgICAgICAvLyBXcmFwIEpTIG5vZGUgZmlsdGVyIGlu
IEMrKy4KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gd3JhcE5hdGl2ZU5v
ZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKQEAgLTIzMyw1NyArMTgzLDE4IEBACiAg
ICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIHdyYXBwZXIgb2YgdHlwZSB8
Y2xhc3NUeXBlfC4KICAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKIAotICAgICAgICAv
LyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSBET00gRXZlbnQgd3JhcHBlci4KLSAgICAg
ICAgc3RhdGljIGJvb2wgaXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsK
LQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRTdHlsZVNoZWV0
VG9WOE9iamVjdChTdHlsZVNoZWV0Kik7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydENTU1ZhbHVlVG9WOE9iamVjdChDU1NWYWx1ZSopOwotICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdChDU1NSdWxl
Kik7Ci0gICAgICAgIC8vIFJldHVybnMgdGhlIEpTIHdyYXBwZXIgb2YgYSB3aW5kb3cgb2JqZWN0
LCBpbml0aWFsaXplcyB0aGUgZW52aXJvbm1lbnQKLSAgICAgICAgLy8gb2YgdGhlIHdpbmRvdyBm
cmFtZSBpZiBuZWVkZWQuCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydFdpbmRvd1RvVjhPYmplY3QoRE9NV2luZG93Kik7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydE5hbWVkTm9kZU1hcFRvVjhPYmplY3QoTmFtZWROb2RlTWFw
Kik7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNvbnZlcnRTVkdFbGVtZW50SW5zdGFuY2VUb1Y4T2JqZWN0KFNWR0VsZW1lbnRJbnN0YW5j
ZSopOwotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRTVkdPYmpl
Y3RXaXRoQ29udGV4dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2b2lk
Kik7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAgICAgICAgIHN0YXRpYyB2b2lk
IHNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCk7CiAjZW5kaWYKLQotICAgICAgICBzdGF0aWMgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIGh0bWxFbGVtZW50VHlwZShIVE1MRWxlbWVudCopOwotI2lmIEVO
QUJMRShTVkcpCi0gICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgc3Zn
RWxlbWVudFR5cGUoU1ZHRWxlbWVudCopOwotI2VuZGlmCiAgICAgICAgIC8vIFNldCBoaWRkZW4g
cmVmZXJlbmNlcyBpbiBhIERPTVdpbmRvdyBvYmplY3Qgb2YgYSBmcmFtZS4KICAgICAgICAgc3Rh
dGljIHZvaWQgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKEZyYW1lKiwgY29uc3QgaW50IGludGVy
bmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogCi0gICAgICAgIHN0YXRpYyB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIGltcGwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZVY4T2JqZWN0KHByb3h5LCB0eXBlLCB0eXBlLCBp
bXBsKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGlu
c3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnZXRXcmFwcGVyKE5vZGUqKTsKLQotICAgIHByaXZhdGU6Ci0KLSAgICAgICAgLy8g
VGhlIGZpcnN0IFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzIHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9y
Ci0gICAgICAgIC8vIHVzZWQgdG8gY3JlYXRlIEpTIG9iamVjdC4gVGhlIHNlY29uZCBWOFdyYXBw
ZXJUeXBlIHNwZWNpZmllcwotICAgICAgICAvLyB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZvaWQq
IGZvciB0eXBlIGNhc3RpbmcuCi0gICAgICAgIC8vIEZvciBleGFtcGxlLCBhIEhUTUwgZWxlbWVu
dCBoYXMgSFRNTEVMRU1FTlQgZm9yIHRoZSBmaXJzdCBWOFdyYXBwZXJUeXBlLCBidXQgYWx3YXlz
Ci0gICAgICAgIC8vIHVzZSBOT0RFIGFzIHRoZSBzZWNvbmQgVjhXcmFwcGVyVHlwZS4gSlMgd3Jh
cHBlciBzdG9yZXMgdGhlIHNlY29uZAotICAgICAgICAvLyBWOFdyYXBwZXJUeXBlIGFuZCB0aGUg
dm9pZCogYXMgaW50ZXJuYWwgZmllbGRzLgotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRl
c2NUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGltcGwp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZVY4T2JqZWN0KE5VTEws
IGRlc2NUeXBlLCBjcHRyVHlwZSwgaW1wbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSosIFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2b2lk
Kik7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDkgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0
YXRlLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOEV2ZW50LmgiCisj
aW5jbHVkZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRl
eHQuaCIKICNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgpAQCAt
MTY5LDcgKzE3MSw3IEBACiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IHY4
Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBn
bG9iYWwtPkdldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImV2ZW50IikpOwotICAgIEV2ZW50KiBl
dmVudCA9IFY4RE9NV3JhcHBlcjo6aXNET01FdmVudFdyYXBwZXIoanNFdmVudCkgPyBWOEV2ZW50
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGpzRXZlbnQpKSA6IDA7Cisg
ICAgRXZlbnQqIGV2ZW50ID0gKCFqc0V2ZW50LklzRW1wdHkoKSAmJiBqc0V2ZW50LT5Jc09iamVj
dCgpKSA/IFY4RXZlbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoanNF
dmVudCkpIDogMDsKIAogICAgIC8vIEJhc2VkIG9uIGNvZGUgZnJvbSBranNfYmluZGluZ3MuY3Bw
LgogICAgIC8vIE5vdGU6IFRoaXMgaXMgbW9yZSBsaWJlcmFsIHRoYW4gRmlyZWZveCdzIGltcGxl
bWVudGF0aW9uLgpAQCAtMzc3LDcgKzM3OSw3IEBACiAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUg
c2NvcGUodjhDb250ZXh0KTsKICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lLT5kb21XaW5k
b3coKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2xvYmFsID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2xvYmFsID0gdG9WOCh3aW5kb3cpOwogICAgIEFTU0VSVChn
bG9iYWwtPklzT2JqZWN0KCkpOwogICAgIHJldHVybiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KDAs
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoZ2xvYmFsKSwgd2luZG93KTsKIH0KQEAgLTQx
NCw3ICs0MTYsNyBAQAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwog
CiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBtX2ZyYW1lLT5kb21XaW5kb3coKTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdjhwbHVnaW4gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6SFRNTEVNQkVERUxFTUVOVCwgcGx1Z2luKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdjhwbHVnaW4gPSB0b1Y4KHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1l
bnQqPihwbHVnaW4pKTsKICAgICBpZiAoIXY4cGx1Z2luLT5Jc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gY3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkg
QEAKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q29sbGVjdGlvbi5o
IgogI2luY2x1ZGUgIlY4Q29uc29sZU1lc3NhZ2UuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOERPTU1hcC5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisj
aW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgi
CiAjaW5jbHVkZSAiVjhIaXN0b3J5LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgpAQCAtNDIyLDcg
KzQyMiw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRvY3Vt
ZW50V3JhcHBlciA9IHRvVjgobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAKICAgICAvLyBJZiBpbnN0
YW50aWF0aW9uIG9mIHRoZSBkb2N1bWVudCB3cmFwcGVyIGZhaWxzLCBjbGVhciB0aGUgY2FjaGUK
ICAgICAvLyBhbmQgbGV0IHRoZSBET01XaW5kb3cgYWNjZXNzb3IgaGFuZGxlIGFjY2VzcyB0byB0
aGUgZG9jdW1lbnQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRp
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJD
b25kaXRpb24uY3BwCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0U3RhdGUuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAK
ICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KQEAgLTY5LDcgKzcwLDcgQEAKICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkds
b2JhbCgpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBjYWxsYmFjayA9IHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2ZpbHRlcik7CiAgICAgT3duQXJyYXlQdHI8djg6Okhh
bmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+WzFdKTsKLSAg
ICBhcmdzWzBdID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
Ok5PREUsIG5vZGUpOworICAgIGFyZ3NbMF0gPSB0b1Y4KG5vZGUpOwogCiAgICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSgpOwogICAgIEFTU0VSVChwcm94eSk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTU0ICszOCwx
NDkgQEAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgLy8gRklY
TUU6IFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgbmFtZWQgdXNpbmcgdG8qIHNpbmNlIHRoZXkg
cmV0dXJuIHRoZSBpdGVtIChnZXQqIGlzIHVzZWQgZm9yIG1ldGhvZCB0aGF0IHRha2UgYSByZWYg
cGFyYW0pLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQ2NjQuCisvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBuYW1lZCB1c2lu
ZyB0byogc2luY2UgdGhleSByZXR1cm4gdGhlIGl0ZW0gKGdldCogaXMgdXNlZCBmb3IgbWV0aG9k
IHRoYXQgdGFrZSBhIHJlZiBwYXJhbSkuCisvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0NjY0LgogCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBnZXRWOE9iamVjdCh2b2lkKiBpbXBsZW1lbnRhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
aW1wbGVtZW50YXRpb25UeXBlKQotICAgIHsKLSAgICAgICAgaWYgKCFpbXBsZW1lbnRhdGlvbikK
LSAgICAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICAgICAgVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOENsYXNzSW5kZXg6OkZyb21JbnQoaW1w
bGVtZW50YXRpb25UeXBlLT5JbnQzMlZhbHVlKCkpOwotICAgICAgICBpZiAodHlwZSA9PSBWOENs
YXNzSW5kZXg6Ok5PREUpCi0gICAgICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
Tm9kZVRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGxlbWVudGF0aW9uKSk7Ci0gICAg
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGltcGxlbWVu
dGF0aW9uKTsKLSAgICB9Cit0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGdldFY4T2JqZWN0KFQqIGltcGxlbWVudGF0aW9uKQoreworICAgIGlmICghaW1wbGVt
ZW50YXRpb24pCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICBy
ZXR1cm4gdG9WOChpbXBsZW1lbnRhdGlvbik7Cit9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xs
ZWN0aW9uPiBzdGF0aWMgQ29sbGVjdGlvbiogdG9OYXRpdmVDb2xsZWN0aW9uKHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDb2xsZWN0aW9uKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01X
cmFwcGVyT2JqZWN0SW5kZXgpKTsKLSAgICB9Cit0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBz
dGF0aWMgQ29sbGVjdGlvbiogdG9OYXRpdmVDb2xsZWN0aW9uKHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBvYmplY3QpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdGlvbio+KG9i
amVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4
KSk7Cit9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdldFY4T2JqZWN0KFBhc3NSZWZQdHI8VD4gaW1wbGVtZW50YXRpb24sIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGltcGxlbWVudGF0aW9uVHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRW
OE9iamVjdChpbXBsZW1lbnRhdGlvbi5nZXQoKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKLSAgICB9
Cit0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFY4T2Jq
ZWN0KFBhc3NSZWZQdHI8VD4gaW1wbGVtZW50YXRpb24pCit7CisgICAgcmV0dXJuIGdldFY4T2Jq
ZWN0KGltcGxlbWVudGF0aW9uLmdldCgpKTsKK30KIAotICAgIC8vIFJldHVybnMgbmFtZWQgcHJv
cGVydHkgb2YgYSBjb2xsZWN0aW9uLgotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNs
YXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkUHJvcGVy
dHlPZkNvbGxlY3Rpb24odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbXBsZW1lbnRhdGlvblR5cGUpCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogYXNzZXJ0IG9iamVjdCBpcyBhIGNvbGxlY3Rpb24gdHlwZQotICAg
ICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAg
ICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKG9iamVjdCkgIT0gVjhDbGFz
c0luZGV4OjpOT0RFKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZl
Q29sbGVjdGlvbjxDb2xsZWN0aW9uPihvYmplY3QpOwotICAgICAgICBBdG9taWNTdHJpbmcgcHJv
cGVydHlOYW1lID0gdG9BdG9taWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhuYW1lKTsKLSAg
ICAgICAgcmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5uYW1lZEl0ZW0o
cHJvcGVydHlOYW1lKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKLSAgICB9CisvLyBSZXR1cm5zIG5h
bWVkIHByb3BlcnR5IG9mIGEgY29sbGVjdGlvbi4KK3RlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24s
IGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkUHJv
cGVydHlPZkNvbGxlY3Rpb24odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgLy8gRklYTUU6IGFzc2VydCBvYmplY3QgaXMgYSBj
b2xsZWN0aW9uIHR5cGUKKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIo
b2JqZWN0KSk7CisgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUob2JqZWN0
KSAhPSBWOENsYXNzSW5kZXg6Ok5PREUpOworICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0
b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4ob2JqZWN0KTsKKyAgICBBdG9taWNTdHJpbmcg
cHJvcGVydHlOYW1lID0gdG9BdG9taWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhuYW1lKTsK
KyAgICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPm5hbWVkSXRlbShw
cm9wZXJ0eU5hbWUpKTsKK30KIAotICAgIC8vIEEgdGVtcGxhdGUgb2YgbmFtZWQgcHJvcGVydHkg
YWNjZXNzb3Igb2YgY29sbGVjdGlvbnMuCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwg
Y2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvbk5h
bWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCi0gICAgewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUgPSBpbmZvLkhvbGRlcigpLT5HZXRSZWFsTmFtZWRQcm9wZXJ0eUluUHJvdG90eXBlQ2hh
aW4obmFtZSk7CisvLyBBIHRlbXBsYXRlIG9mIG5hbWVkIHByb3BlcnR5IGFjY2Vzc29yIG9mIGNv
bGxlY3Rpb25zLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvbk5hbWVkUHJvcGVydHlHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
Cit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gaW5mby5Ib2xkZXIoKS0+R2V0
UmVhbE5hbWVkUHJvcGVydHlJblByb3RvdHlwZUNoYWluKG5hbWUpOwogCi0gICAgICAgIGlmICgh
dmFsdWUuSXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGlmICghdmFs
dWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAgICAgICAgLy8gU2VhcmNo
IGxvY2FsIGNhbGxiYWNrIHByb3BlcnRpZXMgbmV4dCB0byBmaW5kIElETCBkZWZpbmVkCi0gICAg
ICAgIC8vIHByb3BlcnRpZXMuCi0gICAgICAgIGlmIChpbmZvLkhvbGRlcigpLT5IYXNSZWFsTmFt
ZWRDYWxsYmFja1Byb3BlcnR5KG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7Ci0gICAgICAgIHJldHVybiBnZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0
aW9uPENvbGxlY3Rpb24sIEl0ZW1UeXBlPihuYW1lLCBpbmZvLkhvbGRlcigpLCBpbmZvLkRhdGEo
KSk7Ci0gICAgfQorICAgIC8vIFNlYXJjaCBsb2NhbCBjYWxsYmFjayBwcm9wZXJ0aWVzIG5leHQg
dG8gZmluZCBJREwgZGVmaW5lZAorICAgIC8vIHByb3BlcnRpZXMuCisgICAgaWYgKGluZm8uSG9s
ZGVyKCktPkhhc1JlYWxOYW1lZENhbGxiYWNrUHJvcGVydHkobmFtZSkpCisgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIHJldHVybiBnZXROYW1lZFByb3BlcnR5
T2ZDb2xsZWN0aW9uPENvbGxlY3Rpb24sIEl0ZW1UeXBlPihuYW1lLCBpbmZvLkhvbGRlcigpKTsK
K30KIAotICAgIC8vIFJldHVybnMgdGhlIHByb3BlcnR5IGF0IHRoZSBpbmRleCBvZiBhIGNvbGxl
Y3Rpb24uCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SW5kZXhlZFByb3BlcnR5T2ZDb2xsZWN0aW9u
KHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiBpbXBsZW1lbnRhdGlvblR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQXNzZXJ0
IHRoYXQgb2JqZWN0IG11c3QgYmUgYSBjb2xsZWN0aW9uIHR5cGUuCi0gICAgICAgIEFTU0VSVChW
OERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKLSAgICAgICAgQVNTRVJUKFY4
RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUob2JqZWN0KSAhPSBWOENsYXNzSW5kZXg6Ok5PREUp
OwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENv
bGxlY3Rpb24+KG9iamVjdCk7Ci0gICAgICAgIHJldHVybiBnZXRWOE9iamVjdDxJdGVtVHlwZT4o
Y29sbGVjdGlvbi0+aXRlbShpbmRleCksIGltcGxlbWVudGF0aW9uVHlwZSk7Ci0gICAgfQorLy8g
UmV0dXJucyB0aGUgcHJvcGVydHkgYXQgdGhlIGluZGV4IG9mIGEgY29sbGVjdGlvbi4KK3RlbXBs
YXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih1aW50MzJfdCBpbmRleCwg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICAvLyBGSVhNRTogQXNzZXJ0IHRo
YXQgb2JqZWN0IG11c3QgYmUgYSBjb2xsZWN0aW9uIHR5cGUuCisgICAgQVNTRVJUKFY4RE9NV3Jh
cHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOworICAgIEFTU0VSVChWOERPTVdyYXBwZXI6
OmRvbVdyYXBwZXJUeXBlKG9iamVjdCkgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICBDb2xs
ZWN0aW9uKiBjb2xsZWN0aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KG9iamVj
dCk7CisgICAgcmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5pdGVtKGlu
ZGV4KSk7Cit9CiAKLSAgICAvLyBBIHRlbXBsYXRlIG9mIGluZGV4IGludGVyY2VwdG9yIG9mIGNv
bGxlY3Rpb25zLgotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBl
PiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlH
ZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2V0SW5kZXhlZFByb3BlcnR5T2ZDb2xsZWN0aW9uPENvbGxlY3Rp
b24sIEl0ZW1UeXBlPihpbmRleCwgaW5mby5Ib2xkZXIoKSwgaW5mby5EYXRhKCkpOwotICAgIH0K
Ky8vIEEgdGVtcGxhdGUgb2YgaW5kZXggaW50ZXJjZXB0b3Igb2YgY29sbGVjdGlvbnMuCit0ZW1w
bGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIHJldHVybiBnZXRJbmRleGVk
UHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KGluZGV4LCBpbmZvLkhv
bGRlcigpKTsKK30KIAotICAgIC8vIEdldCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBv
ZiBpbmRleGVkIHByb3BlcnRpZXMgb2YgSFRNTFNlbGVjdEVsZW1lbnQgYW5kIEhUTUxGb3JtRWxl
bWVudC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6QXJyYXk+IG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotICAgIHsKLSAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBl
cjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQ29sbGVjdGlvbiog
Y29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigp
KTsKLSAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgpOwotICAgICAgICB2
ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGl0ZW0gZnVuY3Rpb24gcmV0
dXJucyBhIG5vbi1udWxsIHZhbHVlIGZvciB0aGlzIGluZGV4PwotICAgICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6SW50ZWdlcj4gaW50ZWdlciA9IHY4OjpJbnRlZ2VyOjpOZXcoaSk7Ci0gICAgICAg
ICAgICBwcm9wZXJ0aWVzLT5TZXQoaW50ZWdlciwgaW50ZWdlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHByb3BlcnRpZXM7CisvLyBHZXQgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFt
ZXMgb2YgaW5kZXhlZCBwcm9wZXJ0aWVzIG9mIEhUTUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9y
bUVsZW1lbnQuCit0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6QXJyYXk+IG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJl
RE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7CisgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9
IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKKyAgICBpbnQg
bGVuZ3RoID0gY29sbGVjdGlvbi0+bGVuZ3RoKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+
IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hl
Y2sgdGhhdCB0aGUgaXRlbSBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLW51bGwgdmFsdWUgZm9yIHRo
aXMgaW5kZXg/CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGludGVnZXIgPSB2ODo6
SW50ZWdlcjo6TmV3KGkpOworICAgICAgICBwcm9wZXJ0aWVzLT5TZXQoaW50ZWdlciwgaW50ZWdl
cik7CiAgICAgfQorICAgIHJldHVybiBwcm9wZXJ0aWVzOworfQogCi0gICAgLy8gR2V0IGFuIGFy
cmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGluZGV4ZWQgcHJvcGVydGllcyBpbiBhIGNvbGxl
Y3Rpb24uCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8
djg6OkFycmF5PiBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQotICAgIHsKLSAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6
bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29s
bGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsK
LSAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgpOwotICAgICAgICB2ODo6
SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGl0ZW0gZnVuY3Rpb24gcmV0dXJu
cyBhIG5vbi1udWxsIHZhbHVlIGZvciB0aGlzIGluZGV4PwotICAgICAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6SW50ZWdlcj4gaW50ZWdlciA9IHY4OjpJbnRlZ2VyOjpOZXcoaSk7Ci0gICAgICAgICAg
ICBwcm9wZXJ0aWVzLT5TZXQoaW50ZWdlciwgaW50ZWdlcik7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHByb3BlcnRpZXM7CisvLyBHZXQgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMg
b2YgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIGEgY29sbGVjdGlvbi4KK3RlbXBsYXRlPGNsYXNzIENv
bGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gY29sbGVjdGlvbkluZGV4ZWRQ
cm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBB
U1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOworICAg
IENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4o
aW5mby5Ib2xkZXIoKSk7CisgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgpOwor
ICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVu
Z3RoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGl0ZW0gZnVuY3Rpb24gcmV0dXJu
cyBhIG5vbi1udWxsIHZhbHVlIGZvciB0aGlzIGluZGV4PworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpJbnRlZ2VyPiBpbnRlZ2VyID0gdjg6OkludGVnZXI6Ok5ldyhpKTsKKyAgICAgICAgcHJvcGVy
dGllcy0+U2V0KGludGVnZXIsIGludGVnZXIpOwogICAgIH0KKyAgICByZXR1cm4gcHJvcGVydGll
czsKK30KIAogCi0gICAgLy8gQSB0ZW1wbGF0ZSBmb3IgaW5kZXhlZCBnZXR0ZXJzIG9uIGNvbGxl
Y3Rpb25zIG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgcmV0dXJuIG51bGwgaWYgdGhlIHJlc3VsdGlu
ZyBzdHJpbmcgaXMgYSBudWxsIHN0cmluZy4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9u
PiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRl
eGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYXNzZXJ0IHRoYXQgb2JqZWN0IG11c3Qg
YmUgYSBjb2xsZWN0aW9uIHR5cGUKLSAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlv
biA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKLSAgICAg
ICAgU3RyaW5nIHJlc3VsdCA9IGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpOwotICAgICAgICByZXR1
cm4gdjhTdHJpbmdPck51bGwocmVzdWx0KTsKLSAgICB9CisvLyBBIHRlbXBsYXRlIGZvciBpbmRl
eGVkIGdldHRlcnMgb24gY29sbGVjdGlvbnMgb2Ygc3RyaW5ncyB0aGF0IHNob3VsZCByZXR1cm4g
bnVsbCBpZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyBhIG51bGwgc3RyaW5nLgordGVtcGxhdGU8
Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb2xsZWN0aW9u
U3RyaW5nT3JOdWxsSW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCBvYmpl
Y3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24gdHlwZQorICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1h
eWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7CisgICAgQ29sbGVjdGlvbiogY29sbGVjdGlv
biA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKKyAgICBT
dHJpbmcgcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleCk7CisgICAgcmV0dXJuIHY4U3Ry
aW5nT3JOdWxsKHJlc3VsdCk7Cit9CiAKIAotICAgIC8vIEEgdGVtcGxhdGUgZm9yIGluZGV4ZWQg
Z2V0dGVycyBvbiBjb2xsZWN0aW9ucyBvZiBzdHJpbmdzLgotICAgIHRlbXBsYXRlPGNsYXNzIENv
bGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvblN0cmluZ0lu
ZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCBvYmplY3QgbXVz
dCBiZSBhIGNvbGxlY3Rpb24gdHlwZQotICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXli
ZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uID0gdG9OYXRpdmVDb2xsZWN0aW9uPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwotICAg
ICAgICBTdHJpbmcgcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleCk7Ci0gICAgICAgIHJl
dHVybiB2OFN0cmluZyhyZXN1bHQpOwotICAgIH0KKy8vIEEgdGVtcGxhdGUgZm9yIGluZGV4ZWQg
Z2V0dGVycyBvbiBjb2xsZWN0aW9ucyBvZiBzdHJpbmdzLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVj
dGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb2xsZWN0aW9uU3RyaW5nSW5kZXhl
ZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNvbGxl
Y3Rpb24gdHlwZQorICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZv
LkhvbGRlcigpKSk7CisgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVj
dGlvbjxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gY29s
bGVjdGlvbi0+aXRlbShpbmRleCk7CisgICAgcmV0dXJuIHY4U3RyaW5nKHJlc3VsdCk7Cit9CiAK
IAotICAgIC8vIEFkZCBpbmRleGVkIGdldHRlciB0byB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgZm9y
IGEgY29sbGVjdGlvbi4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVt
VHlwZT4gc3RhdGljIHZvaWQgc2V0Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXIodjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5
cGUpCi0gICAgewotICAgICAgICBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQ
cm9wZXJ0eUhhbmRsZXIoY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9u
LCBJdGVtVHlwZT4sIDAsIDAsIDAsIGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9y
PENvbGxlY3Rpb24+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdjg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OlRvSW50KHR5
cGUpKSk7Ci0gICAgfQorLy8gQWRkIGluZGV4ZWQgZ2V0dGVyIHRvIHRoZSBmdW5jdGlvbiB0ZW1w
bGF0ZSBmb3IgYSBjb2xsZWN0aW9uLgordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3Mg
SXRlbVR5cGU+IHN0YXRpYyB2b2lkIHNldENvbGxlY3Rpb25JbmRleGVkR2V0dGVyKHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlKQoreworICAgIGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3Bl
cnR5SGFuZGxlcihjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5R2V0dGVyPENvbGxlY3Rpb24sIEl0
ZW1UeXBlPiwgMCwgMCwgMCwgY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3I8Q29s
bGVjdGlvbj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSkpOwor
fQogCiAKLSAgICAvLyBBZGQgbmFtZWQgZ2V0dGVyIHRvIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZSBm
b3IgYSBjb2xsZWN0aW9uLgotICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0
ZW1UeXBlPiBzdGF0aWMgdm9pZCBzZXRDb2xsZWN0aW9uTmFtZWRHZXR0ZXIodjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5
cGUpCi0gICAgewotICAgICAgICBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJv
cGVydHlIYW5kbGVyKGNvbGxlY3Rpb25OYW1lZFByb3BlcnR5R2V0dGVyPENvbGxlY3Rpb24sIEl0
ZW1UeXBlPiwgMCwgMCwgMCwgMCwgdjg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OlRvSW50
KHR5cGUpKSk7Ci0gICAgfQorLy8gQWRkIG5hbWVkIGdldHRlciB0byB0aGUgZnVuY3Rpb24gdGVt
cGxhdGUgZm9yIGEgY29sbGVjdGlvbi4KK3RlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNz
IEl0ZW1UeXBlPiBzdGF0aWMgdm9pZCBzZXRDb2xsZWN0aW9uTmFtZWRHZXR0ZXIodjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUpCit7CisgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5
SGFuZGxlcihjb2xsZWN0aW9uTmFtZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9uLCBJdGVtVHlw
ZT4sIDAsIDAsIDAsIDAsIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludCh0eXBl
KSkpOworfQogCi0gICAgLy8gQWRkIGluZGV4ZWQgZ2V0dGVyIHJldHVybmluZyBhIHN0cmluZyBv
ciBudWxsIHRvIGEgZnVuY3Rpb24gdGVtcGxhdGUgZm9yIGEgY29sbGVjdGlvbi4KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdm9pZCBzZXRDb2xsZWN0aW9uU3RyaW5nT3JO
dWxsSW5kZXhlZEdldHRlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQot
ICAgIHsKLSAgICAgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVy
dHlIYW5kbGVyKGNvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRleGVkUHJvcGVydHlHZXR0ZXI8Q29s
bGVjdGlvbj4sIDAsIDAsIDAsIGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yPENv
bGxlY3Rpb24+KTsKLSAgICB9CisvLyBBZGQgaW5kZXhlZCBnZXR0ZXIgcmV0dXJuaW5nIGEgc3Ry
aW5nIG9yIG51bGwgdG8gYSBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgYSBjb2xsZWN0aW9uLgordGVt
cGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHZvaWQgc2V0Q29sbGVjdGlvblN0cmluZ09y
TnVsbEluZGV4ZWRHZXR0ZXIodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzYykK
K3sKKyAgICBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRs
ZXIoY29sbGVjdGlvblN0cmluZ09yTnVsbEluZGV4ZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9u
PiwgMCwgMCwgMCwgY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3I8Q29sbGVjdGlv
bj4pOworfQogCiAKLSAgICAvLyBBZGQgaW5kZXhlZCBnZXR0ZXIgcmV0dXJuaW5nIGEgc3RyaW5n
IHRvIGEgZnVuY3Rpb24gdGVtcGxhdGUgZm9yIGEgY29sbGVjdGlvbi4KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdm9pZCBzZXRDb2xsZWN0aW9uU3RyaW5nSW5kZXhlZEdl
dHRlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQotICAgIHsKLSAgICAg
ICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNv
bGxlY3Rpb25TdHJpbmdJbmRleGVkUHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbj4sIDAsIDAsIDAs
IGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yPENvbGxlY3Rpb24+KTsKLSAgICB9
CisvLyBBZGQgaW5kZXhlZCBnZXR0ZXIgcmV0dXJuaW5nIGEgc3RyaW5nIHRvIGEgZnVuY3Rpb24g
dGVtcGxhdGUgZm9yIGEgY29sbGVjdGlvbi4KK3RlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0
YXRpYyB2b2lkIHNldENvbGxlY3Rpb25TdHJpbmdJbmRleGVkR2V0dGVyKHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7CisgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgp
LT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rpb25TdHJpbmdJbmRleGVkUHJvcGVy
dHlHZXR0ZXI8Q29sbGVjdGlvbj4sIDAsIDAsIDAsIGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlF
bnVtZXJhdG9yPENvbGxlY3Rpb24+KTsKK30KIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b09wdGlvbnNDb2xsZWN0aW9uU2V0dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4sIEhUTUxTZWxlY3RFbGVtZW50Kik7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9PcHRp
b25zQ29sbGVjdGlvblNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
LCBIVE1MU2VsZWN0RWxlbWVudCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
aAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSwxMSBAQAogICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmpl
Y3QoRXZlbnRUYXJnZXQqKTsKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3QoV29ya2VyQ29udGV4dCopOwogCisgICAgICAg
IHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdG9WOChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSwgdm9pZCogaW1wbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRv
VjgodHlwZSwgdHlwZSwgaW1wbCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgaW5pdFY4SWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCBpbml0Q29udGV4dElmTmVlZGVk
KCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZUNoYW5uZWwuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OE1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNjYsOCArNjcsOCBAQAogICAg
IC8vIENyZWF0ZSByZWZlcmVuY2VzIGZyb20gdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgdG8g
dGhlIHR3bwogICAgIC8vIE1lc3NhZ2VQb3J0IHdyYXBwZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IHRo
ZSBNZXNzYWdlUG9ydCB3cmFwcGVycwogICAgIC8vIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGUg
TWVzc2FnZUNoYW5uZWwgd3JhcHBlciBpcyBhcm91bmQuCi0gICAgbWVzc2FnZUNoYW5uZWwtPlNl
dEludGVybmFsRmllbGQoVjhNZXNzYWdlQ2hhbm5lbDo6cG9ydDFJbmRleCwgVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBvYmotPnBvcnQx
KCkpKTsKLSAgICBtZXNzYWdlQ2hhbm5lbC0+U2V0SW50ZXJuYWxGaWVsZChWOE1lc3NhZ2VDaGFu
bmVsOjpwb3J0MkluZGV4LCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6TUVTU0FHRVBPUlQsIG9iai0+cG9ydDIoKSkpOworICAgIG1lc3NhZ2VDaGFubmVsLT5T
ZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNoYW5uZWw6OnBvcnQxSW5kZXgsIHRvVjgob2JqLT5w
b3J0MSgpKSk7CisgICAgbWVzc2FnZUNoYW5uZWwtPlNldEludGVybmFsRmllbGQoVjhNZXNzYWdl
Q2hhbm5lbDo6cG9ydDJJbmRleCwgdG9WOChvYmotPnBvcnQyKCkpKTsKIAogICAgIC8vIFNldHVw
IHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMuCiAgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKG1lc3NhZ2VDaGFubmVsLCBWOENsYXNzSW5kZXg6Ok1FU1NB
R0VDSEFOTkVMLCBvYmouZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
NTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFHcmlkQ29sdW1uTGlz
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBEYXRhR3Jp
ZENvbHVtbiogcmVzdWx0ID0gaW1wLT5pdGVtV2l0aE5hbWUodG9XZWJDb3JlU3RyaW5nKG5hbWUp
KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpEQVRBR1JJRENPTFVNTiwgcmVzdWx0KTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQp
OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJWOFNRTEVycm9yLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjEsNyArNjIsNyBAQAogICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBzY29wZShjb250ZXh0KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10g
PSB7Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpTUUxFUlJPUiwgZXJyb3IpCisgICAgICAgIHRvVjgoZXJyb3IpCiAgICAgfTsKIAogICAgIC8v
IFByb3RlY3QgdGhlIGZyYW1lIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0
ZW1lbnRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDggQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiVjhDdXN0
b21Wb2lkQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJWOFNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUg
IlY4U1FMVHJhbnNhY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MSw4ICs2
Myw4IEBACiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFuc2FjdGlvbiks
Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpT
UUxSRVNVTFRTRVQsIHJlc3VsdFNldCkKKyAgICAgICAgdG9WOCh0cmFuc2FjdGlvbiksCisgICAg
ICAgIHRvVjgocmVzdWx0U2V0KQogICAgIH07CiAKICAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1
bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0
MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw5IEBACiAjaW5jbHVkZSAiSFRNTENv
bGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOE5hbWVk
Tm9kZXNDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCisjaW5jbHVkZSAiVjhOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDgsNyArNDksNyBAQAogICAgIFJlZlB0cjxOb2RlPiBmb3JtRWxlbWVudCA9IGZvcm0tPmVsZW1l
bnRzKCktPml0ZW0oaW5kZXgpOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChmb3JtRWxlbWVudC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0
b1Y4KGZvcm1FbGVtZW50LnJlbGVhc2UoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEhUTUxGb3JtRWxlbWVudDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTc0LDEwICs3NSwxMCBA
QAogICAgIEFTU0VSVCghZWxlbWVudHMuaXNFbXB0eSgpKTsKIAogICAgIGlmIChlbGVtZW50cy5z
aXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4
T2JqZWN0KGVsZW1lbnRzLmF0KDApLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGVs
ZW1lbnRzLmF0KDApLnJlbGVhc2UoKSk7CiAKICAgICBOb2RlTGlzdCogY29sbGVjdGlvbiA9IG5l
dyBWOE5hbWVkTm9kZXNDb2xsZWN0aW9uKGVsZW1lbnRzKTsKLSAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBjb2xsZWN0aW9u
KTsKKyAgICByZXR1cm4gdG9WOChjb2xsZWN0aW9uKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0MiwxNiBAQAogCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhXZWJHTEFycmF5LmgiCisjaW5jbHVkZSAiVjhXZWJHTEJ1
ZmZlci5oIgogI2luY2x1ZGUgIlY4V2ViR0xCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdM
RmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUg
IlY4V2ViR0xJbnRBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xQcm9ncmFtLmgiCisjaW5jbHVk
ZSAiVjhXZWJHTFJlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4V2ViR0xTaGFkZXIuaCIKICNp
bmNsdWRlICJWOFdlYkdMU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xUZXh0dXJlLmgi
CiAjaW5jbHVkZSAiVjhXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogI2luY2x1ZGUgIlY4V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZEludEFycmF5Lmgi
CkBAIC0xOTEsMjMgKzE5NSwyMyBAQAogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVVuc2ln
bmVkTG9uZzoKICAgICAgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoaW5m
by5nZXRVbnNpZ25lZExvbmcoKSk7CiAgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xC
dWZmZXI6Ci0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6V0VCR0xCVUZGRVIsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAgICAg
IHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CiAgICAgY2FzZSBXZWJHTEdldElu
Zm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWSwgaW5mby5nZXRX
ZWJHTEZsb2F0QXJyYXkoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xGbG9h
dEFycmF5KCkpOwogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6
Ci0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6V0VCR0xGUkFNRUJVRkZFUiwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOworICAg
ICAgICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMRnJhbWVidWZmZXIoKSk7CiAgICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xJbnRBcnJheToKLSAgICAgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpXRUJHTElOVEFSUkFZLCBpbmZv
LmdldFdlYkdMSW50QXJyYXkoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xJ
bnRBcnJheSgpKTsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKICAg
ICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgogICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKLSAgICAgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpXRUJHTFBST0dSQU0sIGluZm8u
Z2V0V2ViR0xQcm9ncmFtKCkpOworICAgICAgICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMUHJv
Z3JhbSgpKTsKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoK
LSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpXRUJHTFJFTkRFUkJVRkZFUiwgaW5mby5nZXRXZWJHTFJlbmRlcmJ1ZmZlcigpKTsKKyAg
ICAgICAgcmV0dXJuIHRvVjgoaW5mby5nZXRXZWJHTFJlbmRlcmJ1ZmZlcigpKTsKICAgICBjYXNl
IFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFRleHR1cmU6Ci0gICAgICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCR0xURVhUVVJFLCBpbmZv
LmdldFdlYkdMVGV4dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW5mby5nZXRXZWJHTFRl
eHR1cmUoKSk7CiAgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheToKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZLCBpbmZvLmdldFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5
dGVBcnJheSgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDkgQEAKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOE1lc3NhZ2VQ
b3J0Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgog
I2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQpAQCAtNzA4
LDcgKzcxMCw3IEBACiAKICAgICAgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5z
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCB1c2Vy
R2VzdHVyZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGZyYW1lLT5kb21XaW5kb3coKSk7
CisgICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5kb21XaW5kb3coKSk7CiAgICAgfQogCiAgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmcmFtZSBvciBhIG5ldyB3aW5kb3csIHdlJ2xsIHVz
ZSB0aGUKQEAgLTc2OCw3ICs3NzAsNyBAQAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAg
ICByZXR1cm4gdG9WOChmcmFtZS0+ZG9tV2luZG93KCkpOwogfQogCiAKQEAgLTc4Niw3ICs3ODgs
NyBAQAogCiAgICAgRnJhbWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS0+Y2hpbGQoaW5kZXgpOwog
ICAgIGlmIChjaGlsZCkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGNoaWxkLT5kb21XaW5kb3coKSk7CisgICAg
ICAgIHJldHVybiB0b1Y4KGNoaWxkLT5kb21XaW5kb3coKSk7CiAKICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIH0KQEAgLTgwOSw3ICs4MTEsNyBAQAogICAgIEF0b21pY1N0
cmluZyBwcm9wTmFtZSA9IHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKG5hbWUpOwogICAg
IEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCktPmNoaWxkKHByb3BOYW1lKTsKICAgICBpZiAo
Y2hpbGQpCi0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjaGlsZC0+ZG9tV2luZG93KCkpOworICAgICAgICByZXR1
cm4gdG9WOChjaGlsZC0+ZG9tV2luZG93KCkpOwogCiAgICAgLy8gU2VhcmNoIElETCBmdW5jdGlv
bnMgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBlCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
c3VsdCA9IGluZm8uSG9sZGVyKCktPkdldFJlYWxOYW1lZFByb3BlcnR5KG5hbWUpOwpAQCAtODI0
LDggKzgyNiw4IEBACiAgICAgICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGl0ZW1zID0g
ZG9jLT53aW5kb3dOYW1lZEl0ZW1zKHByb3BOYW1lKTsKICAgICAgICAgICAgIGlmIChpdGVtcy0+
bGVuZ3RoKCkgPj0gMSkgewogICAgICAgICAgICAgICAgIGlmIChpdGVtcy0+bGVuZ3RoKCkgPT0g
MSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVU
b1Y4T2JqZWN0KGl0ZW1zLT5maXJzdEl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElP
TiwgaXRlbXMucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvVjgoaXRl
bXMtPmZpcnN0SXRlbSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9WOChpdGVtcy5yZWxl
YXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJWOE5hbWVkTm9kZXNDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgi
CisjaW5jbHVkZSAiVjhOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDksMTAgKzUxLDEwIEBACiAgICAgICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAg
ICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QobmFtZWRJdGVt
cy5hdCgwKS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gdG9WOChuYW1lZEl0ZW1zLmF0KDAp
LnJlbGVhc2UoKSk7CiAKICAgICBOb2RlTGlzdCogbGlzdCA9IG5ldyBWOE5hbWVkTm9kZXNDb2xs
ZWN0aW9uKG5hbWVkSXRlbXMpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGxpc3QpOworICAgIHJldHVybiB0b1Y4KGxp
c3QpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEl0ZW0oSFRNTEFsbENv
bGxlY3Rpb24qIGNvbGxlY3Rpb24sIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd1bWVudCkKQEAg
LTY4LDcgKzcwLDcgQEAKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gY29sbGVj
dGlvbi0+aXRlbShpbmRleC0+VWludDMyVmFsdWUoKSk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0
b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1M
QWxsQ29sbGVjdGlvbjo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTEzMCw3ICsxMzIsNyBAQAog
ICAgIE5vZGUqIG5vZGUgPSBpbXAtPm5hbWVkSXRlbShuYW1lKTsKICAgICB3aGlsZSAobm9kZSkg
ewogICAgICAgICBpZiAoIWN1cnJlbnQpCi0gICAgICAgICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZSk7CisgICAgICAgICAgICByZXR1cm4gdG9WOChu
b2RlKTsKIAogICAgICAgICBub2RlID0gaW1wLT5uZXh0TmFtZWRJdGVtKG5hbWUpOwogICAgICAg
ICBjdXJyZW50LS07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsMTAgQEAKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxl
bWVudC5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3LDEwICs3OCwxMCBAQAogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIGlmIChyZXN1bHQtPmlzMmQoKSkK
LSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KHJlc3VsdCkpOwogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVzdWx0LT5pczNkKCkpCi0gICAgICAg
IHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VC
R0xSRU5ERVJJTkdDT05URVhULCByZXN1bHQpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZXN1bHQpKTsKICNlbmRpZgogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAiTm9kZS5o
IgogI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIlhQYXRoUmVzdWx0Lmgi
Ci0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJWOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5o
IgorI2luY2x1ZGUgIlY4RE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJWOEhUTUxEb2N1
bWVudC5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhOb2Rl
LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4U1ZHRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJWOFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4WFBhdGhOU1Jl
c29sdmVyLmgiCiAjaW5jbHVkZSAiVjhYUGF0aFJlc3VsdC5oIgogCkBAIC04Miw3ICs4Myw3IEBA
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiAKLSAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlhQQVRIUkVT
VUxULCByZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgp
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RG9jdW1lbnQ6OmdldENTU0NhbnZhc0Nv
bnRleHRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtOTgsMTAgKzk5LDEw
IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAg
ICAgaWYgKHJlc3VsdC0+aXMyZCgpKQotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKj4ocmVzdWx0KSk7CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKICAgICBlbHNlIGlmIChy
ZXN1bHQtPmlzM2QoKSkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpXRUJHTFJFTkRFUklOR0NPTlRFWFQsIHJlc3VsdCk7CisgICAg
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJlc3Vs
dCkpOwogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTEyNyw3ICsxMjgsNyBAQAogCiAg
ICAgLy8gR2VuZXJhdGUgYSB3cmFwcGVyLgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4RG9j
dW1lbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2Jq
ZWN0KGRvY3VtZW50LT5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd3JhcHBlciA9IHRvVjgoZG9jdW1lbnQtPmltcGxlbWVudGF0aW9uKCkpOwogCiAgICAgLy8g
U3RvcmUgdGhlIHdyYXBwZXIgaW4gdGhlIGludGVybmFsIGZpZWxkLgogICAgIGluZm8uSG9sZGVy
KCktPlNldEludGVybmFsRmllbGQoaW1wbGVtZW50YXRpb25JbmRleCwgd3JhcHBlcik7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
OCBAQAogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4SFRNTEFsbENv
bGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOE5hbWVkTm9kZXNDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSAiVjhOb2RlLmgiCisjaW5jbHVkZSAiVjhOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlY4UHJveHku
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksMTAgKzUxLDEwIEBACiAgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUo
KSA9PSAxKQotICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QobmFtZWRJdGVtcy5hdCgwKS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gdG9WOChuYW1l
ZEl0ZW1zLmF0KDApLnJlbGVhc2UoKSk7CiAKICAgICBOb2RlTGlzdCogbGlzdCA9IG5ldyBWOE5h
bWVkTm9kZXNDb2xsZWN0aW9uKG5hbWVkSXRlbXMpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGxpc3QpOworICAgIHJl
dHVybiB0b1Y4KGxpc3QpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEl0
ZW0oSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd1
bWVudCkKQEAgLTY4LDcgKzcwLDcgQEAKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0
ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleC0+VWludDMyVmFsdWUoKSk7Ci0gICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOworICAg
IHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhIVE1MQ29sbGVjdGlvbjo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTEzMCw3ICsxMzIs
NyBAQAogICAgIE5vZGUqIG5vZGUgPSBpbXAtPm5hbWVkSXRlbShuYW1lKTsKICAgICB3aGlsZSAo
bm9kZSkgewogICAgICAgICBpZiAoIWN1cnJlbnQpCi0gICAgICAgICAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZSk7CisgICAgICAgICAgICByZXR1cm4g
dG9WOChub2RlKTsKIAogICAgICAgICBub2RlID0gaW1wLT5uZXh0TmFtZWRJdGVtKG5hbWUpOwog
ICAgICAgICBjdXJyZW50LS07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBA
QAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiVjhCZWZvcmVMb2FkRXZlbnQuaCIKICNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENsaXBib2FyZC5oIgogI2luY2x1ZGUg
IlY4Q29tcG9zaXRpb25FdmVudC5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4RXJyb3JFdmVudC5oIgogI2luY2x1ZGUgIlY4S2V5Ym9hcmRFdmVudC5oIgogI2lu
Y2x1ZGUgIlY4TWVzc2FnZUV2ZW50LmgiCkBAIC03MCw3ICs3MCw3IEBACiAgICAgRXZlbnQqIGV2
ZW50ID0gVjhFdmVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAKICAgICBpZiAoZXZlbnQt
PmlzRHJhZ0V2ZW50KCkpCi0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpLT5jbGlwYm9hcmQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKIAogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CkBAIC04MCw3ICs4MCw3IEBACiAgICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAKICAgICBpZiAoZXZlbnQtPmlzQ2xpcGJvYXJkRXZl
bnQoKSkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpDTElQQk9BUkQsIHN0YXRpY19jYXN0PENsaXBib2FyZEV2ZW50Kj4oZXZlbnQp
LT5jbGlwYm9hcmQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENsaXBib2Fy
ZEV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
dHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJW
OEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTdHls
ZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTIsNyBAQAogICAg
IGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAK
LSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlNUWUxFU0hFRVQsIGl0ZW0tPnNoZWV0KCkpOworICAgIHJldHVybiB0b1Y4KGl0ZW0tPnNoZWV0
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1
NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOE1l
c3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKIApAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHMtPnNpemUoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwb3J0cy0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHBvcnRBcnJheS0+
U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSksIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgKCpwb3J0cylbaV0uZ2V0KCkpKTsKKyAgICAgICAg
cG9ydEFycmF5LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpKSwgdG9WOCgoKnBvcnRzKVtpXS5nZXQo
KSkpOwogCiAgICAgcmV0dXJuIHBvcnRBcnJheTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0
MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAKICNpbmNsdWRlICJOYW1lZE5v
ZGVNYXAuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNpbmNs
dWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00OSw3ICs0OSw3
IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwog
fQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOYW1lZE5vZGVNYXA6Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCkBAIC03MCw3ICs3MCw3IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4
KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChOYW1l
ZE5vZGVNYXAqIGltcGwpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJ
bWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1
NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CisjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTEltYWdlRWxlbWVudC5o
IgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIApAQCAtNzgsNyArNzksNyBAQAogCiAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBkb2N1bWVudCBpcyBhZGRlZCB0byB0aGUgRE9NIE5vZGUgbWFwLiBPdGhlcndp
c2UsIHRoZSBIVE1MSW1hZ2VFbGVtZW50IGluc3RhbmNlCiAgICAgLy8gbWF5IGVuZCB1cCBiZWlu
ZyB0aGUgb25seSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNjb2xsZWN0ZWQgcHJl
bWF0dXJlbHkuCi0gICAgVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZG9jdW1l
bnQpOworICAgIHRvVjgoZG9jdW1lbnQpOwogCiAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+
IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvY3VtZW50
KTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApIHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDU0
MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U3Rh
dGUuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC01NCw3ICs1NCw3IEBACiAgICAgaWYgKCFvYmplY3Qp
CiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydE5vZGVUb1Y4T2JqZWN0KG9iamVjdCk7CisgICAgcmV0dXJuIHRvVjgob2JqZWN0KTsK
IH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZUNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1NDI5
MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAKICNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhIVE1MQWxsQ29sbGVjdGlv
bi5oIgorI2luY2x1ZGUgIlY4SFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgorI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAt
OTIsMTIgKzk2LDEyIEBACiAgICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtcy0+Zmlyc3RJdGVtKCk7
CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IDA7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1l
RWxlbWVudCo+KG5vZGUpLT5jb250ZW50RnJhbWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJh
bWUtPmRvbVdpbmRvdygpKTsKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5kb21XaW5k
b3coKSk7CiAKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KG5vZGUpOworICAgICAgICByZXR1cm4gdG9WOChub2RlKTsKICAgICB9CiAKLSAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xM
RUNUSU9OLCBpdGVtcy5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4KGl0ZW1zLnJlbGVhc2Uo
KSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxEb2N1bWVudDo6aW5kZXhlZFBy
b3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvICZpbmZv
KSAKQEAgLTE4MiwxMCArMTg2LDkgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxEb2N1
bWVudDo6YWxsQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3Vt
ZW50LmFsbC5fZ2V0Iik7Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKICAgICBIVE1MRG9jdW1lbnQq
IGh0bWxEb2N1bWVudCA9IFY4SFRNTERvY3VtZW50Ojp0b05hdGl2ZShob2xkZXIpOwotICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENP
TExFQ1RJT04sIGh0bWxEb2N1bWVudC0+YWxsKCkpOworICAgIHJldHVybiB0b1Y4KGh0bWxEb2N1
bWVudC0+YWxsKCkpOwogfQogCiB2b2lkIFY4SFRNTERvY3VtZW50OjphbGxBY2Nlc3NvclNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTAgKzUzLDEwIEBACiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3Qo
Q2FudmFzU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkK
LSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpDQU5WQVNHUkFESUVOVCwgc3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpOworICAgICAgICBy
ZXR1cm4gdG9WOChzdHlsZS0+Y2FudmFzR3JhZGllbnQoKSk7CiAKICAgICBpZiAoc3R5bGUtPmNh
bnZhc1BhdHRlcm4oKSkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBzdHlsZS0+Y2FudmFzUGF0dGVybigp
KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3R5bGUtPmNhbnZhc1BhdHRlcm4oKSk7CiAKICAgICBy
ZXR1cm4gdjhTdHJpbmcoc3R5bGUtPmNvbG9yKCkpOwogfQpAQCAtMzQ4LDcgKzM0OCw3IEBACiAg
ICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRU
RVJOLCBwYXR0ZXJuLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHBhdHRlcm4ucmVs
ZWFzZSgpKTsKICAgICB9CiAKICAgICBpZiAoVjhIVE1MQ2FudmFzRWxlbWVudDo6SGFzSW5zdGFu
Y2UoYXJnKSkgewpAQCAtMzU5LDcgKzM1OSw3IEBACiAgICAgICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOwogICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybiB0b1Y4KHBhdHRlcm4ucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9FUlIpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwxMyBAQAogI2luY2x1ZGUgPGNvbmZp
Zy5oPgogCiAjaWYgRU5BQkxFKFNWRykKLQogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCiAKICNpbmNsdWRlICJTVkdFeGNlcHRpb24uaCIKLQogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKICNp
bmNsdWRlICJWOFNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlY4U1ZHUE9EVHlwZVdyYXBwZXIuaCIK
LSNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTYsNyAr
NTMsOCBAQAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0xID0gKlY4U1ZHUE9EVHlwZVdyYXBw
ZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtMiA9ICpWOFNWR1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0
aW9uTWF0cml4Pjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBd
KSk7CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlNWR01BVFJJWCwgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlv
bk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0TGVmdChtMikpKTsKKyAgICBSZWZQdHI8VjhTVkdTdGF0
aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPiB3cmFwcGVyID0gVjhTVkdT
dGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmNyZWF0ZShtMS5tdWx0
TGVmdChtMikpOworICAgIHJldHVybiB0b1Y4KHdyYXBwZXIuZ2V0KCkpOwogfQogCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhTVkdNYXRyaXg6OmludmVyc2VDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQpAQCAtNzQsNyArNzIsOCBAQAogICAgICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIFY4U1ZHU3RhdGljUE9EVHlwZVdy
YXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVhdGUocmVzdWx0KSk7CisgICAgUmVmUHRy
PFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+ID4gd3JhcHBl
ciA9IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpjcmVh
dGUocmVzdWx0KTsKKyAgICByZXR1cm4gdG9WOCh3cmFwcGVyLmdldCgpKTsKIH0KIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4U1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTk0LDcgKzkzLDggQEAKICAgICAgICAgcmV0dXJu
IHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogICAgIH0KIAotICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklYLCBWOFNWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6Y3JlYXRlKHJlc3VsdCkpOwor
ICAgIFJlZlB0cjxWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4
PiA+IHdyYXBwZXIgPSBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0
cml4Pjo6Y3JlYXRlKHJlc3VsdCk7CisgICAgcmV0dXJuIHRvVjgod3JhcHBlci5nZXQoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw3ICs4Nyw3IEBACiAgICAgaWYgKGVjKQogICAgICAgICB0aHJvd0Vycm9yKGVjKTsKIAot
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQucmVs
ZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RWxlbWVudDo6c2V0QXR0cmlidXRlTlNDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgaWYgKGVjKQogICAg
ICAgICB0aHJvd0Vycm9yKGVjKTsKIAotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChyZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQu
cmVsZWFzZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRWxlbWVudCogaW1w
bCwgYm9vbCBmb3JjZU5ld09iamVjdCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBACiAK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOENvbGxlY3Rpb24uaCIKLSNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEhUTUxPcHRpb25FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Tm9k
ZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTIz
LDcgKzEyMyw3IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVU
b1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MT3B0aW9uc0NvbGxlY3Rp
b246OmluZGV4ZWRQcm9wZXJ0eVNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQAogI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgot
I2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NSw3ICs1NSw3
IEBACiAgICAgICAgIGlmICghZG9jKQogICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvYy0+ZnJhbWUoKSkKLSAgICAgICAgICAg
IHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoZnJh
bWUtPmRvbVdpbmRvdygpKTsKICAgICB9CiAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9j
YXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsOCArMjcsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21C
aW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4TG9jYXRpb24u
aCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDcg
KzM5LDcgQEAKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAKICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IGRvY3VtZW50LT5mcmFtZSgpLT5kb21XaW5kb3coKTsKLSAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCB3aW5kb3ct
PmxvY2F0aW9uKCkpOworICAgIHJldHVybiB0b1Y4KHdpbmRvdy0+bG9jYXRpb24oKSk7CiB9CiAK
IHZvaWQgVjhEb2N1bWVudDo6bG9jYXRpb25BY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxl
Y3RFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDExIEBACiAKICNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcu
aCIKICNpbmNsdWRlICJWOEhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiVjhIVE1MU2Vs
ZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlY4TmFtZWROb2Rlc0NvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlICJWOE5vZGUuaCIKKyNpbmNsdWRlICJWOE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiVjhQcm94
eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NywxMCArNjgsMTAgQEAKICAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKICAgICBpZiAoaXRlbXMuc2l6ZSgp
ID09IDEpCi0gICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChpdGVtcy5hdCgwKS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gdG9WOChpdGVtcy5hdCgw
KS5yZWxlYXNlKCkpOwogCiAgICAgTm9kZUxpc3QqIGxpc3QgPSBuZXcgVjhOYW1lZE5vZGVzQ29s
bGVjdGlvbihpdGVtcyk7Ci0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgbGlzdCk7CisgICAgcmV0dXJuIHRvVjgobGlzdCk7
CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxTZWxlY3RFbGVtZW50OjppbmRleGVk
UHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCkBAIC04MCw3ICs4MSw3IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4KHJl
c3VsdC5yZWxlYXNlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MU2VsZWN0
RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCShyZXZp
c2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw4IEBACiAjaW5jbHVkZSAiVjhOb2Rl
TGlzdC5oIiAKIAogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0KICNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKICNp
bmNsdWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01Nyw3ICs1
Niw3IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRl
cmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KHJlc3VsdC5yZWxlYXNlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkp
OwogfQogCiAvLyBOZWVkIHRvIHN1cHBvcnQgY2FsbCBzbyB0aGF0IGxpc3QoMCkgd29ya3MuCkBA
IC03NSw3ICs3NCw3IEBACiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBS
ZWZQdHI8Tm9kZT4gcmVzdWx0ID0gbGlzdC0+aXRlbShpbmRleC0+VWludDMyVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxl
YXNlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlm
aWNhdGlvbkNlbnRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3BwCShyZXZpc2lvbiA1NDI5MikK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIk5vdGlmaWNh
dGlvbi5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiVjhOb3RpZmljYXRpb24uaCIKQEAgLTk1LDcgKzk0LDcgQEAKICAgICBpZiAobm90aWZp
Y2F0aW9uQ2VudGVyLT5jb250ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKQogICAgICAgICByZXR1
cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uLmdldCgpKTsKIAotICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9O
LCBub3RpZmljYXRpb24uZ2V0KCkpOworICAgIHJldHVybiB0b1Y4KG5vdGlmaWNhdGlvbi5nZXQo
KSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNhdGlvbkNlbnRlcjo6Y3Jl
YXRlTm90aWZpY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEx
Miw3ICsxMTEsNyBAQAogICAgIGlmIChub3RpZmljYXRpb25DZW50ZXItPmNvbnRleHQoKS0+aXNX
b3JrZXJDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBub3RpZmlj
YXRpb24uZ2V0KCkpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlmaWNhdGlvbi5nZXQoKSk7CisgICAg
cmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4Tm90aWZpY2F0aW9uQ2VudGVyOjpyZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUg
IlY4RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJWOERvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRl
ICJWOE5vZGUuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiWFNMVFByb2Nlc3Nv
ci5oIgpAQCAtNzgsNyArNzgsNyBAQAogICAgIE5vZGUqIHNvdXJjZSA9IFY4Tm9kZTo6dG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CiAgICAgRG9jdW1lbnQq
IG93bmVyID0gVjhEb2N1bWVudDo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzFdKSk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHJlc3VsdCA9IGltcC0+
dHJhbnNmb3JtVG9GcmFnbWVudChzb3VyY2UsIG93bmVyKTsKLSAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgcmV0dXJu
IHRvVjgocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKIApAQCAtOTksNyArOTksNyBAQAogICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwor
ICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCiAKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
Vm9pZENhbGxiYWNrLmgiICAvLyBGb3IgaW52b2tlQ2FsbGJhY2sKKyNpbmNsdWRlICJWOFBvc2l0
aW9uRXJyb3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw3ICs1NCw3IEBACiAg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCiAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OlBPU0lUSU9ORVJST1IsIGVycm9yKQorICAgICAgICB0b1Y4KGVy
cm9yKQogICAgIH07CiAKICAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJh
Y2sgcmV0dXJucy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtl
ckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhU
cmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBACiAjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgiCiAj
aW5jbHVkZSAiVjhQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTUy
LDcgKzUyLDcgQEAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7
CiAKLSAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0
KTsKKyAgICByZXR1cm4gdG9WOChvYmplY3QpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhUcmVlV2Fsa2VyOjpwYXJlbnROb2RlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogCiAjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKQEAg
LTg1LDcgKzg0LDcgQEAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGluc3Bl
Y3RlZENvbnRleHQpOwogCiAgICAgLy8gQ2FsbCBjdXN0b20gY29kZSB0byBjcmVhdGUgSW5qZWN0
ZWRTY3JpcEhvc3Qgd3JhcHBlciBzcGVjaWZpYyBmb3IgdGhlIGNvbnRleHQKLSAgICAvLyBpbnN0
ZWFkIG9mIGNhbGxpbmcgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdCB0aGF0IHdvdWxk
IGNyZWF0ZSB0aGUKKyAgICAvLyBpbnN0ZWFkIG9mIGNhbGxpbmcgdG9WOCgpIHRoYXQgd291bGQg
Y3JlYXRlIHRoZQogICAgIC8vIHdyYXBwZXIgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KICAgICAv
LyBGSVhNRTogbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgZ2VuZXJpYyBiaW5kaW5ncyBmYWN0b3J5
IGZvciBJbmplY3RlZFNjcmlwdEhvc3QuCiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNjcmlw
dEhvc3RXcmFwcGVyID0gY3JlYXRlSW5qZWN0ZWRTY3JpcHRIb3N0VjhXcmFwcGVyKGluamVjdGVk
U2NyaXB0SG9zdCk7CkBAIC0xMzAsNyArMTI5LDcgQEAKICAgICBpZiAoIWljKQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT0RFLCBub2RlKTsKKyAgICByZXR1cm4gdG9WOChu
b2RlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0Ojpw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
QEAgLTE2MCw3ICsxNTksNyBAQAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IGhvc3QtPmRhdGFi
YXNlRm9ySWQoYXJnc1swXS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKICAgICBpZiAoIWRhdGFiYXNl
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0PERhdGFiYXNlPihWOENsYXNzSW5kZXg6OkRBVEFCQVNFLCBk
YXRhYmFzZSk7CisgICAgcmV0dXJuIHRvVjgoZGF0YWJhc2UpOwogfQogCiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERhdGFiYXNlQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9F
bGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlICJWOERvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhIVE1MQXVkaW9F
bGVtZW50LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCkBAIC03OCw3ICs3OSw3IEBACiAKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAu
IE90aGVyd2lzZSwgdGhlIEhUTUxBdWRpb0VsZW1lbnQgaW5zdGFuY2UKICAgICAvLyBtYXkgZW5k
IHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY2NvbGxl
Y3RlZCBwcmVtYXR1cmVseS4KLSAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChkb2N1bWVudCk7CisgICAgdG9WOChkb2N1bWVudCk7CiAKICAgICBSZWZQdHI8SFRNTEF1ZGlv
RWxlbWVudD4gYXVkaW8gPSBuZXcgSFRNTEF1ZGlvRWxlbWVudChIVE1MTmFtZXM6OmF1ZGlvVGFn
LCBkb2N1bWVudCk7CiAgICAgYXVkaW8tPnNldEF1dG9idWZmZXIodHJ1ZSk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDU0MjkyKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIgorI2luY2x1ZGUgIlY4U1FMRXJyb3IuaCIK
KyNpbmNsdWRlICJWOFNRTFRyYW5zYWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNjEsOCArNjMsOCBAQAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsK
IAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7Ci0gICAgICAgIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxUUkFOU0FDVElPTiwgdHJh
bnNhY3Rpb24pLAotICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6U1FMRVJST1IsIGVycm9yKQorICAgICAgICB0b1Y4KHRyYW5zYWN0aW9uKSwKKyAg
ICAgICAgdG9WOChlcnJvcikKICAgICB9OwogCiAgICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50
aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDU0
MjkyKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxi
YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJWOEN1c3RvbVZvaWRDYWxsYmFjay5oIiAgLy8gRm9yIGludm9rZUNh
bGxiYWNrCisjaW5jbHVkZSAiVjhHZW9wb3NpdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTUzLDcgKzU0LDcgQEAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4
dCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAgICBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6R0VPUE9TSVRJT04sIHBv
c2l0aW9uKQorICAgICAgICB0b1Y4KHBvc2l0aW9uKQogICAgIH07CiAKICAgICAvLyBQcm90ZWN0
IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlv
bkNhbGxiYWNrLmNwcAkocmV2aXNpb24gNTQyOTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9t
Vm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSAiVjhTUUxUcmFuc2FjdGlvbi5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTYyLDcgKzYzLDcgQEAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUg
c2NvcGUoY29udGV4dCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewot
ICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1FM
VFJBTlNBQ1RJT04sIHRyYW5zYWN0aW9uKQorICAgICAgICB0b1Y4KHRyYW5zYWN0aW9uKQogICAg
IH07CiAKICAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJu
cy4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuY3BwCShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4RXZlbnQuaCIKICNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0Lmgi
CiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCkBAIC04NCw3
ICs4NSw3IEBACiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAg
ICAvLyBHZXQgdGhlIFY4IHdyYXBwZXIgZm9yIHRoZSBldmVudCBvYmplY3QuCi0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRvVjhP
YmplY3QoZXZlbnQpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50ID0gdG9WOChl
dmVudCk7CiAKICAgICBpbnZva2VFdmVudEhhbmRsZXIoY29udGV4dCwgZXZlbnQsIGpzRXZlbnQp
OwogCg==
</data>
<flag name="review"
          id="30685"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>