<?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>202573</bug_id>
          
          <creation_ts>2019-10-04 01:42:23 -0700</creation_ts>
          <short_desc>Implement OffscreenCanvas.convertToBlob</short_desc>
          <delta_ts>2019-12-13 08:23:34 -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>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>202572</dependson>
          <blocked>183720</blocked>
    
    <blocked>202574</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1576774</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-04 01:42:23 -0700</bug_when>
    <thetext>Spec: https://html.spec.whatwg.org/multipage/canvas.html#dom-offscreencanvas-converttoblob</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578593</commentid>
    <comment_count>1</comment_count>
      <attachid>380629</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 03:54:49 -0700</bug_when>
    <thetext>Created attachment 380629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578691</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-10-10 09:29:01 -0700</bug_when>
    <thetext>Does this patch depend on something else that isn&apos;t landed yet? EWS couldn&apos;t process it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578694</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 09:35:23 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #2)
&gt; Does this patch depend on something else that isn&apos;t landed yet? EWS couldn&apos;t
&gt; process it.

Yes, thanks for the reminder to update the depends field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595758</commentid>
    <comment_count>4</comment_count>
      <attachid>384892</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-05 02:54:56 -0800</bug_when>
    <thetext>Created attachment 384892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595824</commentid>
    <comment_count>5</comment_count>
      <attachid>384892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-05 08:58:53 -0800</bug_when>
    <thetext>Comment on attachment 384892
Patch

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

I don’t see tests for all the different errors that convertToBlob can produce.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:183
&gt; +static Optional&lt;double&gt; qualityFromDouble(double qualityNumber)
&gt; +{
&gt; +    if (qualityNumber &lt; 0 || qualityNumber &gt; 1)
&gt; +        return WTF::nullopt;
&gt; +
&gt; +    return qualityNumber;
&gt; +}

This will return a NaN if passed a NaN. I suggest writing this instead:

    if (!(qualityNumber &gt;= 0 &amp;&amp; qualityNumber &lt;= 1))
        return WTF::nullopt;

That should return nullopt if passed a NaN.

And because it’s &quot;unrestricted double&quot; I think the value *can* be a NaN. But that doesn’t seem like it’s covered by tests. Are there tests that cover values outside the 0.0-1.0 range?

&gt; Source/WebCore/html/OffscreenCanvas.cpp:188
&gt; +        promise-&gt;reject(SecurityError);

I don’t see a test for this case.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:196
&gt; +        promise-&gt;reject(InvalidStateError);

I don’t see a test for this case.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:207
&gt; +        promise-&gt;reject(EncodingError);

I don’t see a test for this case.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:212
&gt; +    promise-&gt;resolveWithNewlyCreated&lt;IDLInterface&lt;Blob&gt;&gt;(blob);

I think we can remove one reference count churn by writing WTFMove(blob) here.

&gt; Source/WebCore/platform/MIMETypeRegistry.cpp:494
&gt; +    return createSupportedImageMIMETypesForEncoding().contains(mimeType);

This implementation likely doesn’t have acceptable performance. The Cocoa version of createSupportedImageMIMETypesForEncoding is quite inefficient and I suspect it’s not OK to call it repeatedly every time we process an image MIME type.

There may be another solution to making it work on multiple threads that avoids this inefficiency. There’s no need to alter String reference counts just to check if a String is in a map, so we might be able to make the idiom work where the set is created on the main thread and it’s safe to read it from any thread since it’s never modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595845</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-05 09:34:16 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 384892 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384892&amp;action=review
&gt; 
&gt; I don’t see tests for all the different errors that convertToBlob can
&gt; produce.
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:183
&gt; &gt; +static Optional&lt;double&gt; qualityFromDouble(double qualityNumber)
&gt; &gt; +{
&gt; &gt; +    if (qualityNumber &lt; 0 || qualityNumber &gt; 1)
&gt; &gt; +        return WTF::nullopt;
&gt; &gt; +
&gt; &gt; +    return qualityNumber;
&gt; &gt; +}
&gt; 
&gt; This will return a NaN if passed a NaN. I suggest writing this instead:
&gt; 
&gt;     if (!(qualityNumber &gt;= 0 &amp;&amp; qualityNumber &lt;= 1))
&gt;         return WTF::nullopt;
&gt; 
&gt; That should return nullopt if passed a NaN.

Nice catch. I pretty much copied this from qualityFromJSValue in HTMLCanvasElement.cpp, would that have the same issue?

&gt; And because it’s &quot;unrestricted double&quot; I think the value *can* be a NaN. But
&gt; that doesn’t seem like it’s covered by tests. Are there tests that cover
&gt; values outside the 0.0-1.0 range?
&gt; 
&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:188
&gt; &gt; +        promise-&gt;reject(SecurityError);
&gt; 
&gt; I don’t see a test for this case.

I think this is missing, I&apos;ll need to follow up in wpt.

&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:196
&gt; &gt; +        promise-&gt;reject(InvalidStateError);
&gt; 
&gt; I don’t see a test for this case.

I believe this is tested in imported/w3c/web-platform-tests/offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob(.w).html

&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:207
&gt; &gt; +        promise-&gt;reject(EncodingError);
&gt; 
&gt; I don’t see a test for this case.

Same here, will follow up in wpt.

&gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:212
&gt; &gt; +    promise-&gt;resolveWithNewlyCreated&lt;IDLInterface&lt;Blob&gt;&gt;(blob);
&gt; 
&gt; I think we can remove one reference count churn by writing WTFMove(blob)
&gt; here.

I&apos;m not sure why I didn&apos;t just write this as one line...

&gt; &gt; Source/WebCore/platform/MIMETypeRegistry.cpp:494
&gt; &gt; +    return createSupportedImageMIMETypesForEncoding().contains(mimeType);
&gt; 
&gt; This implementation likely doesn’t have acceptable performance. The Cocoa
&gt; version of createSupportedImageMIMETypesForEncoding is quite inefficient and
&gt; I suspect it’s not OK to call it repeatedly every time we process an image
&gt; MIME type.
&gt; 
&gt; There may be another solution to making it work on multiple threads that
&gt; avoids this inefficiency. There’s no need to alter String reference counts
&gt; just to check if a String is in a map, so we might be able to make the idiom
&gt; work where the set is created on the main thread and it’s safe to read it
&gt; from any thread since it’s never modified.

Yes, I suppose the main-thread assertion could just be removed for isSupportedImageMIMETypesForEncoding? It doesn&apos;t alter anything that I can see...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595862</commentid>
    <comment_count>7</comment_count>
      <attachid>384892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-05 10:03:18 -0800</bug_when>
    <thetext>Comment on attachment 384892
Patch

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

&gt;&gt;&gt; Source/WebCore/html/OffscreenCanvas.cpp:183
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; This will return a NaN if passed a NaN. I suggest writing this instead:
&gt;&gt; 
&gt;&gt;     if (!(qualityNumber &gt;= 0 &amp;&amp; qualityNumber &lt;= 1))
&gt;&gt;         return WTF::nullopt;
&gt;&gt; 
&gt;&gt; That should return nullopt if passed a NaN.
&gt;&gt; 
&gt;&gt; And because it’s &quot;unrestricted double&quot; I think the value *can* be a NaN. But that doesn’t seem like it’s covered by tests. Are there tests that cover values outside the 0.0-1.0 range?
&gt; 
&gt; Nice catch. I pretty much copied this from qualityFromJSValue in HTMLCanvasElement.cpp, would that have the same issue?

Yes, from code inspection alone, I think it would apply in HTMLCanvasElement’s toDataURL DOM function, too. Really the same issue: need a test case to be sure of what the behavior is with NaN and I am not sure we have one. Using an &quot;any&quot; argument means a lot of things might be wrong. Wonder if the intended behavior happens if you pass a boolean false, for example. Here in ImageEncodeOptions a false would turn into a 0, but probably not there.

&gt;&gt;&gt; Source/WebCore/html/OffscreenCanvas.cpp:196
&gt;&gt;&gt; +        promise-&gt;reject(InvalidStateError);
&gt;&gt; 
&gt;&gt; I don’t see a test for this case.
&gt; 
&gt; I believe this is tested in imported/w3c/web-platform-tests/offscreen-canvas/convert-to-blob/offscreencanvas.convert.to.blob(.w).html

Is it the one that says &quot;Test that call convertToBlob on a detached OffscreenCanvas throws exception&quot;? If so, then it’s still failing. So I suppose this will be covered once we fix the rest of what is making that fail.

&gt;&gt;&gt; Source/WebCore/platform/MIMETypeRegistry.cpp:494
&gt;&gt;&gt; +    return createSupportedImageMIMETypesForEncoding().contains(mimeType);
&gt;&gt; 
&gt;&gt; This implementation likely doesn’t have acceptable performance. The Cocoa version of createSupportedImageMIMETypesForEncoding is quite inefficient and I suspect it’s not OK to call it repeatedly every time we process an image MIME type.
&gt;&gt; 
&gt;&gt; There may be another solution to making it work on multiple threads that avoids this inefficiency. There’s no need to alter String reference counts just to check if a String is in a map, so we might be able to make the idiom work where the set is created on the main thread and it’s safe to read it from any thread since it’s never modified.
&gt; 
&gt; Yes, I suppose the main-thread assertion could just be removed for isSupportedImageMIMETypesForEncoding? It doesn&apos;t alter anything that I can see...

Maybe.

We couldn’t use it exactly as is, because we’d need to use a thread-safe way of initializing the global. C++ provides thread safety for initializing globals in general, but the WebKit project uses a compiler option that turns off that thread safety. Need to use call_once explicitly instead.

Then we’d need to audit potential thread safety issues in the HashMap::contains function. If the code does any reference count incrementing/decrementing at all, even by accident, then it would be a thread safety problem. Inspection of the reference count is safe, though. I wonder what we can do to both verify this and make sure someone doesn’t break it by accident in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596245</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-06 07:27:01 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 384892 [details]
&gt; &gt; Yes, I suppose the main-thread assertion could just be removed for isSupportedImageMIMETypesForEncoding? It doesn&apos;t alter anything that I can see...
&gt; 
&gt; Maybe.
&gt; 
&gt; We couldn’t use it exactly as is, because we’d need to use a thread-safe way
&gt; of initializing the global. C++ provides thread safety for initializing
&gt; globals in general, but the WebKit project uses a compiler option that turns
&gt; off that thread safety. Need to use call_once explicitly instead.
&gt; 
&gt; Then we’d need to audit potential thread safety issues in the
&gt; HashMap::contains function. If the code does any reference count
&gt; incrementing/decrementing at all, even by accident, then it would be a
&gt; thread safety problem. Inspection of the reference count is safe, though. I
&gt; wonder what we can do to both verify this and make sure someone doesn’t
&gt; break it by accident in the future.

I&apos;ve been reading through the HashMap code - HashMap::contains calls HashTable::contains, which calls HashTable::lookup which calls HashTable::inlineLookup.

In inlineLookup, there is code that isn&apos;t thread-safe inside the DUMP_HASHTABLE_STATS_PER_TABLE blocks. The non-per-table version uses atomic values and a mutex guarding the non-atomic values, but the per-table version does not. I guess this is pretty easily fixed by mirroring the non-per-table code.

Otherwise, HashTable::inlineLookup also calls out to:

checkKey
HashTranslator::equal
isEmptyBucket
isDeletedBucket

checkKey relies on HashTranslator::equal but is otherwise fine.

isEmptyBucket calls isHashTraitsEmptyValue, which appears safe (I have to admit, it got pretty gnarly for me to fully understand this part at a glance, but it looks like it&apos;s essentially just doing comparisons with constant values for the most part - though it would depend on the specified or derived Traits template parameter).

isDeletedBucket calls KeyTraits::isDeletedValue, which is much like the above, and should be safe (depending on the implementation of HashTraits).

No ref-manipulation is involved in the process that I can see, and the only unsafe part is the DUMP_HASHTABLE_STATS_PER_TABLE as mentioned above.

So contains/lookup look safe to use within a thread to me, assuming that the contents of the HashTable are guaranteed not to be changed during the lookup, and assuming that the implementation of HashTraits is also thread-safe (which all of the default implementations look to be).

I can&apos;t immediately think of how we could verify this beyond auditing the code like I&apos;ve done above (and I&apos;m sure there are people far more qualified than me to do it) and how to keep it thread-safe, assuming it is (which it appears to be, with that one exception). Perhaps a version of HashSet, or a parameter that lets you disable any modification after initialisation?


An alternative to this I suppose would be to use per-thread data to create/store an image MIME-types HashSet per thread, rather than using a static variable. Then we wouldn&apos;t need to worry about thread safety at all.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596247</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-06 07:40:20 -0800</bug_when>
    <thetext>(In reply to Chris Lord from comment #6)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:196
&gt; &gt; &gt; +        promise-&gt;reject(InvalidStateError);
&gt; &gt; 
&gt; &gt; I don’t see a test for this case.
&gt; 
&gt; I believe this is tested in
&gt; imported/w3c/web-platform-tests/offscreen-canvas/convert-to-blob/
&gt; offscreencanvas.convert.to.blob(.w).html

Following up on this, this still fails because the test relies on being able to transfer the OffscreenCanvas, which is bug 202574.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596831</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-09 08:34:17 -0800</bug_when>
    <thetext>(In reply to Chris Lord from comment #6)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; &gt; Source/WebCore/html/OffscreenCanvas.cpp:188
&gt; &gt; &gt; +        promise-&gt;reject(SecurityError);
&gt; &gt; 
&gt; &gt; I don’t see a test for this case.
&gt; 
&gt; I think this is missing, I&apos;ll need to follow up in wpt.

Of course, after writing the test I find this is actually explicitly tested in imagebitmap-renderingcontext/toBlob-origin-clean-offscreen.sub.html so it&apos;s just the EncodingError that isn&apos;t tested. I&apos;ve written tests for that and will submit them to wpt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596846</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-09 08:59:52 -0800</bug_when>
    <thetext>(In reply to Chris Lord from comment #10)
&gt; Of course, after writing the test I find this is actually explicitly tested
&gt; in imagebitmap-renderingcontext/toBlob-origin-clean-offscreen.sub.html so
&gt; it&apos;s just the EncodingError that isn&apos;t tested. I&apos;ve written tests for that
&gt; and will submit them to wpt.

One parting shot on this point:

If we want to be super-thorough (perhaps excessively so), we’d also make sure we have tests that check which of the exceptions is the one generated when there are multiple problems for the same call to make sure the precedence is correct. This kind of thing has been the source of WPT test failures in WebKit before and I suspect it has possibly even been the source of practical website incompatibilities in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596847</commentid>
    <comment_count>12</comment_count>
      <attachid>384892</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-09 09:00:28 -0800</bug_when>
    <thetext>Comment on attachment 384892
Patch

I’m tempted to mark this review+ but I think there is a new patch coming that addresses some of the comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596850</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-09 09:07:07 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 384892 [details]
&gt; Patch
&gt; 
&gt; I’m tempted to mark this review+ but I think there is a new patch coming
&gt; that addresses some of the comments?

Yes, I&apos;d hold off, one of the missing tests did actually expose a tiny bit of missing functionality (about 4 lines worth, but I&apos;d still prefer to have it reviewed) - the question of the best way to resolve the SupportedImageMIMETypesForEncoding issue is also still open.

Do we just remove the main-thread assert, or do we use per-thread data and create a new hash per thread (which is perhaps excessive, but perhaps more robust)? Or some other solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596851</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-09 09:09:03 -0800</bug_when>
    <thetext>(In reply to Chris Lord from comment #13)
&gt; Do we just remove the main-thread assert, or do we use per-thread data and
&gt; create a new hash per thread (which is perhaps excessive, but perhaps more
&gt; robust)? Or some other solution?

I’m torn. I suppose I’d lean towards per-thread data, rather than creating a new one every time the function is called. I’d love to eventually share only one global one across threads but I don’t see a way to do this easily that’s maintainably safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597130</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-10 01:45:05 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #14)
&gt; (In reply to Chris Lord from comment #13)
&gt; &gt; Do we just remove the main-thread assert, or do we use per-thread data and
&gt; &gt; create a new hash per thread (which is perhaps excessive, but perhaps more
&gt; &gt; robust)? Or some other solution?
&gt; 
&gt; I’m torn. I suppose I’d lean towards per-thread data, rather than creating a
&gt; new one every time the function is called. I’d love to eventually share only
&gt; one global one across threads but I don’t see a way to do this easily that’s
&gt; maintainably safe.

I agree, I&apos;ll do this.

Re EncodingError tests, I realised afterwards (and really, I should&apos;ve done the necessary reading beforehand...) that there&apos;s no way to trigger this from JS. Specifying an unsupported/invalid mimetype uses image/png (by spec), this only happens if there&apos;s some unspecified error in creating the image.

I did, however, discover that the worker exception tests are broken (they would always pass), so I&apos;ve fixed those and will include that fix. I&apos;ve opened a corresponding issue/pull-request on wpt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597134</commentid>
    <comment_count>16</comment_count>
      <attachid>385246</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-10 03:36:37 -0800</bug_when>
    <thetext>Created attachment 385246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597135</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-10 03:39:20 -0800</bug_when>
    <thetext>Just a note, there&apos;s a new failure in the worker tests for convertToBlob - this is correct and the previous pass was wrong because of https://github.com/web-platform-tests/wpt/issues/20694 - this test will be fixed by bug 202574.

Although SecurityError is checked by a test, it&apos;s not a test we&apos;ve imported and it relies on unimplemented functionality, so it does make sense to add SecurityError tests - I&apos;ve done so, and the corresponding wpt bug: https://github.com/web-platform-tests/wpt/issues/20698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597139</commentid>
    <comment_count>18</comment_count>
      <attachid>385248</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-10 03:54:06 -0800</bug_when>
    <thetext>Created attachment 385248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597355</commentid>
    <comment_count>19</comment_count>
      <attachid>385248</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-10 14:38:38 -0800</bug_when>
    <thetext>Comment on attachment 385248
Patch

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

Looks great, but I’m not 100% happy with every detail.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:212
&gt; +    promise-&gt;resolveWithNewlyCreated&lt;IDLInterface&lt;Blob&gt;&gt;(blob);

What about the WTFMove I mentioned last time? Would it not save one little reference count churn here?

&gt; Source/WebCore/html/OffscreenCanvas.cpp:222
&gt; +    auto* context = canvasBaseScriptExecutionContext();

If context is guaranteed to be non-null, then I suggest making the local variable be a reference rather than a pointer, and dereferencing here.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:223
&gt; +    if (context-&gt;isWorkerGlobalScope())

When paired with downcast, I prefer to use is&lt;&gt;, the two function templates are designed to be used together, so this should be is&lt;WorkerGlobalScope&gt;(*context) instead.

&gt; Source/WebCore/html/OffscreenCanvas.cpp:226
&gt; +    ASSERT(context-&gt;isDocument());

This assertion isn’t valuable. The point of downcast&lt;Document&gt; is exactly that, includes the assertion plus a static_cast. So no need to also write a separate assertion.

&gt; Source/WebCore/platform/ThreadGlobalData.cpp:127
&gt; +static HashSet&lt;String, ASCIICaseInsensitiveHash&gt; createSupportedImageMIMETypesForEncoding()

Seems inelegant that this entire function ends up here in a file that was formerly not really filled with specific code. Instead we should find a way to leave this code in MIMETypeRegistry.cpp. Something like this in MIMETypeRegistry.h perhaps:

    std::unique_ptr&lt;MIMETypeRegistryThreadGlobalData&gt; createMIMETypeRegistryThreadGlobalData();

Not sure all the details but generally it would be strange to have all this code in the ThreadGlobalData source file. And this way we&apos;d have less specifics in the ThreadGlobalData header too, just the name MIMETypeRegistryThreadGlobalData and not the specifics of exactly what kind of HashSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597580</commentid>
    <comment_count>20</comment_count>
      <attachid>385382</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-11 05:11:18 -0800</bug_when>
    <thetext>Created attachment 385382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597581</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-12-11 05:12:16 -0800</bug_when>
    <thetext>All comments addressed, I believe - sorry for the WTFMove one, I just missed that in amongst the other bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598345</commentid>
    <comment_count>22</comment_count>
      <attachid>385382</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-13 08:22:52 -0800</bug_when>
    <thetext>Comment on attachment 385382
Patch

Clearing flags on attachment: 385382

Committed r253474: &lt;https://trac.webkit.org/changeset/253474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598346</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-13 08:22:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598347</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-13 08:23:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/57912779&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380629</attachid>
            <date>2019-10-10 03:54:49 -0700</date>
            <delta_ts>2019-12-05 02:54:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202573-20191010115448.patch</filename>
            <type>text/plain</type>
            <size>15481</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNTY4OWVmMTNjZmFh
YzY1NTA5M2I2NjY3OTAwZmNmNDBhYjQ1OS4uNjAwMjZiYzAwNmMwYjQ5YzEyYTQyNmVjZmNmMmFi
ZDdkZGIyNzdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTEwICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgT2Zmc2NyZWVu
Q2FudmFzLmNvbnZlcnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpnZXRD
b250ZXh0KToKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5oOgorICAgICAgICAqIGh0
bWwvT2Zmc2NyZWVuQ2FudmFzLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5j
b2RpbmdUaHJlYWRTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OnN1cHBvcnRlZEltYWdlTUlNRVR5
cGVzRm9yRW5jb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcpOgorCiAyMDE5LTEwLTEwICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgT2Zmc2Ny
ZWVuQ2FudmFzLnRyYW5zZmVyVG9JbWFnZUJpdG1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3Jl
ZW5DYW52YXMuY3BwCmluZGV4IGE0ZjA1YzNjZDNiMzg5NzM2NzAzMGIzOTk1NzU1NWI0Mzk5NDUw
YTQuLjJkYWE0Mjg3MTcxMGExM2RkYzdhMzA2ZWQwYWU5Mzg5MTNjZWNlNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2luY2x1
ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJpdG1hcC5oIgor
I2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0xNzcsNiArMTc5LDUxIEBAIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJU
b0ltYWdlQml0bWFwKCkKICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3Ig
fTsKIH0KIAorc3RhdGljIFN0cmluZyB0b0VuY29kaW5nTWltZVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKK3sKKyAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9wbmci
X3M7CisgICAgcmV0dXJuIG1pbWVUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHlGcm9tRG91YmxlKGRvdWJsZSBxdWFsaXR5
TnVtYmVyKQoreworICAgIGlmIChxdWFsaXR5TnVtYmVyIDwgMCB8fCBxdWFsaXR5TnVtYmVyID4g
MSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBxdWFsaXR5TnVt
YmVyOworfQorCit2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y29udmVydFRvQmxvYihJbWFnZUVuY29k
ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7Cisg
ICAgaWYgKCFvcmlnaW5DbGVhbigpKSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChTZWN1cml0
eUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9zaXplLmlzRW1wdHko
KSkgeworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW5kZXhTaXplRXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmICghYnVmZmVyKCkpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVq
ZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1h
a2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CisKKyAgICBhdXRvIGVuY29kaW5nTUlNRVR5
cGUgPSB0b0VuY29kaW5nTWltZVR5cGUob3B0aW9ucy50eXBlKTsKKyAgICBhdXRvIHF1YWxpdHkg
PSBxdWFsaXR5RnJvbURvdWJsZShvcHRpb25zLnF1YWxpdHkpOworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGJsb2JEYXRhID0gYnVmZmVyKCktPnRvRGF0YShlbmNvZGluZ01JTUVUeXBlLCBxdWFsaXR5
KTsKKyAgICBpZiAoYmxvYkRhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIHByb21pc2UtPnJlamVj
dChFbmNvZGluZ0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZjxCbG9i
PiBibG9iID0gQmxvYjo6Y3JlYXRlKFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01JTUVUeXBl
KTsKKyAgICBwcm9taXNlLT5yZXNvbHZlV2l0aE5ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8Qmxv
Yj4+KGJsb2IpOworfQorCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6ZGlkRHJhdyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7CiAgICAgY2xlYXJDb3BpZWRJbWFnZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmgKaW5kZXggMDcxYTk2OTBkY2FkY2ZhYWU2MGI3MWI0ZWQwMDhlMWQ4
OGIyZTg4OS4uYTVjMTRhZWUwNGE1ZTE1YWZiMDkyYjIxYmRjYmJmNjRjYWVmMDJlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGVmZXJyZWRQcm9taXNlOwogY2xhc3MgSW1hZ2VCaXRt
YXA7CiBjbGFzcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CiBjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ7CkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBFeGNlcHRp
b25PcjxPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0PiBnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRl
JiwgUmVuZGVyaW5nQ29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
PiYmIGFyZ3VtZW50cyk7CiAjZW5kaWYKICAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRt
YXA+PiB0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsKLSAgICAvLyB2b2lkIGNvbnZlcnRUb0Jsb2Io
SW1hZ2VFbmNvZGVPcHRpb25zIG9wdGlvbnMpOworICAgIHZvaWQgY29udmVydFRvQmxvYihJbWFn
ZUVuY29kZU9wdGlvbnMmJiBvcHRpb25zLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
OwogCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5pZGwKaW5kZXggNzZlZDJiZDMzMjRmMTliYjcxMzNj
NzU4ODYyZGJlNjc5YmMwYzU3NC4uMzYxNTlkMTUxNDRjZDM0NzhiNjc5MmE5ZjdjZGRjY2RhZDg4
ZWU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmlkbApAQCAtNTMsNiAr
NTMsNiBAQCBlbnVtIE9mZnNjcmVlblJlbmRlcmluZ0NvbnRleHRUeXBlCiAKICAgICBbQ2FsbFdp
dGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gT2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4
dD8gZ2V0Q29udGV4dChPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwg
YW55Li4uIGFyZ3VtZW50cyk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBJbWFnZUJpdG1hcCB0
cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsKLSAgICAvLyBQcm9taXNlPEJsb2I+IGNvbnZlcnRUb0Js
b2Iob3B0aW9uYWwgSW1hZ2VFbmNvZGVPcHRpb25zIG9wdGlvbnMpOworICAgIFByb21pc2U8Qmxv
Yj4gY29udmVydFRvQmxvYihvcHRpb25hbCBJbWFnZUVuY29kZU9wdGlvbnMgb3B0aW9ucyk7CiAK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4
IDBhMWM5MzZiZTllYjFkZWIzODU3YmZiMDBmMjBlNjdlODE3ODJhOTIuLjU0ZWRiYzhiYzRjMTk2
MDE5Y2MxMjAxMzYzNWM1OTlmZDQ1NTYyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuY3BwCkBAIC0xNjYsMjMgKzE2NiwyMCBAQCBIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgTUlNRVR5cGVSZWdpc3RyeTo6YWRkaXRpb25h
bFN1cHBvcnRlZAogICAgIHJldHVybiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXM7
CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpCitzdGF0aWMgSGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZXNGb3JFbmNvZGluZ1RocmVhZFNhZmUoKQogewogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHN0
YXRpYyBjb25zdCBhdXRvIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gc3VwcG9y
dGVkVHlwZXMgPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNvcHlUeXBlSWRlbnRpZmllcnMo
KSk7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHN1
cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7Ci0gICAgICAgIENGSW5kZXggY291bnQg
PSBDRkFycmF5R2V0Q291bnQoc3VwcG9ydGVkVHlwZXMuZ2V0KCkpOwotICAgICAgICBmb3IgKENG
SW5kZXggaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBDRlN0cmluZ1JlZiBz
dXBwb3J0ZWRUeXBlID0gcmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChzdXBwb3J0ZWRUeXBlcy5nZXQoKSwgaSkpOwotICAgICAgICAgICAgU3RyaW5n
IG1pbWVUeXBlID0gTUlNRVR5cGVGb3JJbWFnZVR5cGUoc3VwcG9ydGVkVHlwZSk7Ci0gICAgICAg
ICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nLmFkZChtaW1lVHlwZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7Ci0gICAgfSgpKTsK
KyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gc3VwcG9ydGVkVHlwZXMgPSBhZG9wdENGKENHSW1h
Z2VEZXN0aW5hdGlvbkNvcHlUeXBlSWRlbnRpZmllcnMoKSk7CisgICAgSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNv
ZGluZzsKKyAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHN1cHBvcnRlZFR5cGVz
LmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAg
ICAgIENGU3RyaW5nUmVmIHN1cHBvcnRlZFR5cGUgPSByZWludGVycHJldF9jYXN0PENGU3RyaW5n
UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1cHBvcnRlZFR5cGVzLmdldCgpLCBpKSk7Cisg
ICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlRm9ySW1hZ2VUeXBlKHN1cHBvcnRlZFR5
cGUpOworICAgICAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcuYWRkKG1pbWVUeXBlKTsKKyAgICB9CiAjZWxz
ZQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPj4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyA9c3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+IHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcgPSBzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CiAjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQp
CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBv
cnRlZCBVVEkncyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVs
aWFibHkgaXMgZm91bmQuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQ
RUcgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KQEAgLTIwMyw2ICsyMDAs
MTIgQEAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+JiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0YKICAgICByZXR1cm4gc3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZXNGb3JFbmNvZGluZzsKIH0KIAorc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29k
aW5nKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0Zv
ckVuY29kaW5nID0gbWFrZU5ldmVyRGVzdHJveWVkKHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9y
RW5jb2RpbmdUaHJlYWRTYWZlKCkpOworICAgIHJldHVybiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
c0ZvckVuY29kaW5nOworfQorCiBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4mIHN1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZXMoKQogewogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPj4gc3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlcyA9IHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxTdHJpbmc+IHsKQEAgLTQ3MiwxMSArNDc1LDEzIEBAIGJvb2wgTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZVZpZGVvT3JTVkdNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlCiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKCkuY29u
dGFpbnMobWltZVR5cGUpOworCisgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICByZXR1
cm4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpLmNvbnRhaW5zKG1pbWVUeXBl
KTsKKworICAgIHJldHVybiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nVGhyZWFk
U2FmZSgpLmNvbnRhaW5zKG1pbWVUeXBlKTsKIH0KIAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggMzU5YWY3YWRiNTRkMzYxMWJlNTU5MzRmMzMz
MjU3ZWQxNmIzYTY3My4uZGM0NjA0NWZlZjFkNWZiMWI1NzA4M2MwN2QxZDZjMWUxNDFjOTM3MyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMTAt
MTAgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVudCBP
ZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNTczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZh
cy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29u
dmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2Iudy1leHBlY3RlZC50
eHQ6CisKIDIwMTktMTAtMTAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIEltcGxlbWVudCBPZmZzY3JlZW5DYW52YXMudHJhbnNmZXJUb0ltYWdlQml0bWFw
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0
LnRvLmJsb2ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52
YXMuY29udmVydC50by5ibG9iLWV4cGVjdGVkLnR4dAppbmRleCBhMmM0YjUzNDk5YzExM2Q3M2U0
N2VmMjVhYTk4NzQ0OWRiMThlMTRhLi5kNDNiNDc5MDYxZGE3OTA5NTI5ZWVjNmM2YzI1MDA3MzNm
ZjBiNmQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5j
b252ZXJ0LnRvLmJsb2ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zm
c2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1leHBlY3RlZC50eHQKQEAgLTEsOCArMSw4IEBA
CiAKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUgcHJvZHVj
ZXMgY29ycmVjdCByZXN1bHQgb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IoKScsICdvZmZzY3Jl
ZW5DYW52YXMuY29udmVydFRvQmxvYicgaXMgdW5kZWZpbmVkKQotRkFJTCBUZXN0IHRoYXQgY29u
dmVydFRvQmxvYiB3aXRoIHBuZyBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBvZmZzY3JlZW5DYW52
YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMu
Y29udmVydFRvQmxvYih7dHlwZTogdHlwZVZhbH0pJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0
VG9CbG9iJyBpcyB1bmRlZmluZWQpCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgg
anBnZSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxv
YiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYih7
dHlwZTogdHlwZVZhbH0pJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRl
ZmluZWQpCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicCBwcm9kdWNlcyBj
b3JyZWN0IHJlc3VsdCBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYih7dHlwZTogdHlwZVZhbH0p
JywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmluZWQpCitQQVNTIFRl
c3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCB0eXBlIHByb2R1Y2VzIGNvcnJlY3Qg
cmVzdWx0IAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZyBwcm9kdWNlcyBj
b3JyZWN0IHJlc3VsdCAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGdlIHBy
b2R1Y2VzIGNvcnJlY3QgcmVzdWx0IAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRo
IHdlYnAgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgCiBGQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZl
cnRUb0Jsb2Igb24gYSBkZXRhY2hlZCBPZmZzY3JlZW5DYW52YXMgdGhyb3dzIGV4Y2VwdGlvbiBU
aGUgb2JqZWN0IGNhbiBub3QgYmUgY2xvbmVkLgotRkFJTCBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0
VG9CbG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRpb24g
b2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnb2Zm
c2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IoKScsICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRv
QmxvYicgaXMgdW5kZWZpbmVkKQorUEFTUyBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9u
IGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRpb24gCiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2Ny
ZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxv
Yi53LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNv
bnZlcnQudG8uYmxvYi53LWV4cGVjdGVkLnR4dAppbmRleCAxNTgyMTExZjAwMGZkMjFlZTdiZWI4
NjMzNTFmMmY1OTc2ZDRmZGIxLi5iMTE2Y2NhNjBmMTg2NjEyZGY5NThlYTM0YTFjMmZmNDQyMzRl
MDJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252
ZXJ0LnRvLmJsb2Iudy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZz
Y3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0ZWQudHh0CkBAIC0xLDE4ICsxLDE4
IEBACiAKLUhhcm5lc3MgRXJyb3IgKEZBSUwpLCBtZXNzYWdlID0gVHlwZUVycm9yOiBvZmZzY3Jl
ZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3JlZW5D
YW52YXMuY29udmVydFRvQmxvYih7dHlwZTogdHlwZVZhbCwgcXVhbGl0eTogcXVhbGl0eVZhbH0p
JywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmluZWQpCitIYXJuZXNz
IEVycm9yIChGQUlMKSwgbWVzc2FnZSA9IERhdGFDbG9uZUVycm9yOiBUaGUgb2JqZWN0IGNhbiBu
b3QgYmUgY2xvbmVkLgogCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVs
dCBhcmd1bWVudHMgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3Vu
cmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBj
b252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCB0eXBlLzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJl
Y3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5y
ZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQg
dHlwZS8wLjIgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3Nl
cnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0
aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcvZGVmYXVsdCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJl
Y3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5y
ZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZy8xLjAg
cXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFj
aGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZl
cnRUb0Jsb2Igd2l0aCBwbmcvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4g
YSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2Rl
Ci1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBlZy9kZWZhdWx0IHF1YWxpdHkg
cHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJy
b3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9i
IHdpdGgganBlZy8xLjAgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtl
ciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwg
VGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVnLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNv
cnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQg
dW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAv
ZGVmYXVsdCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2Vy
dF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRo
YXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCBy
ZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNo
YWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicC8wLjIgcXVh
bGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVk
OiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRU
b0Jsb2Igd2l0aCBkZWZhdWx0IGFyZ3VtZW50cyBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBh
IHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUv
MS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRl
c3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCB0eXBlLzAuMiBxdWFsaXR5IHByb2R1
Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRv
QmxvYiB3aXRoIHBuZy9kZWZhdWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4g
YSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nLzEuMCBxdWFs
aXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQg
Y29udmVydFRvQmxvYiB3aXRoIHBuZy8wLjIgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3Vs
dCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVnL2Rl
ZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1Mg
VGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVnLzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNv
cnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3
aXRoIGpwZWcvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIg
CitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicC9kZWZhdWx0IHF1YWxpdHkg
cHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252
ZXJ0VG9CbG9iIHdpdGggd2VicC8xLjAgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBp
biBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwLzAuMiBx
dWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAogRkFJTCBUZXN0IHRo
YXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgZGV0YWNoZWQgT2Zmc2NyZWVuQ2FudmFzIHRocm93
cyBleGNlcHRpb24gaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1
bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBP
ZmZzY3JlZW5DYW52YXMgd2l0aCBzaXplIDAgdGhyb3dzIGV4Y2VwdGlvbiBpbiBhIHdvcmtlciBh
c3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKK1BBU1MgVGVz
dCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHNpemUg
MCB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384892</attachid>
            <date>2019-12-05 02:54:56 -0800</date>
            <delta_ts>2019-12-10 03:36:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202573-20191205105455.patch</filename>
            <type>text/plain</type>
            <size>17289</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUyYTY5YTRiMjM0MTMx
Y2FiNmQ0NGMzMWM3ZDI1ODIxOWQ2NzI0ZS4uZjRmZDJmNGI2NGExYmYxMjNmM2JjZWI1YjdkMWQx
ZGMyMmE4MjdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5LTEwLTEwICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgT2Zmc2NyZWVu
Q2FudmFzLmNvbnZlcnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
RW5jb2RpbmdNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpxdWFsaXR5RnJvbURvdWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbnZlcnRUb0Jsb2IpOgorICAg
ICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmg6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5D
YW52YXMuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZUZvckVuY29kaW5nV29ya2VyU2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YSBjb25zdCk6
CisKIDIwMTktMTAtMTAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPiAgYW5k
ICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgT2Zm
c2NyZWVuQ2FudmFzLnRyYW5zZmVyVG9JbWFnZUJpdG1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCmluZGV4IGQ1ZWU1ZDY0ZmZmZjVjNTkyZmY1YmNhZTVkZGY0MDg5NGQx
NDFjODkuLmQ0MzIwMTRhYzFjZjI2YTg2MGNjYzY4ZmNlNzA4NGM0NzBlZjAyNGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNs
dWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCaXRtYXAuaCIKKyNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRl
ICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5o
IgpAQCAtMTY1LDYgKzE2Nyw1MSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBP
ZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKK3N0YXRpYyBTdHJpbmcgdG9FbmNvZGlu
Z01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCFNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZ1dvcmtlclNhZmUobWlt
ZVR5cGUpKQorICAgICAgICByZXR1cm4gImltYWdlL3BuZyJfczsKKyAgICByZXR1cm4gbWltZVR5
cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eUZyb21Eb3VibGUoZG91YmxlIHF1YWxpdHlOdW1iZXIpCit7CisgICAgaWYgKHF1
YWxpdHlOdW1iZXIgPCAwIHx8IHF1YWxpdHlOdW1iZXIgPiAxKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgcmV0dXJuIHF1YWxpdHlOdW1iZXI7Cit9CisKK3ZvaWQgT2Zmc2Ny
ZWVuQ2FudmFzOjpjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyYmIG9wdGlvbnMsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIW9yaWdpbkNsZWFuKCkp
IHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFNlY3VyaXR5RXJyb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHByb21pc2Ut
PnJlamVjdChJbmRleFNpemVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFidWZmZXIoKSkgeworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFp
bGFibGUoKTsKKworICAgIGF1dG8gZW5jb2RpbmdNSU1FVHlwZSA9IHRvRW5jb2RpbmdNaW1lVHlw
ZShvcHRpb25zLnR5cGUpOworICAgIGF1dG8gcXVhbGl0eSA9IHF1YWxpdHlGcm9tRG91YmxlKG9w
dGlvbnMucXVhbGl0eSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gYmxvYkRhdGEgPSBidWZmZXIo
KS0+dG9EYXRhKGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChibG9iRGF0YS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEVuY29kaW5nRXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUo
V1RGTW92ZShibG9iRGF0YSksIGVuY29kaW5nTUlNRVR5cGUpOworICAgIHByb21pc2UtPnJlc29s
dmVXaXRoTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxCbG9iPj4oYmxvYik7Cit9CisKIHZvaWQg
T2Zmc2NyZWVuQ2FudmFzOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBu
b3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmgKaW5kZXggYTE2ZWI1OTIyNWRkZWMwYWFmMjQyYzlmNTAxZmI5MDdmMzA1MGYx
YS4uNjk4YTAzODE3Y2M3ZTBmNmE2ZGNjOWY0NmU4NmZhZWE3NDI4NGI1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIENTU1ZhbHVlUG9v
bDsKK2NsYXNzIERlZmVycmVkUHJvbWlzZTsKIGNsYXNzIEltYWdlQml0bWFwOwogY2xhc3MgT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8T2Zmc2NyZWVu
UmVuZGVyaW5nQ29udGV4dD4gZ2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVuZGVy
aW5nQ29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3Vt
ZW50cyk7CiAjZW5kaWYKICAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiB0cmFu
c2ZlclRvSW1hZ2VCaXRtYXAoKTsKLSAgICAvLyB2b2lkIGNvbnZlcnRUb0Jsb2IoSW1hZ2VFbmNv
ZGVPcHRpb25zIG9wdGlvbnMpOworICAgIHZvaWQgY29udmVydFRvQmxvYihJbWFnZUVuY29kZU9w
dGlvbnMmJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKICAgICB2b2lkIGRpZERyYXcoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmlkbAppbmRleCBlMmVlZjMzMzQyN2ViY2I3ZjdmNWRiNGM2YTYwNjY1M2VhZjY5NmZmLi43Nzkw
MzFhOWNiNmMwYWMwNTkwM2JhNmJjNDQ4YjlkY2IyYzNjNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9PZmZzY3JlZW5DYW52YXMuaWRsCkBAIC01NCw2ICs1NCw2IEBAIGVudW0gT2Zmc2NyZWVuUmVu
ZGVyaW5nQ29udGV4dFR5cGUKIAogICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93
RXhjZXB0aW9uXSBPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0PyBnZXRDb250ZXh0KE9mZnNjcmVl
blJlbmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlLCBhbnkuLi4gYXJndW1lbnRzKTsKICAg
ICBbTWF5VGhyb3dFeGNlcHRpb25dIEltYWdlQml0bWFwIHRyYW5zZmVyVG9JbWFnZUJpdG1hcCgp
OwotICAgIC8vIFByb21pc2U8QmxvYj4gY29udmVydFRvQmxvYihvcHRpb25hbCBJbWFnZUVuY29k
ZU9wdGlvbnMgb3B0aW9ucyk7CisgICAgUHJvbWlzZTxCbG9iPiBjb252ZXJ0VG9CbG9iKG9wdGlv
bmFsIEltYWdlRW5jb2RlT3B0aW9ucyBvcHRpb25zKTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKaW5kZXggMjE5MDc4NDVmNTcxNmQzOGI5YjUx
ZmFkZDJjZGM3OWRlYmIyYjA5Mi4uMTliYzJlNjA3Y2E3MDk5MGY5MDllZmJhNzAwODRlZWRiZTkz
NzllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAK
QEAgLTE3MCwyMyArMTcwLDIwIEBAIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2
ZUhhc2g+JiBNSU1FVHlwZVJlZ2lzdHJ5OjphZGRpdGlvbmFsU3VwcG9ydGVkCiAgICAgcmV0dXJu
IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlczsKIH0KIAotc3RhdGljIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBzdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlc0ZvckVuY29kaW5nKCkKK3N0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBjcmVhdGVTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKCkK
IHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHN1cHBvcnRlZFR5cGVzID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25Db3B5VHlwZUlkZW50aWZpZXJzKCkpOwotICAgICAgICBIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVu
Y29kaW5nOwotICAgICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHN1cHBvcnRl
ZFR5cGVzLmdldCgpKTsKLSAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgewotICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgc3VwcG9ydGVkVHlwZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VwcG9ydGVkVHlwZXMu
Z2V0KCksIGkpKTsKLSAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlRm9ySW1h
Z2VUeXBlKHN1cHBvcnRlZFR5cGUpOwotICAgICAgICAgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZy5h
ZGQobWltZVR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlc0ZvckVuY29kaW5nOwotICAgIH0oKSk7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IHN1cHBvcnRlZFR5cGVzID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25Db3B5VHlwZUlkZW50
aWZpZXJzKCkpOworICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7CisgICAgQ0ZJbmRleCBjb3VudCA9
IENGQXJyYXlHZXRDb3VudChzdXBwb3J0ZWRUeXBlcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBDRlN0cmluZ1JlZiBzdXBwb3J0ZWRU
eXBlID0gcmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChzdXBwb3J0ZWRUeXBlcy5nZXQoKSwgaSkpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBN
SU1FVHlwZUZvckltYWdlVHlwZShzdXBwb3J0ZWRUeXBlKTsKKyAgICAgICAgaWYgKCFtaW1lVHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29k
aW5nLmFkZChtaW1lVHlwZSk7CisgICAgfQogI2Vsc2UKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IHN1cHBvcnRlZElt
YWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcgPXN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsK
KyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nID0gc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4g
ewogI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgICAgICAvLyBGSVhNRTogQWRkIFdp
bmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJJ3Mgd2hlbiBhIHdheSB0byBj
b252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgogICAgICAgICAv
LyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHIGFuZCBHSUYuIFNlZSA8cmRhcjovL3By
b2JsZW0vNjA5NTI4Nj4uCkBAIC0yMDcsNiArMjA0LDEyIEBAIHN0YXRpYyBjb25zdCBIYXNoU2V0
PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgc3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZXNGCiAgICAgcmV0dXJuIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7CiB9CiAK
K3N0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYg
c3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpCit7CisgICAgc3RhdGljIGNvbnN0
IGF1dG8gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyA9IG1ha2VOZXZlckRlc3Ry
b3llZChjcmVhdGVTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKCkpOworICAgIHJl
dHVybiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nOworfQorCiBzdGF0aWMgY29u
c3QgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1cHBvcnRlZEph
dmFTY3JpcHRNSU1FVHlwZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gc3VwcG9ydGVkSmF2YVNjcmlwdE1J
TUVUeXBlcyA9IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKQEAgLTQ4Myw2ICs0ODYs
MTQgQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhjb25zdCBTdHJpbmcmIG1pbWVUeXAKICAgICByZXR1cm4gc3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZXNGb3JFbmNvZGluZygpLmNvbnRhaW5zKG1pbWVUeXBlKTsKIH0KIAorYm9vbCBNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZ1dvcmtlclNh
ZmUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY3JlYXRlU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZXNGb3JFbmNvZGluZygpLmNvbnRhaW5zKG1pbWVUeXBlKTsKK30KKwogYm9vbCBN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKaW5kZXggODc2YzM4MjgwZDQzMzc4OWYx
MTJjZTA3MWM5ZGM4ZWIzN2RmYmQ0Mi4uZjg0ZDFmYzMxYWI5YTM1OGRjMzVkN2I3NWNiZDAyYmE0
NzAwZmM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaApA
QCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBNSU1F
IHR5cGUgaXMgc3VpdGFibGUgZm9yIGJlaW5nIGVuY29kZWQuCiAgICAgc3RhdGljIGJvb2wgaXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CisgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmdXb3Jr
ZXJTYWZlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IGEgTUlNRSB0eXBlIGlzIHN1aXRhYmxlIGZvciBiZWluZyBsb2FkZWQgYXMgYSBKYXZhU2NyaXB0
IG9yIEpTT04gcmVzb3VyY2UuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaXNTdXBw
b3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCmluZGV4IDVlNTVmMzA4YmU5OWI3YTFmNjAzZGEyNWQ5NWQwNWNlZTI2Y2Nh
YTUuLjcwZDRlOWJmOWY1ZTJiYmIyZDc0NWE3MTZjNGVhMjZiNDQwYTE5MDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCkBAIC02NjUsNyArNjY1LDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LAog
CiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAogewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAg
IEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNv
ZGluZ1dvcmtlclNhZmUobWltZVR5cGUpKTsKIAogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2Ug
PSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDI3ZTk2MDBmYTcxMWFkYmQxOWE2Yzcw
MTBjZmYyOGI5ZmZhZWE5N2QuLjNiY2IzY2JkODYwMDVmNzVlODZlYzZhZGI3MTVkZjdjZDU5M2I2
ZDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5
LTEwLTEwICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgT2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1j
YW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2ItZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFz
L2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0
ZWQudHh0OgorCiAyMDE5LTEwLTEwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNv
bT4gIGFuZCAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgSW1wbGVt
ZW50IE9mZnNjcmVlbkNhbnZhcy50cmFuc2ZlclRvSW1hZ2VCaXRtYXAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZh
cy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNj
cmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJs
b2ItZXhwZWN0ZWQudHh0CmluZGV4IGEyYzRiNTM0OTljMTEzZDczZTQ3ZWYyNWFhOTg3NDQ5ZGIx
OGUxNGEuLmQ0M2I0NzkwNjFkYTc5MDk1MjllZWM2YzZjMjUwMDczM2ZmMGI2ZDUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVu
LWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29u
dmVydC50by5ibG9iLWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDggQEAKIAotRkFJTCBUZXN0IHRo
YXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZSBwcm9kdWNlcyBjb3JyZWN0IHJlc3Vs
dCBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdv
ZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYigpJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0
VG9CbG9iJyBpcyB1bmRlZmluZWQpCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgg
cG5nIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9i
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0
eXBlOiB0eXBlVmFsfSknLCAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVm
aW5lZCkKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGdlIHByb2R1Y2VzIGNv
cnJlY3QgcmVzdWx0IG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iIGlzIG5vdCBhIGZ1bmN0
aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0eXBlOiB0eXBlVmFsfSkn
LCAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVmaW5lZCkKLUZBSUwgVGVz
dCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IG9m
ZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNj
cmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0eXBlOiB0eXBlVmFsfSknLCAnb2Zmc2NyZWVuQ2Fu
dmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVmaW5lZCkKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRU
b0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgCitQQVNTIFRl
c3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IAor
UEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpwZ2UgcHJvZHVjZXMgY29ycmVjdCBy
ZXN1bHQgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicCBwcm9kdWNlcyBj
b3JyZWN0IHJlc3VsdCAKIEZBSUwgVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIGRl
dGFjaGVkIE9mZnNjcmVlbkNhbnZhcyB0aHJvd3MgZXhjZXB0aW9uIFRoZSBvYmplY3QgY2FuIG5v
dCBiZSBjbG9uZWQuCi1GQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZz
Y3JlZW5DYW52YXMgd2l0aCBzaXplIDAgdGhyb3dzIGV4Y2VwdGlvbiBvZmZzY3JlZW5DYW52YXMu
Y29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29u
dmVydFRvQmxvYigpJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmlu
ZWQpCitQQVNTIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52
YXMgd2l0aCBzaXplIDAgdGhyb3dzIGV4Y2VwdGlvbiAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZl
cnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4t
Y2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnct
ZXhwZWN0ZWQudHh0CmluZGV4IDE1ODIxMTFmMDAwZmQyMWVlN2JlYjg2MzM1MWYyZjU5NzZkNGZk
YjEuLmIxMTZjY2E2MGYxODY2MTJkZjk1OGVhMzRhMWMyZmY0NDIzNGUwMmQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNh
bnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252
ZXJ0LnRvLmJsb2Iudy1leHBlY3RlZC50eHQKQEAgLTEsMTggKzEsMTggQEAKIAotSGFybmVzcyBF
cnJvciAoRkFJTCksIG1lc3NhZ2UgPSBUeXBlRXJyb3I6IG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0
VG9CbG9iIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9C
bG9iKHt0eXBlOiB0eXBlVmFsLCBxdWFsaXR5OiBxdWFsaXR5VmFsfSknLCAnb2Zmc2NyZWVuQ2Fu
dmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVmaW5lZCkKK0hhcm5lc3MgRXJyb3IgKEZBSUwpLCBt
ZXNzYWdlID0gRGF0YUNsb25lRXJyb3I6IFRoZSBvYmplY3QgY2FuIG5vdCBiZSBjbG9uZWQuCiAK
LUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IGFyZ3VtZW50cyBwcm9k
dWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBS
ZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0
aCBkZWZhdWx0IHR5cGUvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3
b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1G
QUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCB0eXBlLzAuMiBxdWFsaXR5
IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVy
cm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxv
YiB3aXRoIHBuZy9kZWZhdWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3
b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1G
QUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nLzEuMCBxdWFsaXR5IHByb2R1Y2Vz
IGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNo
ZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBu
Zy8wLjIgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRf
dW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0
IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVnL2RlZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0
IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVh
Y2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVnLzEuMCBx
dWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNo
ZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVy
dFRvQmxvYiB3aXRoIGpwZWcvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4g
YSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2Rl
Ci1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicC9kZWZhdWx0IHF1YWxpdHkg
cHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJy
b3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9i
IHdpdGggd2VicC8xLjAgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtl
ciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwg
VGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNv
cnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQg
dW5yZWFjaGFibGUgY29kZQorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1
bHQgYXJndW1lbnRzIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBU
ZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZS8xLjAgcXVhbGl0eSBwcm9k
dWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRU
b0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1
bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nL2Rl
ZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1Mg
VGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29y
cmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdp
dGggcG5nLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAor
UEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpwZWcvZGVmYXVsdCBxdWFsaXR5IHBy
b2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVy
dFRvQmxvYiB3aXRoIGpwZWcvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4g
YSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBlZy8wLjIgcXVh
bGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0
IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwL2RlZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0
IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3
ZWJwLzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFT
UyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAvMC4yIHF1YWxpdHkgcHJvZHVjZXMg
Y29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCiBGQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRU
b0Jsb2Igb24gYSBkZXRhY2hlZCBPZmZzY3JlZW5DYW52YXMgdGhyb3dzIGV4Y2VwdGlvbiBpbiBh
IHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUK
LUZBSUwgVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3
aXRoIHNpemUgMCB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6
IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQorUEFTUyBUZXN0IHRoYXQgY2FsbCBjb252
ZXJ0VG9CbG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRp
b24gaW4gYSB3b3JrZXIgCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385246</attachid>
            <date>2019-12-10 03:36:37 -0800</date>
            <delta_ts>2019-12-10 03:54:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202573-20191210113635.patch</filename>
            <type>text/plain</type>
            <size>27219</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMyNjVhYjM2MTUyN2Ix
N2FhMWI5Y2E5OGZkMzYwM2M1NDIxYWNjZS4uZGJhOTQzNzA5N2MyYTI3MDE3MTJmYTJiNzgzM2Uz
NjA0NDA5YjJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE5LTEwLTEwICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgT2Zmc2NyZWVu
Q2FudmFzLmNvbnZlcnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCBPZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYi4gVGhp
cyBhbHNvIGludm9sdmVzIG1ha2luZworICAgICAgICBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyBzYWZlIHRvIHVzZSBvZmYgdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQg
aW1wbGVtZW50aW5nIE9mZnNjcmVlbkNhbnZhcy5zZWN1cml0eU9yaWdpbi4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIHRoZXNlIGNoYW5nZXMgZml4IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9FbmNvZGlu
Z01pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnF1YWxpdHlGcm9tRG91YmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y29udmVydFRvQmxvYik6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAg
KiBodG1sL09mZnNjcmVlbkNhbnZhcy5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFz
LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YTo6c3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZXNGb3JFbmNvZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaDoKKwogMjAxOS0xMC0wNCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZy
YW1lIGFuZCBjYW5jZWxBbmltYXRpb25GcmFtZSBzaG91bGQgYmUgcHJlc2VudCBvbiBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
CmluZGV4IGQ1ZWU1ZDY0ZmZmZjVjNTkyZmY1YmNhZTVkZGY0MDg5NGQxNDFjODkuLmVlYjlmY2Vk
NDI5MWYwYTkwMGNmZWU4NjY3NTdiNWI3MjA3YzhiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBv
b2wuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCaXRtYXAuaCIKKyNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VE
ZWZlcnJlZC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgpAQCAtMTY1LDExICsx
NjcsNjYgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFz
Ojp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwogfQogCitzdGF0aWMgU3RyaW5nIHRvRW5jb2RpbmdNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICghTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKQorICAgICAgICByZXR1cm4g
ImltYWdlL3BuZyJfczsKKyAgICByZXR1cm4gbWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKTsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eUZyb21Eb3VibGUoZG91
YmxlIHF1YWxpdHlOdW1iZXIpCit7CisgICAgaWYgKCEocXVhbGl0eU51bWJlciA+PSAwICYmIHF1
YWxpdHlOdW1iZXIgPD0gMSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gcXVhbGl0eU51bWJlcjsKK30KKwordm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbnZlcnRU
b0Jsb2IoSW1hZ2VFbmNvZGVPcHRpb25zJiYgb3B0aW9ucywgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlKQoreworICAgIGlmICghb3JpZ2luQ2xlYW4oKSkgeworICAgICAgICBwcm9taXNl
LT5yZWplY3QoU2VjdXJpdHlFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KHNpemUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEluZGV4U2l6ZUVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWJ1ZmZlcigpKSB7CisgICAg
ICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOworCisgICAgYXV0
byBlbmNvZGluZ01JTUVUeXBlID0gdG9FbmNvZGluZ01pbWVUeXBlKG9wdGlvbnMudHlwZSk7Cisg
ICAgYXV0byBxdWFsaXR5ID0gcXVhbGl0eUZyb21Eb3VibGUob3B0aW9ucy5xdWFsaXR5KTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBibG9iRGF0YSA9IGJ1ZmZlcigpLT50b0RhdGEoZW5jb2RpbmdN
SU1FVHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGJsb2JEYXRhLmlzRW1wdHkoKSkgeworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoRW5jb2RpbmdFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWY8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShXVEZNb3ZlKGJsb2JEYXRhKSwg
ZW5jb2RpbmdNSU1FVHlwZSk7CisgICAgcHJvbWlzZS0+cmVzb2x2ZVdpdGhOZXdseUNyZWF0ZWQ8
SURMSW50ZXJmYWNlPEJsb2I+PihibG9iKTsKK30KKwogdm9pZCBPZmZzY3JlZW5DYW52YXM6OmRp
ZERyYXcoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZh
c0NoYW5nZWQocmVjdCk7CiB9CiAKK1NlY3VyaXR5T3JpZ2luKiBPZmZzY3JlZW5DYW52YXM6OnNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJHbG9iYWxT
Y29wZSgpKQorICAgICAgICByZXR1cm4gJmRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29u
dGV4dCkudG9wT3JpZ2luKCk7CisKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsK
KyAgICByZXR1cm4gJmRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCkuc2VjdXJpdHlPcmlnaW4o
KTsKK30KKwogQ1NTVmFsdWVQb29sJiBPZmZzY3JlZW5DYW52YXM6OmNzc1ZhbHVlUG9vbCgpCiB7
CiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCBhMTZlYjU5MjI1ZGRlYzBh
YWYyNDJjOWY1MDFmYjkwN2YzMDUwZjFhLi42NTk1Nzg5ZDVjODM0NjUyODE1NjFhM2IwNDMwYmQ1
ZDJjZDYxZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZh
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTQzLDYg
KzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0OwogY2xhc3MgQ1NTVmFsdWVQb29sOworY2xhc3MgRGVmZXJyZWRQcm9taXNlOwogY2xhc3Mg
SW1hZ2VCaXRtYXA7CiBjbGFzcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CiBj
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CkBAIC03OSwxMyArODAsMTQgQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPE9mZnNjcmVlblJlbmRlcmluZ0NvbnRleHQ+IGdldENvbnRleHQoSlND
OjpKU0dsb2JhbE9iamVjdCYsIFJlbmRlcmluZ0NvbnRleHRUeXBlLCBWZWN0b3I8SlNDOjpTdHJv
bmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwogI2VuZGlmCiAgICAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7Ci0gICAgLy8gdm9p
ZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIGNv
bnZlcnRUb0Jsb2IoSW1hZ2VFbmNvZGVPcHRpb25zJiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
OwogCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgSW1h
Z2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIGJv
b2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVh
dGVkSW1hZ2VCdWZmZXI7IH0KIAorICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0IGZpbmFsOwogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiAKICAgICB1
c2luZyBSZWZDb3VudGVkOjpyZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5p
ZGwKaW5kZXggZTJlZWYzMzM0MjdlYmNiN2Y3ZjVkYjRjNmE2MDY2NTNlYWY2OTZmZi4uNzc5MDMx
YTljYjZjMGFjMDU5MDNiYTZiYzQ0OGI5ZGNiMmMzYzQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmlkbApAQCAtNTQsNiArNTQsNiBAQCBlbnVtIE9mZnNjcmVlblJlbmRl
cmluZ0NvbnRleHRUeXBlCiAKICAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4
Y2VwdGlvbl0gT2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4dD8gZ2V0Q29udGV4dChPZmZzY3JlZW5S
ZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwgYW55Li4uIGFyZ3VtZW50cyk7CiAgICAg
W01heVRocm93RXhjZXB0aW9uXSBJbWFnZUJpdG1hcCB0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsK
LSAgICAvLyBQcm9taXNlPEJsb2I+IGNvbnZlcnRUb0Jsb2Iob3B0aW9uYWwgSW1hZ2VFbmNvZGVP
cHRpb25zIG9wdGlvbnMpOworICAgIFByb21pc2U8QmxvYj4gY29udmVydFRvQmxvYihvcHRpb25h
bCBJbWFnZUVuY29kZU9wdGlvbnMgb3B0aW9ucyk7CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4IDIxOTA3ODQ1ZjU3MTZkMzhiOWI1MWZh
ZGQyY2RjNzlkZWJiMmIwOTIuLjc2NjZkYzRlOTA2MmM0MTQ4YWI0Mzg3YTZhNmNhM2E3NTE3Yjdj
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMTcwLDQzICsxNzEsNiBAQCBIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgTUlNRVR5cGVSZWdpc3RyeTo6YWRkaXRpb25h
bFN1cHBvcnRlZAogICAgIHJldHVybiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXM7
CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpCi17Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNG
b3JFbmNvZGluZyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBzdXBwb3J0ZWRUeXBlcyA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ29w
eVR5cGVJZGVudGlmaWVycygpKTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZzsKLSAgICAg
ICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChzdXBwb3J0ZWRUeXBlcy5nZXQoKSk7
Ci0gICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAg
ICAgIENGU3RyaW5nUmVmIHN1cHBvcnRlZFR5cGUgPSByZWludGVycHJldF9jYXN0PENGU3RyaW5n
UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1cHBvcnRlZFR5cGVzLmdldCgpLCBpKSk7Ci0g
ICAgICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZUZvckltYWdlVHlwZShzdXBwb3J0
ZWRUeXBlKTsKLSAgICAgICAgICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcuYWRkKG1pbWVUeXBlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNv
ZGluZzsKLSAgICB9KCkpOwotI2Vsc2UKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IHN1cHBvcnRlZEltYWdlTUlNRVR5
cGVzRm9yRW5jb2RpbmcgPXN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBv
cnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9t
IE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KLSAgICAgICAgLy8gRm9yIG5vdywg
b25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUy
ODY+LgotICAgICAgICAiaW1hZ2UvcG5nIl9zLAotICAgICAgICAiaW1hZ2UvanBlZyJfcywKLSAg
ICAgICAgImltYWdlL2dpZiJfcywKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgImltYWdl
L3BuZyJfcywKLSAgICAgICAgImltYWdlL2pwZWciX3MsCi0gICAgICAgICJpbWFnZS90aWZmIl9z
LAotICAgICAgICAiaW1hZ2UvYm1wIl9zLAotICAgICAgICAiaW1hZ2UvaWNvIl9zLAotI2VsaWYg
VVNFKENBSVJPKQotICAgICAgICAiaW1hZ2UvcG5nIl9zLAotI2VuZGlmCi0gICAgfTsKLSNlbmRp
ZgotICAgIHJldHVybiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nOwotfQotCiBz
dGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1
cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gc3VwcG9ydGVkSmF2
YVNjcmlwdE1JTUVUeXBlcyA9IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKQEAgLTQ3
NiwxMSArNDQwLDkgQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlVmlk
ZW9PclNWR01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUKIAogYm9vbCBNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KICAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcoKS5jb250YWlucyhtaW1lVHlwZSk7CisgICAg
cmV0dXJuIHRocmVhZEdsb2JhbERhdGEoKS5zdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29k
aW5nKCkuY29udGFpbnMobWltZVR5cGUpOwogfQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCmluZGV4IDI3YTczNjQx
NmJhMDRjMDUzYzJlNzdkYjJjNTU4MTQ0NDBkMmYwZjkuLjE5ZjJlYmM3YWQwNzMyYjljYzgxMDM2
YzIxYmQzYzAzYzVjODA0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZEdsb2JhbERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEds
b2JhbERhdGEuY3BwCkBAIC0xMTcsNCArMTE3LDQ1IEBAIFRocmVhZEdsb2JhbERhdGEmIHRocmVh
ZEdsb2JhbERhdGEoKQogCiAjZW5kaWYKIAorc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+IGNyZWF0ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rp
bmcoKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBz
dXBwb3J0ZWRUeXBlcyA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ29weVR5cGVJZGVudGlm
aWVycygpKTsKKyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBz
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nOworICAgIENGSW5kZXggY291bnQgPSBD
RkFycmF5R2V0Q291bnQoc3VwcG9ydGVkVHlwZXMuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgc3VwcG9ydGVkVHlw
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
c3VwcG9ydGVkVHlwZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlN
RVR5cGVGb3JJbWFnZVR5cGUoc3VwcG9ydGVkVHlwZSk7CisgICAgICAgIGlmICghbWltZVR5cGUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGlu
Zy5hZGQobWltZVR5cGUpOworICAgIH0KKyNlbHNlCisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyA9
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJF
Q1QyRCkKKyAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUg
c3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVU
SSByZWxpYWJseSBpcyBmb3VuZC4KKyAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBO
RywgSlBFRyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgorICAgICAgICAi
aW1hZ2UvcG5nIl9zLAorICAgICAgICAiaW1hZ2UvanBlZyJfcywKKyAgICAgICAgImltYWdlL2dp
ZiJfcywKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgImltYWdlL3BuZyJfcywKKyAgICAg
ICAgImltYWdlL2pwZWciX3MsCisgICAgICAgICJpbWFnZS90aWZmIl9zLAorICAgICAgICAiaW1h
Z2UvYm1wIl9zLAorICAgICAgICAiaW1hZ2UvaWNvIl9zLAorI2VsaWYgVVNFKENBSVJPKQorICAg
ICAgICAiaW1hZ2UvcG5nIl9zLAorI2VuZGlmCisgICAgfTsKKyNlbmRpZgorICAgIHJldHVybiBz
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nOworfQorCitjb25zdCBIYXNoU2V0PFN0
cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgVGhyZWFkR2xvYmFsRGF0YTo6c3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3N1
cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcpKQorICAgICAgICBtX3N1cHBvcnRlZElt
YWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcgPSBtYWtlVW5pcXVlPEhhc2hTZXQ8U3RyaW5nLCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+PihjcmVhdGVTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVu
Y29kaW5nKCkpOworICAgIHJldHVybiAqbV9zdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29k
aW5nOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UaHJlYWRHbG9iYWxEYXRhLmgKaW5kZXggNTYzMGQ5NTlkYTRhZDEyMGMzZjQyMWE1NDE0YmIx
ZGYxN2FmM2NkYi4uOTQ4ZTgxNDliNGEyZmU4ZGRhYTZiZDAzOWYwNjhhM2JhOTJjZjVkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaApAQCAtNzMsNiArNzMs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKSBjb25z
dCB7IHJldHVybiBtX2lzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVyczsgfQogICAgIHZvaWQgc2V0
SXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKGJvb2wgdmFsdWUpIHsgbV9pc0luUmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMgPSB2YWx1ZTsgfQogCisgICAgY29uc3QgSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rp
bmcoKTsKKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycz4gbV9jYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxFdmVudE5hbWVzPiBtX2V2ZW50TmFtZXM7CkBAIC04Nyw2ICs4OSw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyB7IGZhbHNl
IH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SUNVQ29udmVydGVyV3JhcHBlcj4gbV9jYWNoZWRD
b252ZXJ0ZXJJQ1U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+PiBtX3N1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgVGhyZWFkR2xvYmFsRGF0YSYgdGhyZWFkR2xv
YmFsRGF0YSgpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
R2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
aAppbmRleCA5ZjhkMzI5MjE3NDcyY2E2MzExM2VhMWE1ZmQxOGIyYjIyMWJhYWU0Li4xNTlmZWI3
YzU2NGJhZGVmZmZmYzgyNTc0MmIwMzk1MjBkYzMyNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCkBAIC0xMjIsNiArMTIyLDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZT4mJikgZmluYWw7CiAKKyAgICBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV90b3BPcmlnaW4uZ2V0KCk7IH0KKwogICAgIENyeXB0byYg
Y3J5cHRvKCk7CiAgICAgUGVyZm9ybWFuY2UmIHBlcmZvcm1hbmNlKCkgY29uc3Q7CiAKQEAgLTE3
MCw3ICsxNzIsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRD
b250ZW50U2VjdXJpdHlQb2xpY3koKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Nob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeTsgfQogICAgIGJvb2wgaXNKU0V4ZWN1dGlv
bkZvcmJpZGRlbigpIGNvbnN0IGZpbmFsOwotICAgIFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RvcE9yaWdpbi5nZXQoKTsgfQogCiAjaWYgRU5BQkxF
KFdFQl9DUllQVE8pCiAgICAgYm9vbCB3cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXkpIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy9DaGFuZ2VMb2cKaW5kZXggNjZhMzEyZTZiNDlkMTMzNWMzNTcxNGUyZmEzYjY0NzhhMGY3
ZDVmYy4uODNlZmVjYTkzMjRkOTUzZjI5ZjFlZmZkNDk3OTU3YjU1N2U1Mzk3MSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMTAtMTAgIENocmlz
IExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVudCBPZmZzY3JlZW5D
YW52YXMuY29udmVydFRvQmxvYgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyNTczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXBkYXRlIHdpdGggZml4ZWQgd29ya2VyIHRlc3RzIGFuZCBTZWN1cml0eUVy
cm9yIGNoZWNrcy4gU2VlIHdwZQorICAgICAgICBpc3N1ZXMgIzIwNjk0IGFuZCAjMjA2OTguCisK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRv
LWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9i
L29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2IuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2Fu
dmFzLmNvbnZlcnQudG8uYmxvYi53LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFz
LmNvbnZlcnQudG8uYmxvYi53Lmh0bWw6CisKIDIwMTktMTEtMjUgIENocmlzIExvcmQgIDxjbG9y
ZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQ29sb3Igc2FmZSB0byB1c2Ugd2l0aGluIGEgd29ya2VyCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMv
Y29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2ItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3Jl
ZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9i
LWV4cGVjdGVkLnR4dAppbmRleCBhMmM0YjUzNDk5YzExM2Q3M2U0N2VmMjVhYTk4NzQ0OWRiMThl
MTRhLi44ZmQ5ZWE5NjUwZmZlYTc4ZmFlZGQ0ZThjN2M1MjgyMDY5ODU3Yjk4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1j
YW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2ItZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZl
cnQudG8uYmxvYi1leHBlY3RlZC50eHQKQEAgLTEsOCArMSw5IEBACiAKLUZBSUwgVGVzdCB0aGF0
IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQg
b2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnb2Zm
c2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IoKScsICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRv
QmxvYicgaXMgdW5kZWZpbmVkKQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBu
ZyBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBp
cyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYih7dHlw
ZTogdHlwZVZhbH0pJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmlu
ZWQpCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBnZSBwcm9kdWNlcyBjb3Jy
ZWN0IHJlc3VsdCBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlv
bi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYih7dHlwZTogdHlwZVZhbH0pJywg
J29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmluZWQpCi1GQUlMIFRlc3Qg
dGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicCBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBvZmZz
Y3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3Jl
ZW5DYW52YXMuY29udmVydFRvQmxvYih7dHlwZTogdHlwZVZhbH0pJywgJ29mZnNjcmVlbkNhbnZh
cy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmluZWQpCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9C
bG9iIHdpdGggZGVmYXVsdCB0eXBlIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IAorUEFTUyBUZXN0
IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZyBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCAKK1BB
U1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGdlIHByb2R1Y2VzIGNvcnJlY3QgcmVz
dWx0IAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAgcHJvZHVjZXMgY29y
cmVjdCByZXN1bHQgCiBGQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBkZXRh
Y2hlZCBPZmZzY3JlZW5DYW52YXMgdGhyb3dzIGV4Y2VwdGlvbiBUaGUgb2JqZWN0IGNhbiBub3Qg
YmUgY2xvbmVkLgotRkFJTCBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgT2Zmc2Ny
ZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRpb24gb2Zmc2NyZWVuQ2FudmFzLmNv
bnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZl
cnRUb0Jsb2IoKScsICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYicgaXMgdW5kZWZpbmVk
KQorUEFTUyBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFz
IHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRpb24gCitQQVNTIFRlc3QgdGhhdCBjYWxsIGNvbnZl
cnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52YXMgd2l0aCB0YWludGVkIG9yaWdpbiB0aHJvd3Mg
ZXhjZXB0aW9uIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNh
bnZhcy5jb252ZXJ0LnRvLmJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVu
Y2FudmFzLmNvbnZlcnQudG8uYmxvYi5odG1sCmluZGV4IGZjZTA4ZTU2YTc3YjBjNWJlYzkyZGFk
ZDE2OGE0MTU3OWQ5YzcyYmYuLjdkMjMwZDk2NmE5NDUzNDQ5NDk4NTJmOTJiNTAxMGJiZjk4ZThj
ZDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZl
cnQudG8uYmxvYi5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFz
LmNvbnZlcnQudG8uYmxvYi5odG1sCkBAIC0xLDcgKzEsNyBAQAogPCFET0NUWVBFIGh0bWw+CiA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iL2NvbW1vbi9jYW52YXMtdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii8y
ZGNvbnRleHQvcmVzb3VyY2VzL2NhbnZhcy10ZXN0cy5qcyI+PC9zY3JpcHQ+CiA8bGluayByZWw9
ImhlbHAiIGhyZWY9Imh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1vZmZzY3JlZW5j
YW52YXMtY29udmVydHRvYmxvYiI+CiA8c2NyaXB0IGlkPSJteVdvcmtlciIgdHlwZT0idGV4dC93
b3JrZXIiPgogc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CkBAIC0xNDQsNSArMTQ0LDIy
IEBAIGFzeW5jX3Rlc3QoZnVuY3Rpb24odCkgewogICAgIH0pKTsKIH0sICJUZXN0IHRoYXQgY2Fs
bCBjb252ZXJ0VG9CbG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBl
eGNlcHRpb24iKTsKIAorYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgICAgdmFyIGltZyA9IG5l
dyBJbWFnZSgpOworICAgIGltZy5zcmMgPSAiL2ltYWdlcy9ncmVlbi5wbmciOworICAgIGltZy5j
cm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOworICAgIGltZy5vbmxvYWQgPSB0LnN0ZXBfZnVuY19k
b25lKCgpID0+IHsKKyAgICAgICAgdmFyIG9mZnNjcmVlbkNhbnZhcyA9IG5ldyBPZmZzY3JlZW5D
YW52YXMoMTAsIDEwKTsKKyAgICAgICAgdmFyIGN0eCA9IG9mZnNjcmVlbkNhbnZhcy5nZXRDb250
ZXh0KCIyZCIpOworICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CisgICAgICAgIG9m
ZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKCkudGhlbih0LnN0ZXBfZnVuY19kb25lKGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgYXNzZXJ0X2ZhbHNlKCJjb252ZXJ0VG9CbG9iIGRpZG4ndCB0
aHJvdywgYnV0IHNob3VsZCIpOworICAgICAgICB9KSwgdC5zdGVwX2Z1bmNfZG9uZShmdW5jdGlv
bihlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZS5uYW1lLCAiU2VjdXJpdHlFcnJvciIpOwor
ICAgICAgICB9KSk7CisgICAgfSk7Cit9LCAiVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBv
biBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHRhaW50ZWQgb3JpZ2luIHRocm93cyBleGNlcHRpb24i
KTsKKwogPC9zY3JpcHQ+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2Ny
ZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRv
LWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53LWV4cGVjdGVkLnR4dAppbmRl
eCAxNTgyMTExZjAwMGZkMjFlZTdiZWI4NjMzNTFmMmY1OTc2ZDRmZGIxLi5hOTZjMWI0NTg1NDQ1
YjFmNmYxMmViYTM1YTA3YzAwN2JmNmM2YWQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1i
bG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2Iudy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2Fu
dmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnctZXhw
ZWN0ZWQudHh0CkBAIC0xLDE4ICsxLDE5IEBACiAKLUhhcm5lc3MgRXJyb3IgKEZBSUwpLCBtZXNz
YWdlID0gVHlwZUVycm9yOiBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBm
dW5jdGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYih7dHlwZTogdHlwZVZh
bCwgcXVhbGl0eTogcXVhbGl0eVZhbH0pJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9i
JyBpcyB1bmRlZmluZWQpCitIYXJuZXNzIEVycm9yIChGQUlMKSwgbWVzc2FnZSA9IERhdGFDbG9u
ZUVycm9yOiBUaGUgb2JqZWN0IGNhbiBub3QgYmUgY2xvbmVkLgogCi1GQUlMIFRlc3QgdGhhdCBj
b252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCBhcmd1bWVudHMgcHJvZHVjZXMgY29ycmVjdCByZXN1
bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJs
ZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCB0eXBlLzEu
MCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJl
YWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29u
dmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZS8wLjIgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0
IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVh
Y2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcvZGVmYXVs
dCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJl
YWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29u
dmVydFRvQmxvYiB3aXRoIHBuZy8xLjAgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBp
biBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNv
ZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcvMC4yIHF1YWxpdHkgcHJv
ZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3Ig
UmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdp
dGgganBlZy9kZWZhdWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3Jr
ZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlM
IFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBlZy8xLjAgcXVhbGl0eSBwcm9kdWNlcyBj
b3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVk
IHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVn
LzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91
bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQg
Y29udmVydFRvQmxvYiB3aXRoIHdlYnAvZGVmYXVsdCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3Qg
cmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFj
aGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAvMS4wIHF1
YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hl
ZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0
VG9CbG9iIHdpdGggd2VicC8wLjIgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBh
IHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUK
K1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IGFyZ3VtZW50cyBwcm9k
dWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRU
b0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1
bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVs
dCB0eXBlLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAor
UEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZy9kZWZhdWx0IHF1YWxpdHkgcHJv
ZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0
VG9CbG9iIHdpdGggcG5nLzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEg
d29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZy8wLjIgcXVhbGl0
eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNv
bnZlcnRUb0Jsb2Igd2l0aCBqcGVnL2RlZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJl
c3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVn
LzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBU
ZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpwZWcvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29y
cmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdp
dGggd2VicC9kZWZhdWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3Jr
ZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicC8xLjAgcXVhbGl0eSBw
cm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZl
cnRUb0Jsb2Igd2l0aCB3ZWJwLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGlu
IGEgd29ya2VyIAogRkFJTCBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgZGV0YWNo
ZWQgT2Zmc2NyZWVuQ2FudmFzIHRocm93cyBleGNlcHRpb24gaW4gYSB3b3JrZXIgYXNzZXJ0X3Vu
cmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBj
YWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52YXMgd2l0aCBzaXplIDAgdGhyb3dz
IGV4Y2VwdGlvbiBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVu
cmVhY2hhYmxlIGNvZGUKK1BBU1MgVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9m
ZnNjcmVlbkNhbnZhcyB3aXRoIHNpemUgMCB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIAor
UEFTUyBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdp
dGggdGFpbnRlZCBvcmlnaW4gdGhyb3dzIGV4Y2VwdGlvbiBpbiBhIHdvcmtlciAKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3Jl
ZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9i
LncuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zm
c2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8u
YmxvYi53Lmh0bWwKaW5kZXggNTczMjM2ZjNlYmMzMDMzYzc0N2E1YjkxODI0ZmYxMTFjODE5YzYx
Ny4uMWM2OWQ0ZDI2MzYxZjdkMTE3YTljODNlOWE0NTdlYjVmMGYwNzhkYiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2Fu
dmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLncuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNj
cmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJs
b2Iudy5odG1sCkBAIC0xLDcgKzEsNyBAQAogPCFET0NUWVBFIGh0bWw+CiA8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iL2NvbW1v
bi9jYW52YXMtdGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii8yZGNvbnRleHQvcmVz
b3VyY2VzL2NhbnZhcy10ZXN0cy5qcyI+PC9zY3JpcHQ+CiA8bGluayByZWw9ImhlbHAiIGhyZWY9
Imh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1vZmZzY3JlZW5jYW52YXMtY29udmVy
dHRvYmxvYiI+CiA8c2NyaXB0IGlkPSJteVdvcmtlciIgdHlwZT0idGV4dC93b3JrZXIiPgogZnVu
Y3Rpb24gZHJhd0NhbnZhcyhjdHgpCkBAIC00MCwxMiArNDAsOSBAQCBmdW5jdGlvbiB0ZXN0Q29u
dmVydFRvQmxvYkV4Y2VwdGlvbjEoKQogICAgIHZhciBvZmZzY3JlZW5DYW52YXMgPSBuZXcgT2Zm
c2NyZWVuQ2FudmFzKDEwLCAxMCk7CiAgICAgc2VsZi5wb3N0TWVzc2FnZSh7b2Zmc2NyZWVuQ2Fu
dmFzfSwgW29mZnNjcmVlbkNhbnZhc10pOwogICAgIG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9C
bG9iKCkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBz
ZWxmLnBvc3RNZXNzYWdlKGZhbHNlKTsKICAgICB9LCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlm
IChlIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGUubmFtZSA9PSAiSW52YWxpZFN0YXRlRXJy
b3IiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShlIGluc3RhbmNlb2YgRE9N
RXhjZXB0aW9uICYmIGUubmFtZSA9PSAiSW52YWxpZFN0YXRlRXJyb3IiKTsKICAgICB9KTsKIH0K
IApAQCAtNTMsMTYgKzUwLDMwIEBAIGZ1bmN0aW9uIHRlc3RDb252ZXJ0VG9CbG9iRXhjZXB0aW9u
MigpCiB7CiAgICAgdmFyIG9mZnNjcmVlbkNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoMCwg
MCk7CiAgICAgb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IoKS50aGVuKGZ1bmN0aW9uKCkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZmFsc2Up
OwogICAgIH0sIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBET01FeGNl
cHRpb24gJiYgZS5uYW1lID09ICJJbmRleFNpemVFcnJvciIpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBz
ZWxmLnBvc3RNZXNzYWdlKGUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24gJiYgZS5uYW1lID09ICJJ
bmRleFNpemVFcnJvciIpOworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0Q29udmVydFRvQmxv
YkV4Y2VwdGlvbjMoYml0bWFwKQoreworICAgIHZhciBvZmZzY3JlZW5DYW52YXMgPSBuZXcgT2Zm
c2NyZWVuQ2FudmFzKDEwLCAxMCk7CisgICAgdmFyIGN0eCA9IG9mZnNjcmVlbkNhbnZhcy5nZXRD
b250ZXh0KCIyZCIpOworICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsKKyAgICBvZmZz
Y3JlZW5DYW52YXMuY29udmVydFRvQmxvYigpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNl
bGYucG9zdE1lc3NhZ2UoZmFsc2UpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgc2Vs
Zi5wb3N0TWVzc2FnZShlIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGUubmFtZSA9PSAiU2Vj
dXJpdHlFcnJvciIpOwogICAgIH0pOwogfQogCiBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUp
IHsKKyAgICBpZiAoZS5kYXRhIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApIHsKKyAgICAgICAgdGVz
dENvbnZlcnRUb0Jsb2JFeGNlcHRpb24zKGUuZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBzd2l0Y2goZS5kYXRhKSB7CiAgICAgICAgIGNhc2UgJ3Rlc3QxJzoKICAgICAgICAg
ICAgIHRlc3RDb252ZXJ0VG9CbG9iKCJlbXB0eSIsICJlbXB0eSIpOwpAQCAtMTAxLDEwICsxMTIs
MTAgQEAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICB0ZXN0Q29u
dmVydFRvQmxvYigiaW1hZ2Uvd2VicCIsIDAuMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSAndGVzdDEzJzoKLSAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UodGVzdENvbnZl
cnRUb0Jsb2JFeGNlcHRpb24xKCkpOworICAgICAgICAgICAgdGVzdENvbnZlcnRUb0Jsb2JFeGNl
cHRpb24xKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAndGVzdDE0JzoKLSAg
ICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UodGVzdENvbnZlcnRUb0Jsb2JFeGNlcHRpb24yKCkp
OworICAgICAgICAgICAgdGVzdENvbnZlcnRUb0Jsb2JFeGNlcHRpb24yKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiB9OwpAQCAtMjg5LDggKzMwMCw4IEBAIGFzeW5jX3Rlc3QoZnVuY3Rp
b24odCkgewogYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CiAgICAgdmFyIHdvcmtlciA9IG1ha2VX
b3JrZXIodCk7CiAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0LnN0ZXBf
ZnVuY19kb25lKGZ1bmN0aW9uKG1zZykgewotICAgICAgICBpZiAobXNnLmRhdGEgPT0gdHJ1ZSB8
fCBtc2cuZGF0YSA9PSBmYWxzZSkKLSAgICAgICAgICAgIGFzc2VydF90cnVlKG1zZy5kYXRhKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUobXNnLmRhdGEpOworICAgICAgICB0LmRvbmUoKTsKICAgICB9
KSk7CiAgICAgd29ya2VyLnBvc3RNZXNzYWdlKCd0ZXN0MTMnKTsKIH0sICJUZXN0IHRoYXQgY2Fs
bCBjb252ZXJ0VG9CbG9iIG9uIGEgZGV0YWNoZWQgT2Zmc2NyZWVuQ2FudmFzIHRocm93cyBleGNl
cHRpb24gaW4gYSB3b3JrZXIiKTsKQEAgLTI5OCwxMSArMzA5LDI3IEBAIGFzeW5jX3Rlc3QoZnVu
Y3Rpb24odCkgewogYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CiAgICAgdmFyIHdvcmtlciA9IG1h
a2VXb3JrZXIodCk7CiAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0LnN0
ZXBfZnVuY19kb25lKGZ1bmN0aW9uKG1zZykgewotICAgICAgICBpZiAobXNnLmRhdGEgPT0gdHJ1
ZSB8fCBtc2cuZGF0YSA9PSBmYWxzZSkKLSAgICAgICAgICAgIGFzc2VydF90cnVlKG1zZy5kYXRh
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUobXNnLmRhdGEpOworICAgICAgICB0LmRvbmUoKTsKICAg
ICB9KSk7CiAgICAgd29ya2VyLnBvc3RNZXNzYWdlKCd0ZXN0MTQnKTsKIH0sICJUZXN0IHRoYXQg
Y2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93
cyBleGNlcHRpb24gaW4gYSB3b3JrZXIiKTsKIAorYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7Cisg
ICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOworICAgIGltZy5zcmMgPSAiL2ltYWdlcy9ncmVlbi5w
bmciOworICAgIGltZy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOworICAgIGltZy5vbmxvYWQg
PSB0LnN0ZXBfZnVuY19kb25lKCgpID0+IHsKKyAgICAgICAgY3JlYXRlSW1hZ2VCaXRtYXAoaW1n
KS50aGVuKHQuc3RlcF9mdW5jX2RvbmUoYml0bWFwID0+IHsKKyAgICAgICAgICAgIHZhciB3b3Jr
ZXIgPSBtYWtlV29ya2VyKHQpOworICAgICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIo
J21lc3NhZ2UnLCB0LnN0ZXBfZnVuY19kb25lKGZ1bmN0aW9uKG1zZykgeworICAgICAgICAgICAg
ICAgIGFzc2VydF90cnVlKG1zZy5kYXRhKTsKKyAgICAgICAgICAgICAgICB0LmRvbmUoKTsKKyAg
ICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShiaXRtYXApOwor
ICAgICAgICB9KSk7CisgICAgfSk7Cit9LCAiVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBv
biBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHRhaW50ZWQgb3JpZ2luIHRocm93cyBleGNlcHRpb24g
aW4gYSB3b3JrZXIiKTsKKwogPC9zY3JpcHQ+CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385248</attachid>
            <date>2019-12-10 03:54:06 -0800</date>
            <delta_ts>2019-12-11 05:11:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202573-20191210115404.patch</filename>
            <type>text/plain</type>
            <size>27506</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMyNjVhYjM2MTUyN2Ix
N2FhMWI5Y2E5OGZkMzYwM2M1NDIxYWNjZS4uZGJhOTQzNzA5N2MyYTI3MDE3MTJmYTJiNzgzM2Uz
NjA0NDA5YjJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE5LTEwLTEwICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgT2Zmc2NyZWVu
Q2FudmFzLmNvbnZlcnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcGxlbWVudCBPZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYi4gVGhp
cyBhbHNvIGludm9sdmVzIG1ha2luZworICAgICAgICBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyBzYWZlIHRvIHVzZSBvZmYgdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQg
aW1wbGVtZW50aW5nIE9mZnNjcmVlbkNhbnZhcy5zZWN1cml0eU9yaWdpbi4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIHRoZXNlIGNoYW5nZXMgZml4IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9FbmNvZGlu
Z01pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnF1YWxpdHlGcm9tRG91YmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y29udmVydFRvQmxvYik6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAg
KiBodG1sL09mZnNjcmVlbkNhbnZhcy5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFz
LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YTo6c3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZXNGb3JFbmNvZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaDoKKwogMjAxOS0xMC0wNCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZy
YW1lIGFuZCBjYW5jZWxBbmltYXRpb25GcmFtZSBzaG91bGQgYmUgcHJlc2VudCBvbiBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
CmluZGV4IGQ1ZWU1ZDY0ZmZmZjVjNTkyZmY1YmNhZTVkZGY0MDg5NGQxNDFjODkuLmVlYjlmY2Vk
NDI5MWYwYTkwMGNmZWU4NjY3NTdiNWI3MjA3YzhiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBv
b2wuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCaXRtYXAuaCIKKyNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VE
ZWZlcnJlZC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgpAQCAtMTY1LDExICsx
NjcsNjYgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFz
Ojp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwogfQogCitzdGF0aWMgU3RyaW5nIHRvRW5jb2RpbmdNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICghTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKQorICAgICAgICByZXR1cm4g
ImltYWdlL3BuZyJfczsKKyAgICByZXR1cm4gbWltZVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKTsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eUZyb21Eb3VibGUoZG91
YmxlIHF1YWxpdHlOdW1iZXIpCit7CisgICAgaWYgKCEocXVhbGl0eU51bWJlciA+PSAwICYmIHF1
YWxpdHlOdW1iZXIgPD0gMSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gcXVhbGl0eU51bWJlcjsKK30KKwordm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbnZlcnRU
b0Jsb2IoSW1hZ2VFbmNvZGVPcHRpb25zJiYgb3B0aW9ucywgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlKQoreworICAgIGlmICghb3JpZ2luQ2xlYW4oKSkgeworICAgICAgICBwcm9taXNl
LT5yZWplY3QoU2VjdXJpdHlFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KHNpemUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEluZGV4U2l6ZUVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWJ1ZmZlcigpKSB7CisgICAg
ICAgIHByb21pc2UtPnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOworCisgICAgYXV0
byBlbmNvZGluZ01JTUVUeXBlID0gdG9FbmNvZGluZ01pbWVUeXBlKG9wdGlvbnMudHlwZSk7Cisg
ICAgYXV0byBxdWFsaXR5ID0gcXVhbGl0eUZyb21Eb3VibGUob3B0aW9ucy5xdWFsaXR5KTsKKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBibG9iRGF0YSA9IGJ1ZmZlcigpLT50b0RhdGEoZW5jb2RpbmdN
SU1FVHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGJsb2JEYXRhLmlzRW1wdHkoKSkgeworICAgICAg
ICBwcm9taXNlLT5yZWplY3QoRW5jb2RpbmdFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWY8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShXVEZNb3ZlKGJsb2JEYXRhKSwg
ZW5jb2RpbmdNSU1FVHlwZSk7CisgICAgcHJvbWlzZS0+cmVzb2x2ZVdpdGhOZXdseUNyZWF0ZWQ8
SURMSW50ZXJmYWNlPEJsb2I+PihibG9iKTsKK30KKwogdm9pZCBPZmZzY3JlZW5DYW52YXM6OmRp
ZERyYXcoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZh
c0NoYW5nZWQocmVjdCk7CiB9CiAKK1NlY3VyaXR5T3JpZ2luKiBPZmZzY3JlZW5DYW52YXM6OnNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJHbG9iYWxT
Y29wZSgpKQorICAgICAgICByZXR1cm4gJmRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqY29u
dGV4dCkudG9wT3JpZ2luKCk7CisKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsK
KyAgICByZXR1cm4gJmRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCkuc2VjdXJpdHlPcmlnaW4o
KTsKK30KKwogQ1NTVmFsdWVQb29sJiBPZmZzY3JlZW5DYW52YXM6OmNzc1ZhbHVlUG9vbCgpCiB7
CiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAppbmRleCBhMTZlYjU5MjI1ZGRlYzBh
YWYyNDJjOWY1MDFmYjkwN2YzMDUwZjFhLi42NTk1Nzg5ZDVjODM0NjUyODE1NjFhM2IwNDMwYmQ1
ZDJjZDYxZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZh
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTQzLDYg
KzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0OwogY2xhc3MgQ1NTVmFsdWVQb29sOworY2xhc3MgRGVmZXJyZWRQcm9taXNlOwogY2xhc3Mg
SW1hZ2VCaXRtYXA7CiBjbGFzcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CiBj
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CkBAIC03OSwxMyArODAsMTQgQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPE9mZnNjcmVlblJlbmRlcmluZ0NvbnRleHQ+IGdldENvbnRleHQoSlND
OjpKU0dsb2JhbE9iamVjdCYsIFJlbmRlcmluZ0NvbnRleHRUeXBlLCBWZWN0b3I8SlNDOjpTdHJv
bmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwogI2VuZGlmCiAgICAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7Ci0gICAgLy8gdm9p
ZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIGNv
bnZlcnRUb0Jsb2IoSW1hZ2VFbmNvZGVPcHRpb25zJiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
OwogCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgSW1h
Z2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIGJv
b2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVh
dGVkSW1hZ2VCdWZmZXI7IH0KIAorICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0IGZpbmFsOwogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiAKICAgICB1
c2luZyBSZWZDb3VudGVkOjpyZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5p
ZGwKaW5kZXggZTJlZWYzMzM0MjdlYmNiN2Y3ZjVkYjRjNmE2MDY2NTNlYWY2OTZmZi4uNzc5MDMx
YTljYjZjMGFjMDU5MDNiYTZiYzQ0OGI5ZGNiMmMzYzQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmlkbApAQCAtNTQsNiArNTQsNiBAQCBlbnVtIE9mZnNjcmVlblJlbmRl
cmluZ0NvbnRleHRUeXBlCiAKICAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4
Y2VwdGlvbl0gT2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4dD8gZ2V0Q29udGV4dChPZmZzY3JlZW5S
ZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwgYW55Li4uIGFyZ3VtZW50cyk7CiAgICAg
W01heVRocm93RXhjZXB0aW9uXSBJbWFnZUJpdG1hcCB0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsK
LSAgICAvLyBQcm9taXNlPEJsb2I+IGNvbnZlcnRUb0Jsb2Iob3B0aW9uYWwgSW1hZ2VFbmNvZGVP
cHRpb25zIG9wdGlvbnMpOworICAgIFByb21pc2U8QmxvYj4gY29udmVydFRvQmxvYihvcHRpb25h
bCBJbWFnZUVuY29kZU9wdGlvbnMgb3B0aW9ucyk7CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCmluZGV4IDIxOTA3ODQ1ZjU3MTZkMzhiOWI1MWZh
ZGQyY2RjNzlkZWJiMmIwOTIuLjc2NjZkYzRlOTA2MmM0MTQ4YWI0Mzg3YTZhNmNhM2E3NTE3Yjdj
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMTcwLDQzICsxNzEsNiBAQCBIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgTUlNRVR5cGVSZWdpc3RyeTo6YWRkaXRpb25h
bFN1cHBvcnRlZAogICAgIHJldHVybiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXM7
CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpCi17Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNG
b3JFbmNvZGluZyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBzdXBwb3J0ZWRUeXBlcyA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ29w
eVR5cGVJZGVudGlmaWVycygpKTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZzsKLSAgICAg
ICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChzdXBwb3J0ZWRUeXBlcy5nZXQoKSk7
Ci0gICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAg
ICAgIENGU3RyaW5nUmVmIHN1cHBvcnRlZFR5cGUgPSByZWludGVycHJldF9jYXN0PENGU3RyaW5n
UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHN1cHBvcnRlZFR5cGVzLmdldCgpLCBpKSk7Ci0g
ICAgICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZUZvckltYWdlVHlwZShzdXBwb3J0
ZWRUeXBlKTsKLSAgICAgICAgICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcuYWRkKG1pbWVUeXBlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNv
ZGluZzsKLSAgICB9KCkpOwotI2Vsc2UKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IHN1cHBvcnRlZEltYWdlTUlNRVR5
cGVzRm9yRW5jb2RpbmcgPXN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBv
cnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9t
IE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KLSAgICAgICAgLy8gRm9yIG5vdywg
b25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUy
ODY+LgotICAgICAgICAiaW1hZ2UvcG5nIl9zLAotICAgICAgICAiaW1hZ2UvanBlZyJfcywKLSAg
ICAgICAgImltYWdlL2dpZiJfcywKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgImltYWdl
L3BuZyJfcywKLSAgICAgICAgImltYWdlL2pwZWciX3MsCi0gICAgICAgICJpbWFnZS90aWZmIl9z
LAotICAgICAgICAiaW1hZ2UvYm1wIl9zLAotICAgICAgICAiaW1hZ2UvaWNvIl9zLAotI2VsaWYg
VVNFKENBSVJPKQotICAgICAgICAiaW1hZ2UvcG5nIl9zLAotI2VuZGlmCi0gICAgfTsKLSNlbmRp
ZgotICAgIHJldHVybiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nOwotfQotCiBz
dGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1
cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gc3VwcG9ydGVkSmF2
YVNjcmlwdE1JTUVUeXBlcyA9IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKQEAgLTQ3
NiwxMSArNDQwLDkgQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlVmlk
ZW9PclNWR01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUKIAogYm9vbCBNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KICAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcoKS5jb250YWlucyhtaW1lVHlwZSk7CisgICAg
cmV0dXJuIHRocmVhZEdsb2JhbERhdGEoKS5zdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29k
aW5nKCkuY29udGFpbnMobWltZVR5cGUpOwogfQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCmluZGV4IDI3YTczNjQx
NmJhMDRjMDUzYzJlNzdkYjJjNTU4MTQ0NDBkMmYwZjkuLmRiZThjY2NjMzFjOTQxYzA0MGFkOWZk
NjljODRkODZhNGE1NWJhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZEdsb2JhbERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEds
b2JhbERhdGEuY3BwCkBAIC0zNyw2ICszNywxMyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKKyNpZiBQTEFURk9STShDT0NP
QSkKKyNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCisjaW5jbHVkZSAiVVRJUmVnaXN0cnkuaCIK
KyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUaHJlYWRHbG9iYWxEYXRhOjpUaHJl
YWRHbG9iYWxEYXRhKCkKQEAgLTExNyw0ICsxMjQsNDUgQEAgVGhyZWFkR2xvYmFsRGF0YSYgdGhy
ZWFkR2xvYmFsRGF0YSgpCiAKICNlbmRpZgogCitzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gY3JlYXRlU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNv
ZGluZygpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IHN1cHBvcnRlZFR5cGVzID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25Db3B5VHlwZUlkZW50
aWZpZXJzKCkpOworICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7CisgICAgQ0ZJbmRleCBjb3VudCA9
IENGQXJyYXlHZXRDb3VudChzdXBwb3J0ZWRUeXBlcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBDRlN0cmluZ1JlZiBzdXBwb3J0ZWRU
eXBlID0gcmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChzdXBwb3J0ZWRUeXBlcy5nZXQoKSwgaSkpOworICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBN
SU1FVHlwZUZvckltYWdlVHlwZShzdXBwb3J0ZWRUeXBlKTsKKyAgICAgICAgaWYgKCFtaW1lVHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29k
aW5nLmFkZChtaW1lVHlwZSk7CisgICAgfQorI2Vsc2UKKyAgICBIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5n
ID0gc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworI2lmIFVTRShDRykgfHwgVVNFKERJ
UkVDVDJEKQorICAgICAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRo
ZSBzdXBwb3J0ZWQgVVRJJ3Mgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8g
VVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgICAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQg
UE5HLCBKUEVHIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisgICAgICAg
ICJpbWFnZS9wbmciX3MsCisgICAgICAgICJpbWFnZS9qcGVnIl9zLAorICAgICAgICAiaW1hZ2Uv
Z2lmIl9zLAorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAiaW1hZ2UvcG5nIl9zLAorICAg
ICAgICAiaW1hZ2UvanBlZyJfcywKKyAgICAgICAgImltYWdlL3RpZmYiX3MsCisgICAgICAgICJp
bWFnZS9ibXAiX3MsCisgICAgICAgICJpbWFnZS9pY28iX3MsCisjZWxpZiBVU0UoQ0FJUk8pCisg
ICAgICAgICJpbWFnZS9wbmciX3MsCisjZW5kaWYKKyAgICB9OworI2VuZGlmCisgICAgcmV0dXJu
IHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7Cit9CisKK2NvbnN0IEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBUaHJlYWRHbG9iYWxEYXRhOjpzdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1f
c3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZykpCisgICAgICAgIG1fc3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyA9IG1ha2VVbmlxdWU8SGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+KGNyZWF0ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9y
RW5jb2RpbmcoKSk7CisgICAgcmV0dXJuICptX3N1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5j
b2Rpbmc7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuaAppbmRleCA1NjMwZDk1OWRhNGFkMTIwYzNmNDIxYTU0MTRi
YjFkZjE3YWYzY2RiLi45NDhlODE0OWI0YTJmZThkZGFhNmJkMDM5ZjA2OGEzYmE5MmNmNWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oCkBAIC03Myw2ICs3
Myw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycygpIGNv
bnN0IHsgcmV0dXJuIG1faXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzOyB9CiAgICAgdm9pZCBz
ZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoYm9vbCB2YWx1ZSkgeyBtX2lzSW5SZW1vdmVB
bGxFdmVudExpc3RlbmVycyA9IHZhbHVlOyB9CiAKKyAgICBjb25zdCBIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNv
ZGluZygpOworCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRSZXNvdXJjZVJl
cXVlc3RJbml0aWF0b3JzPiBtX2NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEV2ZW50TmFtZXM+IG1fZXZlbnROYW1lczsKQEAgLTg3LDYgKzg5LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzIHsgZmFs
c2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJQ1VDb252ZXJ0ZXJXcmFwcGVyPiBtX2NhY2hl
ZENvbnZlcnRlcklDVTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4+IG1fc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGlu
ZzsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGZyaWVuZCBUaHJlYWRHbG9iYWxEYXRhJiB0aHJlYWRH
bG9iYWxEYXRhKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29w
ZS5oCmluZGV4IDlmOGQzMjkyMTc0NzJjYTYzMTEzZWExYTVmZDE4YjJiMjIxYmFhZTQuLjE1OWZl
YjdjNTY0YmFkZWZmZmZjODI1NzQyYjAzOTUyMGRjMzI1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTEyMiw2ICsxMjIsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNv
bnNvbGVNZXNzYWdlPiYmKSBmaW5hbDsKIAorICAgIFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RvcE9yaWdpbi5nZXQoKTsgfQorCiAgICAgQ3J5cHRv
JiBjcnlwdG8oKTsKICAgICBQZXJmb3JtYW5jZSYgcGVyZm9ybWFuY2UoKSBjb25zdDsKIApAQCAt
MTcwLDcgKzE3Miw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEJ5cGFzc01haW5Xb3Js
ZENvbnRlbnRTZWN1cml0eVBvbGljeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5OyB9CiAgICAgYm9vbCBpc0pTRXhlY3V0
aW9uRm9yYmlkZGVuKCkgY29uc3QgZmluYWw7Ci0gICAgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdp
bigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdG9wT3JpZ2luLmdldCgpOyB9CiAKICNpZiBFTkFC
TEUoV0VCX0NSWVBUTykKICAgICBib29sIHdyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSkgZmluYWw7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL0NoYW5nZUxvZwppbmRleCA2NmEzMTJlNmI0OWQxMzM1YzM1NzE0ZTJmYTNiNjQ3OGEw
ZjdkNWZjLi44M2VmZWNhOTMyNGQ5NTNmMjlmMWVmZmQ0OTc5NTdiNTU3ZTUzOTcxIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOS0xMC0xMCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IE9mZnNjcmVl
bkNhbnZhcy5jb252ZXJ0VG9CbG9iCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDI1NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgd2l0aCBmaXhlZCB3b3JrZXIgdGVzdHMgYW5kIFNlY3VyaXR5
RXJyb3IgY2hlY2tzLiBTZWUgd3BlCisgICAgICAgIGlzc3VlcyAjMjA2OTQgYW5kICMyMDY5OC4K
KworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQt
dG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJs
b2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi5odG1sOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5j
YW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52
YXMuY29udmVydC50by5ibG9iLncuaHRtbDoKKwogMjAxOS0xMS0yNSAgQ2hyaXMgTG9yZCAgPGNs
b3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWFrZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVDb2xvciBzYWZlIHRvIHVzZSB3aXRoaW4gYSB3b3JrZXIKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZh
cy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNj
cmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJs
b2ItZXhwZWN0ZWQudHh0CmluZGV4IGEyYzRiNTM0OTljMTEzZDczZTQ3ZWYyNWFhOTg3NDQ5ZGIx
OGUxNGEuLjhmZDllYTk2NTBmZmVhNzhmYWVkZDRlOGM3YzUyODIwNjk4NTdiOTggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVu
LWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29u
dmVydC50by5ibG9iLWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDkgQEAKIAotRkFJTCBUZXN0IHRo
YXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZSBwcm9kdWNlcyBjb3JyZWN0IHJlc3Vs
dCBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdv
ZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYigpJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0
VG9CbG9iJyBpcyB1bmRlZmluZWQpCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgg
cG5nIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9i
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0
eXBlOiB0eXBlVmFsfSknLCAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVm
aW5lZCkKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGdlIHByb2R1Y2VzIGNv
cnJlY3QgcmVzdWx0IG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iIGlzIG5vdCBhIGZ1bmN0
aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0eXBlOiB0eXBlVmFsfSkn
LCAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVmaW5lZCkKLUZBSUwgVGVz
dCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IG9m
ZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNj
cmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0eXBlOiB0eXBlVmFsfSknLCAnb2Zmc2NyZWVuQ2Fu
dmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVmaW5lZCkKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRU
b0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgCitQQVNTIFRl
c3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IAor
UEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpwZ2UgcHJvZHVjZXMgY29ycmVjdCBy
ZXN1bHQgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicCBwcm9kdWNlcyBj
b3JyZWN0IHJlc3VsdCAKIEZBSUwgVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIGRl
dGFjaGVkIE9mZnNjcmVlbkNhbnZhcyB0aHJvd3MgZXhjZXB0aW9uIFRoZSBvYmplY3QgY2FuIG5v
dCBiZSBjbG9uZWQuCi1GQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZz
Y3JlZW5DYW52YXMgd2l0aCBzaXplIDAgdGhyb3dzIGV4Y2VwdGlvbiBvZmZzY3JlZW5DYW52YXMu
Y29udmVydFRvQmxvYiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdvZmZzY3JlZW5DYW52YXMuY29u
dmVydFRvQmxvYigpJywgJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iJyBpcyB1bmRlZmlu
ZWQpCitQQVNTIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52
YXMgd2l0aCBzaXplIDAgdGhyb3dzIGV4Y2VwdGlvbiAKK1BBU1MgVGVzdCB0aGF0IGNhbGwgY29u
dmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHRhaW50ZWQgb3JpZ2luIHRocm93
cyBleGNlcHRpb24gCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVu
Y2FudmFzLmNvbnZlcnQudG8uYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3Jl
ZW5jYW52YXMuY29udmVydC50by5ibG9iLmh0bWwKaW5kZXggZmNlMDhlNTZhNzdiMGM1YmVjOTJk
YWRkMTY4YTQxNTc5ZDljNzJiZi4uN2QyMzBkOTY2YTk0NTM0NDk0OTg1MmY5MmI1MDEwYmJmOThl
OGNkNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29u
dmVydC50by5ibG9iLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52
YXMuY29udmVydC50by5ibG9iLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8IURPQ1RZUEUgaHRtbD4K
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSIvY29tbW9uL2NhbnZhcy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
LzJkY29udGV4dC9yZXNvdXJjZXMvY2FudmFzLXRlc3RzLmpzIj48L3NjcmlwdD4KIDxsaW5rIHJl
bD0iaGVscCIgaHJlZj0iaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG9tLW9mZnNjcmVl
bmNhbnZhcy1jb252ZXJ0dG9ibG9iIj4KIDxzY3JpcHQgaWQ9Im15V29ya2VyIiB0eXBlPSJ0ZXh0
L3dvcmtlciI+CiBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKQEAgLTE0NCw1ICsxNDQs
MjIgQEAgYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CiAgICAgfSkpOwogfSwgIlRlc3QgdGhhdCBj
YWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52YXMgd2l0aCBzaXplIDAgdGhyb3dz
IGV4Y2VwdGlvbiIpOwogCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICB2YXIgaW1nID0g
bmV3IEltYWdlKCk7CisgICAgaW1nLnNyYyA9ICIvaW1hZ2VzL2dyZWVuLnBuZyI7CisgICAgaW1n
LmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CisgICAgaW1nLm9ubG9hZCA9IHQuc3RlcF9mdW5j
X2RvbmUoKCkgPT4geworICAgICAgICB2YXIgb2Zmc2NyZWVuQ2FudmFzID0gbmV3IE9mZnNjcmVl
bkNhbnZhcygxMCwgMTApOworICAgICAgICB2YXIgY3R4ID0gb2Zmc2NyZWVuQ2FudmFzLmdldENv
bnRleHQoIjJkIik7CisgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKKyAgICAgICAg
b2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IoKS50aGVuKHQuc3RlcF9mdW5jX2RvbmUoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBhc3NlcnRfZmFsc2UoImNvbnZlcnRUb0Jsb2IgZGlkbid0
IHRocm93LCBidXQgc2hvdWxkIik7CisgICAgICAgIH0pLCB0LnN0ZXBfZnVuY19kb25lKGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgICAgIGFzc2VydF90cnVlKGUgaW5zdGFuY2VvZiBET01FeGNlcHRp
b24pOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlLm5hbWUsICJTZWN1cml0eUVycm9yIik7
CisgICAgICAgIH0pKTsKKyAgICB9KTsKK30sICJUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9i
IG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggdGFpbnRlZCBvcmlnaW4gdGhyb3dzIGV4Y2VwdGlv
biIpOworCiA8L3NjcmlwdD4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZz
Y3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQt
dG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0ZWQudHh0Cmlu
ZGV4IDE1ODIxMTFmMDAwZmQyMWVlN2JlYjg2MzM1MWYyZjU5NzZkNGZkYjEuLmE5NmMxYjQ1ODU0
NDViMWY2ZjEyZWJhMzVhMDdjMDA3YmY2YzZhZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRv
LWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1j
YW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2Iudy1l
eHBlY3RlZC50eHQKQEAgLTEsMTggKzEsMTkgQEAKIAotSGFybmVzcyBFcnJvciAoRkFJTCksIG1l
c3NhZ2UgPSBUeXBlRXJyb3I6IG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iIGlzIG5vdCBh
IGZ1bmN0aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKHt0eXBlOiB0eXBl
VmFsLCBxdWFsaXR5OiBxdWFsaXR5VmFsfSknLCAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Js
b2InIGlzIHVuZGVmaW5lZCkKK0hhcm5lc3MgRXJyb3IgKEZBSUwpLCBtZXNzYWdlID0gRGF0YUNs
b25lRXJyb3I6IFRoZSBvYmplY3QgY2FuIG5vdCBiZSBjbG9uZWQuCiAKLUZBSUwgVGVzdCB0aGF0
IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IGFyZ3VtZW50cyBwcm9kdWNlcyBjb3JyZWN0IHJl
c3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hh
YmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZhdWx0IHR5cGUv
MS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3Vu
cmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBj
b252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCB0eXBlLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJl
Y3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5y
ZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZy9kZWZh
dWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3Vu
cmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBj
b252ZXJ0VG9CbG9iIHdpdGggcG5nLzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0
IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUg
Y29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBuZy8wLjIgcXVhbGl0eSBw
cm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJv
ciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Ig
d2l0aCBqcGVnL2RlZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdv
cmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZB
SUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBqcGVnLzEuMCBxdWFsaXR5IHByb2R1Y2Vz
IGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNo
ZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpw
ZWcvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0
X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhh
dCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicC9kZWZhdWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVj
dCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJl
YWNoYWJsZSBjb2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggd2VicC8xLjAg
cXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFj
aGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZl
cnRUb0Jsb2Igd2l0aCB3ZWJwLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGlu
IGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29k
ZQorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgYXJndW1lbnRzIHBy
b2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVy
dFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZS8xLjAgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJl
c3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBkZWZh
dWx0IHR5cGUvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIg
CitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nL2RlZmF1bHQgcXVhbGl0eSBw
cm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZl
cnRUb0Jsb2Igd2l0aCBwbmcvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4g
YSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nLzAuMiBxdWFs
aXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQg
Y29udmVydFRvQmxvYiB3aXRoIGpwZWcvZGVmYXVsdCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3Qg
cmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpw
ZWcvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNT
IFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBlZy8wLjIgcXVhbGl0eSBwcm9kdWNlcyBj
b3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Ig
d2l0aCB3ZWJwL2RlZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdv
cmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwLzEuMCBxdWFsaXR5
IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29u
dmVydFRvQmxvYiB3aXRoIHdlYnAvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQg
aW4gYSB3b3JrZXIgCiBGQUlMIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBkZXRh
Y2hlZCBPZmZzY3JlZW5DYW52YXMgdGhyb3dzIGV4Y2VwdGlvbiBpbiBhIHdvcmtlciBhc3NlcnRf
dW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0
IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHNpemUgMCB0aHJv
d3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQg
dW5yZWFjaGFibGUgY29kZQorUEFTUyBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEg
T2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRpb24gaW4gYSB3b3JrZXIg
CitQQVNTIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52YXMg
d2l0aCB0YWludGVkIG9yaWdpbiB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIAogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNj
cmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJs
b2Iudy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9v
ZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50
by5ibG9iLncuaHRtbAppbmRleCA1NzMyMzZmM2ViYzMwMzNjNzQ3YTViOTE4MjRmZjExMWM4MTlj
NjE3Li4xYzY5ZDRkMjYzNjFmN2QxMTdhOWM4M2U5YTQ1N2ViNWYwZjA3OGRiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1j
YW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2Iudy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zm
c2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8u
YmxvYi53Lmh0bWwKQEAgLTEsNyArMSw3IEBACiA8IURPQ1RZUEUgaHRtbD4KIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIvY29t
bW9uL2NhbnZhcy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLzJkY29udGV4dC9y
ZXNvdXJjZXMvY2FudmFzLXRlc3RzLmpzIj48L3NjcmlwdD4KIDxsaW5rIHJlbD0iaGVscCIgaHJl
Zj0iaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG9tLW9mZnNjcmVlbmNhbnZhcy1jb252
ZXJ0dG9ibG9iIj4KIDxzY3JpcHQgaWQ9Im15V29ya2VyIiB0eXBlPSJ0ZXh0L3dvcmtlciI+CiBm
dW5jdGlvbiBkcmF3Q2FudmFzKGN0eCkKQEAgLTQwLDEyICs0MCw5IEBAIGZ1bmN0aW9uIHRlc3RD
b252ZXJ0VG9CbG9iRXhjZXB0aW9uMSgpCiAgICAgdmFyIG9mZnNjcmVlbkNhbnZhcyA9IG5ldyBP
ZmZzY3JlZW5DYW52YXMoMTAsIDEwKTsKICAgICBzZWxmLnBvc3RNZXNzYWdlKHtvZmZzY3JlZW5D
YW52YXN9LCBbb2Zmc2NyZWVuQ2FudmFzXSk7CiAgICAgb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRU
b0Jsb2IoKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHNlbGYucG9zdE1lc3NhZ2UoZmFsc2UpOwogICAgIH0sIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAg
aWYgKGUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24gJiYgZS5uYW1lID09ICJJbnZhbGlkU3RhdGVF
cnJvciIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGUgaW5zdGFuY2VvZiBE
T01FeGNlcHRpb24gJiYgZS5uYW1lID09ICJJbnZhbGlkU3RhdGVFcnJvciIpOwogICAgIH0pOwog
fQogCkBAIC01MywxNiArNTAsMzAgQEAgZnVuY3Rpb24gdGVzdENvbnZlcnRUb0Jsb2JFeGNlcHRp
b24yKCkKIHsKICAgICB2YXIgb2Zmc2NyZWVuQ2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcygw
LCAwKTsKICAgICBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYigpLnRoZW4oZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShmYWxz
ZSk7CiAgICAgfSwgZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIERPTUV4
Y2VwdGlvbiAmJiBlLm5hbWUgPT0gIkluZGV4U2l6ZUVycm9yIikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHNlbGYucG9zdE1lc3NhZ2UoZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlLm5hbWUgPT0g
IkluZGV4U2l6ZUVycm9yIik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RDb252ZXJ0VG9C
bG9iRXhjZXB0aW9uMyhiaXRtYXApCit7CisgICAgdmFyIG9mZnNjcmVlbkNhbnZhcyA9IG5ldyBP
ZmZzY3JlZW5DYW52YXMoMTAsIDEwKTsKKyAgICB2YXIgY3R4ID0gb2Zmc2NyZWVuQ2FudmFzLmdl
dENvbnRleHQoIjJkIik7CisgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOworICAgIG9m
ZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKCkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
c2VsZi5wb3N0TWVzc2FnZShmYWxzZSk7CisgICAgfSwgZnVuY3Rpb24oZSkgeworICAgICAgICBz
ZWxmLnBvc3RNZXNzYWdlKGUgaW5zdGFuY2VvZiBET01FeGNlcHRpb24gJiYgZS5uYW1lID09ICJT
ZWN1cml0eUVycm9yIik7CiAgICAgfSk7CiB9CiAKIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24o
ZSkgeworICAgIGlmIChlLmRhdGEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkgeworICAgICAgICB0
ZXN0Q29udmVydFRvQmxvYkV4Y2VwdGlvbjMoZS5kYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIHN3aXRjaChlLmRhdGEpIHsKICAgICAgICAgY2FzZSAndGVzdDEnOgogICAgICAg
ICAgICAgdGVzdENvbnZlcnRUb0Jsb2IoImVtcHR5IiwgImVtcHR5Iik7CkBAIC0xMDEsMTAgKzEx
MiwxMCBAQCBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgIHRlc3RD
b252ZXJ0VG9CbG9iKCJpbWFnZS93ZWJwIiwgMC4yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlICd0ZXN0MTMnOgotICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh0ZXN0Q29u
dmVydFRvQmxvYkV4Y2VwdGlvbjEoKSk7CisgICAgICAgICAgICB0ZXN0Q29udmVydFRvQmxvYkV4
Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICd0ZXN0MTQnOgot
ICAgICAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh0ZXN0Q29udmVydFRvQmxvYkV4Y2VwdGlvbjIo
KSk7CisgICAgICAgICAgICB0ZXN0Q29udmVydFRvQmxvYkV4Y2VwdGlvbjIoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KIH07CkBAIC0yODksOCArMzAwLDggQEAgYXN5bmNfdGVzdChmdW5j
dGlvbih0KSB7CiBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKICAgICB2YXIgd29ya2VyID0gbWFr
ZVdvcmtlcih0KTsKICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHQuc3Rl
cF9mdW5jX2RvbmUoZnVuY3Rpb24obXNnKSB7Ci0gICAgICAgIGlmIChtc2cuZGF0YSA9PSB0cnVl
IHx8IG1zZy5kYXRhID09IGZhbHNlKQotICAgICAgICAgICAgYXNzZXJ0X3RydWUobXNnLmRhdGEp
OworICAgICAgICBhc3NlcnRfdHJ1ZShtc2cuZGF0YSk7CisgICAgICAgIHQuZG9uZSgpOwogICAg
IH0pKTsKICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoJ3Rlc3QxMycpOwogfSwgIlRlc3QgdGhhdCBj
YWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBkZXRhY2hlZCBPZmZzY3JlZW5DYW52YXMgdGhyb3dzIGV4
Y2VwdGlvbiBpbiBhIHdvcmtlciIpOwpAQCAtMjk4LDExICszMDksMjcgQEAgYXN5bmNfdGVzdChm
dW5jdGlvbih0KSB7CiBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKICAgICB2YXIgd29ya2VyID0g
bWFrZVdvcmtlcih0KTsKICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHQu
c3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24obXNnKSB7Ci0gICAgICAgIGlmIChtc2cuZGF0YSA9PSB0
cnVlIHx8IG1zZy5kYXRhID09IGZhbHNlKQotICAgICAgICAgICAgYXNzZXJ0X3RydWUobXNnLmRh
dGEpOworICAgICAgICBhc3NlcnRfdHJ1ZShtc2cuZGF0YSk7CisgICAgICAgIHQuZG9uZSgpOwog
ICAgIH0pKTsKICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoJ3Rlc3QxNCcpOwogfSwgIlRlc3QgdGhh
dCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52YXMgd2l0aCBzaXplIDAgdGhy
b3dzIGV4Y2VwdGlvbiBpbiBhIHdvcmtlciIpOwogCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsK
KyAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CisgICAgaW1nLnNyYyA9ICIvaW1hZ2VzL2dyZWVu
LnBuZyI7CisgICAgaW1nLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CisgICAgaW1nLm9ubG9h
ZCA9IHQuc3RlcF9mdW5jX2RvbmUoKCkgPT4geworICAgICAgICBjcmVhdGVJbWFnZUJpdG1hcChp
bWcpLnRoZW4odC5zdGVwX2Z1bmNfZG9uZShiaXRtYXAgPT4geworICAgICAgICAgICAgdmFyIHdv
cmtlciA9IG1ha2VXb3JrZXIodCk7CisgICAgICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5l
cignbWVzc2FnZScsIHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0X3RydWUobXNnLmRhdGEpOworICAgICAgICAgICAgICAgIHQuZG9uZSgpOwor
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGJpdG1hcCk7
CisgICAgICAgIH0pKTsKKyAgICB9KTsKK30sICJUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9i
IG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggdGFpbnRlZCBvcmlnaW4gdGhyb3dzIGV4Y2VwdGlv
biBpbiBhIHdvcmtlciIpOworCiA8L3NjcmlwdD4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385382</attachid>
            <date>2019-12-11 05:11:18 -0800</date>
            <delta_ts>2019-12-13 08:22:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202573-20191211131116.patch</filename>
            <type>text/plain</type>
            <size>29485</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMyNjVhYjM2MTUyN2Ix
N2FhMWI5Y2E5OGZkMzYwM2M1NDIxYWNjZS4uMDAzNzhiODI1N2Q1MzFjODg4NTlkNmViZTY1MDNi
YWFlNWMzMTJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTEwLTEwICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgT2Zmc2NyZWVu
Q2FudmFzLmNvbnZlcnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIEltcGxlbWVudCBPZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYi4gVGhpcyBh
bHNvIGludm9sdmVzIG1ha2luZworICAgICAgICBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyBzYWZlIHRvIHVzZSBvZmYgdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgaW1w
bGVtZW50aW5nIE9mZnNjcmVlbkNhbnZhcy5zZWN1cml0eU9yaWdpbi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHRoZXNlIGNoYW5nZXMgZml4IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9FbmNvZGluZ01p
bWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnF1YWxpdHlGcm9tRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y29udmVydFRvQmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpPZmZzY3JlZW5DYW52YXM6OnNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL09mZnNjcmVlbkNhbnZhcy5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmlk
bDoKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJlYWRHbG9i
YWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5VGhyZWFkR2xvYmFs
RGF0YTo6TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGE6OnN1cHBvcnRlZEltYWdlTUlNRVR5
cGVzRm9yRW5jb2RpbmcgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YTo6bWltZVR5cGVSZWdp
c3RyeVRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2JhbERh
dGEuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisKIDIwMTktMTAt
MDQgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSBhbmQgY2FuY2VsQW5pbWF0aW9uRnJhbWUgc2hvdWxkIGJlIHByZXNlbnQgb24g
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2Fu
dmFzLmNwcAppbmRleCBkNWVlNWQ2NGZmZmY1YzU5MmZmNWJjYWU1ZGRmNDA4OTRkMTQxYzg5Li45
Zjc4ZThiMmJlY2IxOGI5ODlmNjI4ZGUxM2MxM2VkYTkwYjZiMjkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSAiQ1NT
VmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlQml0bWFwLmgiCisjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01Q
cm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAiV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKQEAgLTE2
NSwxMSArMTY3LDY1IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVl
bkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAorc3RhdGljIFN0cmluZyB0b0VuY29kaW5nTWltZVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSkKKyAgICAgICAg
cmV0dXJuICJpbWFnZS9wbmciX3M7CisgICAgcmV0dXJuIG1pbWVUeXBlLmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHlGcm9tRG91
YmxlKGRvdWJsZSBxdWFsaXR5TnVtYmVyKQoreworICAgIGlmICghKHF1YWxpdHlOdW1iZXIgPj0g
MCAmJiBxdWFsaXR5TnVtYmVyIDw9IDEpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIHF1YWxpdHlOdW1iZXI7Cit9CisKK3ZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpj
b252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIW9yaWdpbkNsZWFuKCkpIHsKKyAgICAgICAg
cHJvbWlzZS0+cmVqZWN0KFNlY3VyaXR5RXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChJbmRl
eFNpemVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFidWZmZXIoKSkg
eworICAgICAgICBwcm9taXNlLT5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKTsKKwor
ICAgIGF1dG8gZW5jb2RpbmdNSU1FVHlwZSA9IHRvRW5jb2RpbmdNaW1lVHlwZShvcHRpb25zLnR5
cGUpOworICAgIGF1dG8gcXVhbGl0eSA9IHF1YWxpdHlGcm9tRG91YmxlKG9wdGlvbnMucXVhbGl0
eSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gYmxvYkRhdGEgPSBidWZmZXIoKS0+dG9EYXRhKGVu
Y29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChibG9iRGF0YS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KEVuY29kaW5nRXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoV1RGTW92ZShibG9i
RGF0YSksIGVuY29kaW5nTUlNRVR5cGUpOworICAgIHByb21pc2UtPnJlc29sdmVXaXRoTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxCbG9iPj4oV1RGTW92ZShibG9iKSk7Cit9CisKIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBub3Rp
ZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3QpOwogfQogCitTZWN1cml0eU9yaWdpbiogT2Zm
c2NyZWVuQ2FudmFzOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgYXV0byYgY29udGV4
dCA9ICpjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmIChpczxXb3Jr
ZXJHbG9iYWxTY29wZT4oY29udGV4dCkpCisgICAgICAgIHJldHVybiAmZG93bmNhc3Q8V29ya2Vy
R2xvYmFsU2NvcGU+KGNvbnRleHQpLnRvcE9yaWdpbigpOworCisgICAgcmV0dXJuICZkb3duY2Fz
dDxEb2N1bWVudD4oY29udGV4dCkuc2VjdXJpdHlPcmlnaW4oKTsKK30KKwogQ1NTVmFsdWVQb29s
JiBPZmZzY3JlZW5DYW52YXM6OmNzc1ZhbHVlUG9vbCgpCiB7CiAgICAgYXV0byogY29udGV4dCA9
IGNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuaAppbmRleCBhMTZlYjU5MjI1ZGRlYzBhYWYyNDJjOWY1MDFmYjkwN2YzMDUw
ZjFhLi42NTk1Nzg5ZDVjODM0NjUyODE1NjFhM2IwNDMwYmQ1ZDJjZDYxZWU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ1NTVmFsdWVQ
b29sOworY2xhc3MgRGVmZXJyZWRQcm9taXNlOwogY2xhc3MgSW1hZ2VCaXRtYXA7CiBjbGFzcyBP
ZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ7CkBAIC03OSwxMyArODAsMTQgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPE9mZnNj
cmVlblJlbmRlcmluZ0NvbnRleHQ+IGdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJl
bmRlcmluZ0NvbnRleHRUeXBlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBh
cmd1bWVudHMpOwogI2VuZGlmCiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4g
dHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7Ci0gICAgLy8gdm9pZCBjb252ZXJ0VG9CbG9iKEltYWdl
RW5jb2RlT3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIGNvbnZlcnRUb0Jsb2IoSW1hZ2VFbmNv
ZGVPcHRpb25zJiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCiAgICAgdm9pZCBkaWREcmF3
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVm
ZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0KIAor
ICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IGZpbmFsOwogICAgIENT
U1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkOjpyZWY7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5pZGwKaW5kZXggZTJlZWYzMzM0Mjdl
YmNiN2Y3ZjVkYjRjNmE2MDY2NTNlYWY2OTZmZi4uNzc5MDMxYTljYjZjMGFjMDU5MDNiYTZiYzQ0
OGI5ZGNiMmMzYzQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmlkbApA
QCAtNTQsNiArNTQsNiBAQCBlbnVtIE9mZnNjcmVlblJlbmRlcmluZ0NvbnRleHRUeXBlCiAKICAg
ICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gT2Zmc2NyZWVuUmVu
ZGVyaW5nQ29udGV4dD8gZ2V0Q29udGV4dChPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0VHlwZSBj
b250ZXh0VHlwZSwgYW55Li4uIGFyZ3VtZW50cyk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBJ
bWFnZUJpdG1hcCB0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsKLSAgICAvLyBQcm9taXNlPEJsb2I+
IGNvbnZlcnRUb0Jsb2Iob3B0aW9uYWwgSW1hZ2VFbmNvZGVPcHRpb25zIG9wdGlvbnMpOworICAg
IFByb21pc2U8QmxvYj4gY29udmVydFRvQmxvYihvcHRpb25hbCBJbWFnZUVuY29kZU9wdGlvbnMg
b3B0aW9ucyk7CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwCmluZGV4IDIxOTA3ODQ1ZjU3MTZkMzhiOWI1MWZhZGQyY2RjNzlkZWJiMmIwOTIuLjEw
MGRkNjM5MTczNDM5YjZlNTQ3ZmQyMGIwNGJlMzg4ODJhZWJmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNp
bmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtMTcwLDQzICsxNzEsNiBAQCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiYgTUlNRVR5cGVSZWdpc3RyeTo6YWRkaXRpb25hbFN1cHBvcnRlZAogICAgIHJldHVy
biBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXM7CiB9CiAKLXN0YXRpYyBjb25zdCBI
YXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgc3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZXNGb3JFbmNvZGluZygpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgc3RhdGlj
IGNvbnN0IGF1dG8gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyA9IG1ha2VOZXZl
ckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBzdXBwb3J0ZWRU
eXBlcyA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ29weVR5cGVJZGVudGlmaWVycygpKTsK
LSAgICAgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZzsKLSAgICAgICAgQ0ZJbmRleCBjb3VudCA9IENG
QXJyYXlHZXRDb3VudChzdXBwb3J0ZWRUeXBlcy5nZXQoKSk7Ci0gICAgICAgIGZvciAoQ0ZJbmRl
eCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIENGU3RyaW5nUmVmIHN1cHBv
cnRlZFR5cGUgPSByZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KHN1cHBvcnRlZFR5cGVzLmdldCgpLCBpKSk7Ci0gICAgICAgICAgICBTdHJpbmcgbWlt
ZVR5cGUgPSBNSU1FVHlwZUZvckltYWdlVHlwZShzdXBwb3J0ZWRUeXBlKTsKLSAgICAgICAgICAg
IGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHN1cHBvcnRlZEltYWdl
TUlNRVR5cGVzRm9yRW5jb2RpbmcuYWRkKG1pbWVUeXBlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZzsKLSAgICB9KCkpOwotI2Vs
c2UKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4+IHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2RpbmcgPXN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkK
LSAgICAgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9y
dGVkIFVUSSdzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxp
YWJseSBpcyBmb3VuZC4KLSAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBF
RyBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgICAgICAiaW1hZ2Uv
cG5nIl9zLAotICAgICAgICAiaW1hZ2UvanBlZyJfcywKLSAgICAgICAgImltYWdlL2dpZiJfcywK
LSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgImltYWdlL3BuZyJfcywKLSAgICAgICAgImlt
YWdlL2pwZWciX3MsCi0gICAgICAgICJpbWFnZS90aWZmIl9zLAotICAgICAgICAiaW1hZ2UvYm1w
Il9zLAotICAgICAgICAiaW1hZ2UvaWNvIl9zLAotI2VsaWYgVVNFKENBSVJPKQotICAgICAgICAi
aW1hZ2UvcG5nIl9zLAotI2VuZGlmCi0gICAgfTsKLSNlbmRpZgotICAgIHJldHVybiBzdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nOwotfQotCiBzdGF0aWMgY29uc3QgSGFzaFNldDxT
dHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1cHBvcnRlZEphdmFTY3JpcHRNSU1F
VHlwZXMoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gc3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlcyA9IHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKQEAgLTQ3NCwxMyArNDM4LDQ1IEBAIGJvb2wg
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVZpZGVvT3JTVkdNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCitzdGQ6OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2Jh
bERhdGE+IE1JTUVUeXBlUmVnaXN0cnk6OmNyZWF0ZU1JTUVUeXBlUmVnaXN0cnlUaHJlYWRHbG9i
YWxEYXRhKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBzdXBwb3J0ZWRUeXBlcyA9IGFkb3B0Q0Yo
Q0dJbWFnZURlc3RpbmF0aW9uQ29weVR5cGVJZGVudGlmaWVycygpKTsKKyAgICBIYXNoU2V0PFN0
cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0Zv
ckVuY29kaW5nOworICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoc3VwcG9ydGVk
VHlwZXMuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
KyAgICAgICAgQ0ZTdHJpbmdSZWYgc3VwcG9ydGVkVHlwZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZT
dHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3VwcG9ydGVkVHlwZXMuZ2V0KCksIGkp
KTsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JJbWFnZVR5cGUoc3VwcG9y
dGVkVHlwZSk7CisgICAgICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
c3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZy5hZGQobWltZVR5cGUpOworICAgIH0K
KyNlbHNlCisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gc3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyA9IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxT
dHJpbmc+IHsKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAgICAgLy8gRklYTUU6
IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSSdzIHdoZW4gYSB3
YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KKyAg
ICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRyBhbmQgR0lGLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzYwOTUyODY+LgorICAgICAgICAiaW1hZ2UvcG5nIl9zLAorICAgICAgICAi
aW1hZ2UvanBlZyJfcywKKyAgICAgICAgImltYWdlL2dpZiJfcywKKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgImltYWdlL3BuZyJfcywKKyAgICAgICAgImltYWdlL2pwZWciX3MsCisgICAg
ICAgICJpbWFnZS90aWZmIl9zLAorICAgICAgICAiaW1hZ2UvYm1wIl9zLAorICAgICAgICAiaW1h
Z2UvaWNvIl9zLAorI2VsaWYgVVNFKENBSVJPKQorICAgICAgICAiaW1hZ2UvcG5nIl9zLAorI2Vu
ZGlmCisgICAgfTsKKyNlbmRpZgorICAgIHJldHVybiBtYWtlVW5pcXVlPE1JTUVUeXBlUmVnaXN0
cnlUaHJlYWRHbG9iYWxEYXRhPihXVEZNb3ZlKHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5j
b2RpbmcpKTsKK30KIAorYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGVGb3JFbmNvZGluZyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewogICAgIGlmIChtaW1l
VHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpLmNvbnRhaW5zKG1pbWVUeXBlKTsKKyAgICBy
ZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLm1pbWVUeXBlUmVnaXN0cnlUaHJlYWRHbG9iYWxEYXRh
KCkuc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZygpLmNvbnRhaW5zKG1pbWVUeXBl
KTsKIH0KIAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlN
RVR5cGVSZWdpc3RyeS5oCmluZGV4IDg3NmMzODI4MGQ0MzM3ODlmMTEyY2UwNzFjOWRjOGViMzdk
ZmJkNDIuLjFhZTJiNDk1ZTM3ZTc2Y2I2MmQ1NDZmNGE5YTNhMDQ4YjdjZThkYmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKQEAgLTMxLDYgKzMxLDIwIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IE1JTUVUeXBlUmVnaXN0cnlUaHJlYWRH
bG9iYWxEYXRhIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNSU1FVHlwZVJlZ2lzdHJ5VGhy
ZWFkR2xvYmFsRGF0YSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgTUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEoSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4mJiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5n
KQorICAgICAgICA6IG1fc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNGb3JFbmNvZGluZyhzdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlc0ZvckVuY29kaW5nKQorICAgIHsgfQorCisgICAgY29uc3QgSGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHN1cHBvcnRlZEltYWdlTUlNRVR5
cGVzRm9yRW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRlZEltYWdlTUlNRVR5cGVz
Rm9yRW5jb2Rpbmc7IH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBtX3N1cHBvcnRlZEltYWdlTUlNRVR5cGVzRm9yRW5jb2Rpbmc7Cit9
OworCiBjbGFzcyBNSU1FVHlwZVJlZ2lzdHJ5IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIGdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKTsKQEAgLTQzLDYgKzU3LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cmluZyBn
ZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGE+IGNyZWF0ZU1JTUVU
eXBlUmVnaXN0cnlUaHJlYWRHbG9iYWxEYXRhKCk7CisKICAgICAvLyBDaGVjayB0byBzZWUgaWYg
YSBNSU1FIHR5cGUgaXMgc3VpdGFibGUgZm9yIGJlaW5nIGxvYWRlZCBpbmxpbmUgYXMgYW4KICAg
ICAvLyBpbWFnZSAoZS5nLiwgPGltZz4gdGFncykuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAppbmRleCAyN2E3
MzY0MTZiYTA0YzA1M2MyZTc3ZGIyYzU1ODE0NDQwZDJmMGY5Li43MDU4NjlkNzQ1MTM4ZDE1ODU0
M2UwNzZiYzg1ZDQ3NTQyYWFiZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UaHJlYWRHbG9iYWxEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRHbG9iYWxEYXRhLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZUNhY2hlLmgi
CiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAjaW5jbHVkZSAiVGhyZWFkVGltZXJzLmgiCkBA
IC0xMTcsNCArMTE4LDExIEBAIFRocmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2JhbERhdGEoKQog
CiAjZW5kaWYKIAorY29uc3QgTUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEmIFRocmVh
ZEdsb2JhbERhdGE6Om1pbWVUeXBlUmVnaXN0cnlUaHJlYWRHbG9iYWxEYXRhKCkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkoIW1fTUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEpKQorICAgICAg
ICBtX01JTUVUeXBlUmVnaXN0cnlUaHJlYWRHbG9iYWxEYXRhID0gTUlNRVR5cGVSZWdpc3RyeTo6
Y3JlYXRlTUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGEoKTsKKyAgICByZXR1cm4gKm1f
TUlNRVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERhdGE7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuaAppbmRleCA1
NjMwZDk1OWRhNGFkMTIwYzNmNDIxYTU0MTRiYjFkZjE3YWYzY2RiLi5hMzQzMGUzNmFhYThkZWRm
NTRmYTVmNWQyZTk4ZDZlNzc0MDUwYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhy
ZWFkR2xvYmFsRGF0YS5oCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIFRocmVhZFRpbWVyczsKIHN0
cnVjdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzOwogc3RydWN0IEV2ZW50TmFtZXM7
CiBzdHJ1Y3QgSUNVQ29udmVydGVyV3JhcHBlcjsKK3N0cnVjdCBNSU1FVHlwZVJlZ2lzdHJ5VGhy
ZWFkR2xvYmFsRGF0YTsKIAogI2lmIFVTRShXRUJfVEhSRUFEKQogY2xhc3MgVGhyZWFkR2xvYmFs
RGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRHbG9iYWxEYXRhPiB7CkBA
IC03Myw2ICs3NCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW5SZW1vdmVBbGxFdmVudExpc3Rl
bmVycygpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzOyB9CiAg
ICAgdm9pZCBzZXRJc0luUmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoYm9vbCB2YWx1ZSkgeyBtX2lz
SW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyA9IHZhbHVlOyB9CiAKKyAgICBjb25zdCBNSU1FVHlw
ZVJlZ2lzdHJ5VGhyZWFkR2xvYmFsRGF0YSYgbWltZVR5cGVSZWdpc3RyeVRocmVhZEdsb2JhbERh
dGEoKTsKKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycz4gbV9jYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxFdmVudE5hbWVzPiBtX2V2ZW50TmFtZXM7CkBAIC04Nyw2ICs5MCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW5SZW1vdmVBbGxFdmVudExpc3RlbmVycyB7IGZhbHNl
IH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SUNVQ29udmVydGVyV3JhcHBlcj4gbV9jYWNoZWRD
b252ZXJ0ZXJJQ1U7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1JTUVUeXBlUmVnaXN0cnlUaHJlYWRH
bG9iYWxEYXRhPiBtX01JTUVUeXBlUmVnaXN0cnlUaHJlYWRHbG9iYWxEYXRhOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgZnJpZW5kIFRocmVhZEdsb2JhbERhdGEmIHRocmVhZEdsb2JhbERhdGEoKTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggOWY4
ZDMyOTIxNzQ3MmNhNjMxMTNlYTFhNWZkMThiMmIyMjFiYWFlNC4uMTU5ZmViN2M1NjRiYWRlZmZm
ZmM4MjU3NDJiMDM5NTIwZGMzMjVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
R2xvYmFsU2NvcGUuaApAQCAtMTIyLDYgKzEyMiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRk
Q29uc29sZU1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+
JiYpIGZpbmFsOwogCisgICAgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdG9wT3JpZ2luLmdldCgpOyB9CisKICAgICBDcnlwdG8mIGNyeXB0bygpOwog
ICAgIFBlcmZvcm1hbmNlJiBwZXJmb3JtYW5jZSgpIGNvbnN0OwogCkBAIC0xNzAsNyArMTcyLDYg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zaG91bGRCeXBhc3NNYWluV29ybGRD
b250ZW50U2VjdXJpdHlQb2xpY3k7IH0KICAgICBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4o
KSBjb25zdCBmaW5hbDsKLSAgICBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV90b3BPcmlnaW4uZ2V0KCk7IH0KIAogI2lmIEVOQUJMRShXRUJfQ1JZUFRP
KQogICAgIGJvb2wgd3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5KSBmaW5hbDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nCmluZGV4IDY2YTMxMmU2YjQ5ZDEzMzVjMzU3MTRlMmZhM2I2NDc4YTBmN2Q1ZmMuLjA5NDAw
ZTE4YmMxMzVlOTQyZWIyNjI5ZmU4ZTk2NmRkMWVjYjI4NmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTEwLTEwICBDaHJpcyBMb3JkICA8Y2xv
cmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgT2Zmc2NyZWVuQ2FudmFzLmNvbnZl
cnRUb0Jsb2IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMjU3MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFVw
ZGF0ZSB3aXRoIGZpeGVkIHdvcmtlciB0ZXN0cyBhbmQgU2VjdXJpdHlFcnJvciBjaGVja3MuIFNl
ZSB3cGUKKyAgICAgICAgaXNzdWVzICMyMDY5NCBhbmQgIzIwNjk4LgorCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVl
bmNhbnZhcy5jb252ZXJ0LnRvLmJsb2ItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52
YXMuY29udmVydC50by5ibG9iLmh0bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL29m
ZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRv
LmJsb2Iudy1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNj
cmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJs
b2Iudy5odG1sOgorCiAyMDE5LTExLTI1ICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4K
IAogICAgICAgICBNYWtlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yIHNh
ZmUgdG8gdXNlIHdpdGhpbiBhIHdvcmtlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxv
Yi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252
ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi1leHBlY3RlZC50eHQK
aW5kZXggYTJjNGI1MzQ5OWMxMTNkNzNlNDdlZjI1YWE5ODc0NDlkYjE4ZTE0YS4uOGZkOWVhOTY1
MGZmZWE3OGZhZWRkNGU4YzdjNTI4MjA2OTg1N2I5OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQt
dG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1j
YW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2ItZXhw
ZWN0ZWQudHh0CkBAIC0xLDggKzEsOSBAQAogCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9i
IHdpdGggZGVmYXVsdCB0eXBlIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IG9mZnNjcmVlbkNhbnZh
cy5jb252ZXJ0VG9CbG9iIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5j
b252ZXJ0VG9CbG9iKCknLCAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVm
aW5lZCkKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcgcHJvZHVjZXMgY29y
cmVjdCByZXN1bHQgb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rp
b24uIChJbiAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6IHR5cGVWYWx9KScs
ICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYicgaXMgdW5kZWZpbmVkKQotRkFJTCBUZXN0
IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpwZ2UgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgb2Zm
c2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnb2Zmc2Ny
ZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6IHR5cGVWYWx9KScsICdvZmZzY3JlZW5DYW52
YXMuY29udmVydFRvQmxvYicgaXMgdW5kZWZpbmVkKQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRv
QmxvYiB3aXRoIHdlYnAgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgb2Zmc2NyZWVuQ2FudmFzLmNv
bnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnb2Zmc2NyZWVuQ2FudmFzLmNvbnZl
cnRUb0Jsb2Ioe3R5cGU6IHR5cGVWYWx9KScsICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxv
YicgaXMgdW5kZWZpbmVkKQorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1
bHQgdHlwZSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCAKK1BBU1MgVGVzdCB0aGF0IGNvbnZlcnRU
b0Jsb2Igd2l0aCBwbmcgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgCitQQVNTIFRlc3QgdGhhdCBj
b252ZXJ0VG9CbG9iIHdpdGgganBnZSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCAKK1BBU1MgVGVz
dCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IAog
RkFJTCBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEgZGV0YWNoZWQgT2Zmc2NyZWVu
Q2FudmFzIHRocm93cyBleGNlcHRpb24gVGhlIG9iamVjdCBjYW4gbm90IGJlIGNsb25lZC4KLUZB
SUwgVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRo
IHNpemUgMCB0aHJvd3MgZXhjZXB0aW9uIG9mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iIGlz
IG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ29mZnNjcmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKCknLCAn
b2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2InIGlzIHVuZGVmaW5lZCkKK1BBU1MgVGVzdCB0
aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHNpemUgMCB0
aHJvd3MgZXhjZXB0aW9uIAorUEFTUyBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9CbG9iIG9uIGEg
T2Zmc2NyZWVuQ2FudmFzIHdpdGggdGFpbnRlZCBvcmlnaW4gdGhyb3dzIGV4Y2VwdGlvbiAKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9v
ZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50
by5ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0
LnRvLmJsb2IuaHRtbAppbmRleCBmY2UwOGU1NmE3N2IwYzViZWM5MmRhZGQxNjhhNDE1NzlkOWM3
MmJmLi43ZDIzMGQ5NjZhOTQ1MzQ0OTQ5ODUyZjkyYjUwMTBiYmY5OGU4Y2Q3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1j
YW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2IuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNj
cmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJs
b2IuaHRtbApAQCAtMSw3ICsxLDcgQEAKIDwhRE9DVFlQRSBodG1sPgogPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii9jb21tb24v
Y2FudmFzLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvMmRjb250ZXh0L3Jlc291
cmNlcy9jYW52YXMtdGVzdHMuanMiPjwvc2NyaXB0PgogPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb20tb2Zmc2NyZWVuY2FudmFzLWNvbnZlcnR0
b2Jsb2IiPgogPHNjcmlwdCBpZD0ibXlXb3JrZXIiIHR5cGU9InRleHQvd29ya2VyIj4KIHNlbGYu
b25tZXNzYWdlID0gZnVuY3Rpb24oZSkgewpAQCAtMTQ0LDUgKzE0NCwyMiBAQCBhc3luY190ZXN0
KGZ1bmN0aW9uKHQpIHsKICAgICB9KSk7CiB9LCAiVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxv
YiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHNpemUgMCB0aHJvd3MgZXhjZXB0aW9uIik7CiAK
K2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKKyAg
ICBpbWcuc3JjID0gIi9pbWFnZXMvZ3JlZW4ucG5nIjsKKyAgICBpbWcuY3Jvc3NPcmlnaW4gPSAi
YW5vbnltb3VzIjsKKyAgICBpbWcub25sb2FkID0gdC5zdGVwX2Z1bmNfZG9uZSgoKSA9PiB7Cisg
ICAgICAgIHZhciBvZmZzY3JlZW5DYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEwLCAxMCk7
CisgICAgICAgIHZhciBjdHggPSBvZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAg
ICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOworICAgICAgICBvZmZzY3JlZW5DYW52YXMu
Y29udmVydFRvQmxvYigpLnRoZW4odC5zdGVwX2Z1bmNfZG9uZShmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGFzc2VydF9mYWxzZSgiY29udmVydFRvQmxvYiBkaWRuJ3QgdGhyb3csIGJ1dCBzaG91
bGQiKTsKKyAgICAgICAgfSksIHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oZSkgeworICAgICAg
ICAgICAgYXNzZXJ0X3RydWUoZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbik7CisgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKGUubmFtZSwgIlNlY3VyaXR5RXJyb3IiKTsKKyAgICAgICAgfSkpOwor
ICAgIH0pOworfSwgIlRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5D
YW52YXMgd2l0aCB0YWludGVkIG9yaWdpbiB0aHJvd3MgZXhjZXB0aW9uIik7CisKIDwvc2NyaXB0
PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252
ZXJ0LnRvLmJsb2Iudy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMvY29udmVydC10by1ibG9iL29mZnNjcmVl
bmNhbnZhcy5jb252ZXJ0LnRvLmJsb2Iudy1leHBlY3RlZC50eHQKaW5kZXggMTU4MjExMWYwMDBm
ZDIxZWU3YmViODYzMzUxZjJmNTk3NmQ0ZmRiMS4uYTk2YzFiNDU4NTQ0NWIxZjZmMTJlYmEzNWEw
N2MwMDdiZjZjNmFkNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5j
YW52YXMuY29udmVydC50by5ibG9iLnctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRv
LWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53LWV4cGVjdGVkLnR4dApAQCAt
MSwxOCArMSwxOSBAQAogCi1IYXJuZXNzIEVycm9yIChGQUlMKSwgbWVzc2FnZSA9IFR5cGVFcnJv
cjogb2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2IgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAn
b2Zmc2NyZWVuQ2FudmFzLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6IHR5cGVWYWwsIHF1YWxpdHk6IHF1
YWxpdHlWYWx9KScsICdvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYicgaXMgdW5kZWZpbmVk
KQorSGFybmVzcyBFcnJvciAoRkFJTCksIG1lc3NhZ2UgPSBEYXRhQ2xvbmVFcnJvcjogVGhlIG9i
amVjdCBjYW4gbm90IGJlIGNsb25lZC4KIAotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3
aXRoIGRlZmF1bHQgYXJndW1lbnRzIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2Vy
IGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBU
ZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZS8xLjAgcXVhbGl0eSBwcm9k
dWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBS
ZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0
aCBkZWZhdWx0IHR5cGUvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3
b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1G
QUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nL2RlZmF1bHQgcXVhbGl0eSBwcm9k
dWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBS
ZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0
aCBwbmcvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNz
ZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIFRlc3Qg
dGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggcG5nLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3Qg
cmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFj
aGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGpwZWcvZGVmYXVs
dCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJl
YWNoZWQ6IGVycm9yIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29u
dmVydFRvQmxvYiB3aXRoIGpwZWcvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQg
aW4gYSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBj
b2RlCi1GQUlMIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBlZy8wLjIgcXVhbGl0eSBw
cm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJv
ciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Ig
d2l0aCB3ZWJwL2RlZmF1bHQgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdv
cmtlciBhc3NlcnRfdW5yZWFjaGVkOiBlcnJvciBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZB
SUwgVGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCB3ZWJwLzEuMCBxdWFsaXR5IHByb2R1Y2Vz
IGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9yIFJlYWNo
ZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdl
YnAvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgYXNzZXJ0
X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCitQQVNTIFRlc3QgdGhh
dCBjb252ZXJ0VG9CbG9iIHdpdGggZGVmYXVsdCBhcmd1bWVudHMgcHJvZHVjZXMgY29ycmVjdCBy
ZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGggZGVm
YXVsdCB0eXBlLzEuMCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2Vy
IAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIGRlZmF1bHQgdHlwZS8wLjIgcXVh
bGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0
IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcvZGVmYXVsdCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3Qg
cmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHBu
Zy8xLjAgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1Mg
VGVzdCB0aGF0IGNvbnZlcnRUb0Jsb2Igd2l0aCBwbmcvMC4yIHF1YWxpdHkgcHJvZHVjZXMgY29y
cmVjdCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdp
dGgganBlZy9kZWZhdWx0IHF1YWxpdHkgcHJvZHVjZXMgY29ycmVjdCByZXN1bHQgaW4gYSB3b3Jr
ZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgganBlZy8xLjAgcXVhbGl0eSBw
cm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0IGNvbnZl
cnRUb0Jsb2Igd2l0aCBqcGVnLzAuMiBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGlu
IGEgd29ya2VyIAorUEFTUyBUZXN0IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAvZGVmYXVs
dCBxdWFsaXR5IHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0IGluIGEgd29ya2VyIAorUEFTUyBUZXN0
IHRoYXQgY29udmVydFRvQmxvYiB3aXRoIHdlYnAvMS4wIHF1YWxpdHkgcHJvZHVjZXMgY29ycmVj
dCByZXN1bHQgaW4gYSB3b3JrZXIgCitQQVNTIFRlc3QgdGhhdCBjb252ZXJ0VG9CbG9iIHdpdGgg
d2VicC8wLjIgcXVhbGl0eSBwcm9kdWNlcyBjb3JyZWN0IHJlc3VsdCBpbiBhIHdvcmtlciAKIEZB
SUwgVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIGRldGFjaGVkIE9mZnNjcmVlbkNh
bnZhcyB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIGFzc2VydF91bnJlYWNoZWQ6IGVycm9y
IFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBUZXN0IHRoYXQgY2FsbCBjb252ZXJ0VG9C
bG9iIG9uIGEgT2Zmc2NyZWVuQ2FudmFzIHdpdGggc2l6ZSAwIHRocm93cyBleGNlcHRpb24gaW4g
YSB3b3JrZXIgYXNzZXJ0X3VucmVhY2hlZDogZXJyb3IgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2Rl
CitQQVNTIFRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5DYW52YXMg
d2l0aCBzaXplIDAgdGhyb3dzIGV4Y2VwdGlvbiBpbiBhIHdvcmtlciAKK1BBU1MgVGVzdCB0aGF0
IGNhbGwgY29udmVydFRvQmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHRhaW50ZWQgb3Jp
Z2luIHRocm93cyBleGNlcHRpb24gaW4gYSB3b3JrZXIgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252
ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53Lmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL29mZnNjcmVlbi1jYW52YXMv
Y29udmVydC10by1ibG9iL29mZnNjcmVlbmNhbnZhcy5jb252ZXJ0LnRvLmJsb2Iudy5odG1sCmlu
ZGV4IDU3MzIzNmYzZWJjMzAzM2M3NDdhNWI5MTgyNGZmMTExYzgxOWM2MTcuLjFjNjlkNGQyNjM2
MWY3ZDExN2E5YzgzZTlhNDU3ZWI1ZjBmMDc4ZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvb2Zmc2NyZWVuLWNhbnZhcy9jb252ZXJ0LXRv
LWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53Lmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9vZmZzY3JlZW4tY2FudmFzL2Nv
bnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLncuaHRtbApAQCAt
MSw3ICsxLDcgQEAKIDwhRE9DVFlQRSBodG1sPgogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii9jb21tb24vY2FudmFzLXRlc3Rz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvMmRjb250ZXh0L3Jlc291cmNlcy9jYW52YXMt
dGVzdHMuanMiPjwvc2NyaXB0PgogPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnLyNkb20tb2Zmc2NyZWVuY2FudmFzLWNvbnZlcnR0b2Jsb2IiPgogPHNj
cmlwdCBpZD0ibXlXb3JrZXIiIHR5cGU9InRleHQvd29ya2VyIj4KIGZ1bmN0aW9uIGRyYXdDYW52
YXMoY3R4KQpAQCAtNDAsMTIgKzQwLDkgQEAgZnVuY3Rpb24gdGVzdENvbnZlcnRUb0Jsb2JFeGNl
cHRpb24xKCkKICAgICB2YXIgb2Zmc2NyZWVuQ2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcygx
MCwgMTApOwogICAgIHNlbGYucG9zdE1lc3NhZ2Uoe29mZnNjcmVlbkNhbnZhc30sIFtvZmZzY3Jl
ZW5DYW52YXNdKTsKICAgICBvZmZzY3JlZW5DYW52YXMuY29udmVydFRvQmxvYigpLnRoZW4oZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2VsZi5wb3N0TWVzc2Fn
ZShmYWxzZSk7CiAgICAgfSwgZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoZSBpbnN0YW5jZW9m
IERPTUV4Y2VwdGlvbiAmJiBlLm5hbWUgPT0gIkludmFsaWRTdGF0ZUVycm9yIikKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBl
Lm5hbWUgPT0gIkludmFsaWRTdGF0ZUVycm9yIik7CiAgICAgfSk7CiB9CiAKQEAgLTUzLDE2ICs1
MCwzMCBAQCBmdW5jdGlvbiB0ZXN0Q29udmVydFRvQmxvYkV4Y2VwdGlvbjIoKQogewogICAgIHZh
ciBvZmZzY3JlZW5DYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsIDApOwogICAgIG9mZnNj
cmVlbkNhbnZhcy5jb252ZXJ0VG9CbG9iKCkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGZhbHNlKTsKICAgICB9LCBmdW5j
dGlvbihlKSB7Ci0gICAgICAgIGlmIChlIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGUubmFt
ZSA9PSAiSW5kZXhTaXplRXJyb3IiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2VsZi5wb3N0TWVzc2Fn
ZShlIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIGUubmFtZSA9PSAiSW5kZXhTaXplRXJyb3Ii
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdENvbnZlcnRUb0Jsb2JFeGNlcHRpb24zKGJp
dG1hcCkKK3sKKyAgICB2YXIgb2Zmc2NyZWVuQ2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcygx
MCwgMTApOworICAgIHZhciBjdHggPSBvZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsK
KyAgICBjdHguZHJhd0ltYWdlKGJpdG1hcCwgMCwgMCk7CisgICAgb2Zmc2NyZWVuQ2FudmFzLmNv
bnZlcnRUb0Jsb2IoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxmLnBvc3RNZXNzYWdl
KGZhbHNlKTsKKyAgICB9LCBmdW5jdGlvbihlKSB7CisgICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uo
ZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlLm5hbWUgPT0gIlNlY3VyaXR5RXJyb3IiKTsK
ICAgICB9KTsKIH0KIAogc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgaWYgKGUu
ZGF0YSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSB7CisgICAgICAgIHRlc3RDb252ZXJ0VG9CbG9i
RXhjZXB0aW9uMyhlLmRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgc3dpdGNo
KGUuZGF0YSkgewogICAgICAgICBjYXNlICd0ZXN0MSc6CiAgICAgICAgICAgICB0ZXN0Q29udmVy
dFRvQmxvYigiZW1wdHkiLCAiZW1wdHkiKTsKQEAgLTEwMSwxMCArMTEyLDEwIEBAIHNlbGYub25t
ZXNzYWdlID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgdGVzdENvbnZlcnRUb0Jsb2IoImlt
YWdlL3dlYnAiLCAwLjIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ3Rlc3Qx
Myc6Ci0gICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHRlc3RDb252ZXJ0VG9CbG9iRXhjZXB0
aW9uMSgpKTsKKyAgICAgICAgICAgIHRlc3RDb252ZXJ0VG9CbG9iRXhjZXB0aW9uMSgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ3Rlc3QxNCc6Ci0gICAgICAgICAgICBzZWxm
LnBvc3RNZXNzYWdlKHRlc3RDb252ZXJ0VG9CbG9iRXhjZXB0aW9uMigpKTsKKyAgICAgICAgICAg
IHRlc3RDb252ZXJ0VG9CbG9iRXhjZXB0aW9uMigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQogfTsKQEAgLTI4OSw4ICszMDAsOCBAQCBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKIGFzeW5j
X3Rlc3QoZnVuY3Rpb24odCkgewogICAgIHZhciB3b3JrZXIgPSBtYWtlV29ya2VyKHQpOwogICAg
IHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdC5zdGVwX2Z1bmNfZG9uZShmdW5j
dGlvbihtc2cpIHsKLSAgICAgICAgaWYgKG1zZy5kYXRhID09IHRydWUgfHwgbXNnLmRhdGEgPT0g
ZmFsc2UpCi0gICAgICAgICAgICBhc3NlcnRfdHJ1ZShtc2cuZGF0YSk7CisgICAgICAgIGFzc2Vy
dF90cnVlKG1zZy5kYXRhKTsKKyAgICAgICAgdC5kb25lKCk7CiAgICAgfSkpOwogICAgIHdvcmtl
ci5wb3N0TWVzc2FnZSgndGVzdDEzJyk7CiB9LCAiVGVzdCB0aGF0IGNhbGwgY29udmVydFRvQmxv
YiBvbiBhIGRldGFjaGVkIE9mZnNjcmVlbkNhbnZhcyB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29y
a2VyIik7CkBAIC0yOTgsMTEgKzMwOSwyNyBAQCBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKIGFz
eW5jX3Rlc3QoZnVuY3Rpb24odCkgewogICAgIHZhciB3b3JrZXIgPSBtYWtlV29ya2VyKHQpOwog
ICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdC5zdGVwX2Z1bmNfZG9uZShm
dW5jdGlvbihtc2cpIHsKLSAgICAgICAgaWYgKG1zZy5kYXRhID09IHRydWUgfHwgbXNnLmRhdGEg
PT0gZmFsc2UpCi0gICAgICAgICAgICBhc3NlcnRfdHJ1ZShtc2cuZGF0YSk7CisgICAgICAgIGFz
c2VydF90cnVlKG1zZy5kYXRhKTsKKyAgICAgICAgdC5kb25lKCk7CiAgICAgfSkpOwogICAgIHdv
cmtlci5wb3N0TWVzc2FnZSgndGVzdDE0Jyk7CiB9LCAiVGVzdCB0aGF0IGNhbGwgY29udmVydFRv
QmxvYiBvbiBhIE9mZnNjcmVlbkNhbnZhcyB3aXRoIHNpemUgMCB0aHJvd3MgZXhjZXB0aW9uIGlu
IGEgd29ya2VyIik7CiAKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHZhciBpbWcgPSBu
ZXcgSW1hZ2UoKTsKKyAgICBpbWcuc3JjID0gIi9pbWFnZXMvZ3JlZW4ucG5nIjsKKyAgICBpbWcu
Y3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKKyAgICBpbWcub25sb2FkID0gdC5zdGVwX2Z1bmNf
ZG9uZSgoKSA9PiB7CisgICAgICAgIGNyZWF0ZUltYWdlQml0bWFwKGltZykudGhlbih0LnN0ZXBf
ZnVuY19kb25lKGJpdG1hcCA9PiB7CisgICAgICAgICAgICB2YXIgd29ya2VyID0gbWFrZVdvcmtl
cih0KTsKKyAgICAgICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdC5z
dGVwX2Z1bmNfZG9uZShmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfdHJ1
ZShtc2cuZGF0YSk7CisgICAgICAgICAgICAgICAgdC5kb25lKCk7CisgICAgICAgICAgICB9KSk7
CisgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoYml0bWFwKTsKKyAgICAgICAgfSkpOwor
ICAgIH0pOworfSwgIlRlc3QgdGhhdCBjYWxsIGNvbnZlcnRUb0Jsb2Igb24gYSBPZmZzY3JlZW5D
YW52YXMgd2l0aCB0YWludGVkIG9yaWdpbiB0aHJvd3MgZXhjZXB0aW9uIGluIGEgd29ya2VyIik7
CisKIDwvc2NyaXB0PgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>