<?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>234171</bug_id>
          
          <creation_ts>2021-12-10 13:23:43 -0800</creation_ts>
          <short_desc>[Cocoa] OT-SVG glyphs don&apos;t draw into canvases (because of the GPU process)</short_desc>
          <delta_ts>2022-03-31 01:40:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=232917</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>hi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1822932</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 13:23:43 -0800</bug_when>
    <thetext>[Cocoa] OT-SVG glyphs don&apos;t draw into canvases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822943</commentid>
    <comment_count>1</comment_count>
      <attachid>446801</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 13:30:28 -0800</bug_when>
    <thetext>Created attachment 446801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822944</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 13:30:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/70166552&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822945</commentid>
    <comment_count>3</comment_count>
      <attachid>446802</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 13:31:16 -0800</bug_when>
    <thetext>Created attachment 446802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822967</commentid>
    <comment_count>4</comment_count>
      <attachid>446809</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 14:13:31 -0800</bug_when>
    <thetext>Created attachment 446809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822974</commentid>
    <comment_count>5</comment_count>
      <attachid>446811</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 14:17:55 -0800</bug_when>
    <thetext>Created attachment 446811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823063</commentid>
    <comment_count>6</comment_count>
      <attachid>446811</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-12-10 16:01:55 -0800</bug_when>
    <thetext>Comment on attachment 446811
Patch

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

r=me, nice work!  I won&apos;t claim to fully understand the motivation, but the logic looks sound :)

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:101
&gt; +auto ImageBuffer::createCompatibleBuffer(const FloatRect&amp; rect, const GraphicsContext&amp; context) -&gt; std::optional&lt;CompatibleBufferDescription&gt;

Aside: Why use `auto` instead of `std::optional&lt;CompatibleBufferDescription&gt;`?

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:195
&gt; +auto ImageBuffer::compatibleBufferInfo(const FloatRect&amp; rect, const GraphicsContext&amp; context) -&gt; CompatibleBufferInfo

ditto (:101)

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:207
&gt; +    // In practice, this should almost never happen - individual glyphs inside text pretty much
&gt; +    // never end up this big.

NIT: this is assuming that this function is only ever called when dealing with glyphs, but there&apos;s nothing in the header that indicates that

&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:379
&gt; +        if (auto imageBufferInfo = ImageBuffer::createCompatibleBuffer(bounds, m_owner)) {

NIT: Should this be `imageBufferDescription` since `ImageBuffer::createCompatibleBuffer` returns a `std::optional&lt;CompatibleBufferDescription&gt;`, not a `CompatibleBufferInfo`?

&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:380
&gt; +            FontCascade::drawGlyphs(imageBufferInfo-&gt;imageBuffer-&gt;context(), font, glyphs + i, advances + i, 1, FloatPoint(), smoothingMode);

Does this also need a `prepareInternalContext(font, smoothingMode);` and `concludeInternalContext();` somewhere? 

Style: Why not `glyphs[i]` and `advances[i]`?

&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:398
&gt;      auto otsvgGlyphs = font.findOTSVGGlyphs(glyphs, numGlyphs);

Aside: as a (future) optimization it would be nice to avoid this and instead only have to do one iteration of `glyphs` (i.e. add a `Font::isOTSVGGlyph(GlyphBufferGlyph)` that you call in the `for` below)

&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:411
&gt; +    bool state = false;

NIT: How about `isOTSVGRun`?

&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:417
&gt; +            drawOTSVGRun(font, glyphs + i - glyphCountInRun, advances + i - glyphCountInRun, glyphCountInRun, runOrigin, smoothingMode);

ditto (:380)

&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:419
&gt; +            drawNonOTSVGRun(font, glyphs + i - glyphCountInRun, advances + i - glyphCountInRun, glyphCountInRun, runOrigin, smoothingMode);

ditto (:380)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823070</commentid>
    <comment_count>7</comment_count>
      <attachid>446811</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 16:12:03 -0800</bug_when>
    <thetext>Comment on attachment 446811
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:101
&gt;&gt; +auto ImageBuffer::createCompatibleBuffer(const FloatRect&amp; rect, const GraphicsContext&amp; context) -&gt; std::optional&lt;CompatibleBufferDescription&gt;
&gt; 
&gt; Aside: Why use `auto` instead of `std::optional&lt;CompatibleBufferDescription&gt;`?

CompatibleBufferDescription is defined inside ImageBuffer, and C++ says the scope starts at the word &quot;ImageBuffer::&quot; so because this is on the left of that it would have had to be std::optional&lt;ImageBuffer::CompatibleBufferDescription&gt;. Moving it to the right side means you can drop the ImageBuffer::

&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:207
&gt;&gt; +    // never end up this big.
&gt; 
&gt; NIT: this is assuming that this function is only ever called when dealing with glyphs, but there&apos;s nothing in the header that indicates that

Good point! Yep, I&apos;ll fix it.

&gt;&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:379
&gt;&gt; +        if (auto imageBufferInfo = ImageBuffer::createCompatibleBuffer(bounds, m_owner)) {
&gt; 
&gt; NIT: Should this be `imageBufferDescription` since `ImageBuffer::createCompatibleBuffer` returns a `std::optional&lt;CompatibleBufferDescription&gt;`, not a `CompatibleBufferInfo`?

👍

&gt;&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:380
&gt;&gt; +            FontCascade::drawGlyphs(imageBufferInfo-&gt;imageBuffer-&gt;context(), font, glyphs + i, advances + i, 1, FloatPoint(), smoothingMode);
&gt; 
&gt; Does this also need a `prepareInternalContext(font, smoothingMode);` and `concludeInternalContext();` somewhere? 
&gt; 
&gt; Style: Why not `glyphs[i]` and `advances[i]`?

It doesn&apos;t, because it doesn&apos;t use m_internalContext. This draws into the ImageBuffer&apos;s context instead.

These parameters are pointer type. Do you think &amp;(glyphs[i]) is more readable than glyphs + i?

&gt;&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:398
&gt;&gt;      auto otsvgGlyphs = font.findOTSVGGlyphs(glyphs, numGlyphs);
&gt; 
&gt; Aside: as a (future) optimization it would be nice to avoid this and instead only have to do one iteration of `glyphs` (i.e. add a `Font::isOTSVGGlyph(GlyphBufferGlyph)` that you call in the `for` below)

Let&apos;s chat offline about this. I&apos;m curious more more details.

&gt;&gt; Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp:411
&gt;&gt; +    bool state = false;
&gt; 
&gt; NIT: How about `isOTSVGRun`?

🆒</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823104</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-10 16:53:48 -0800</bug_when>
    <thetext>Committed r286889 (245117@trunk): &lt;https://commits.webkit.org/245117@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823176</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-12-11 00:01:30 -0800</bug_when>
    <thetext>Committed r286906 (?): &lt;https://commits.webkit.org/r286906&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830270</commentid>
    <comment_count>10</comment_count>
      <attachid>446811</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-12 12:09:58 -0800</bug_when>
    <thetext>Comment on attachment 446811
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:225
&gt; +}

Maybe I misunderstand something here. But my understanding is this function returns
1. The size of the ImageBuffer in backend coordinates after clamping it if needed
2. The enclosing rectangle of the ImageBuffer in logical coordinates
3. The scaling factor which is the context scaling factor + the clamping scaling factor if applied.

If my understanding is correct, I think this function can be written like this:

static CompatibleBufferInfo compatibleBufferInfo(const FloatRect&amp; rect, const GraphicsContext&amp; context)
{
    auto scaleFactor = context.scaleFactor();
    ImageBuffer::sizeNeedsClamping(rect.size(), scaleFactor);
    auto backendSize = rect.size() * scaleFactor;
    return { expandedIntSize(backendSize), enclosingIntRect(rect), scaleFactor };
}

In fact I think the function and the struct CompatibleBufferInfo are not needed. These few lines can be moved to the only caller createCompatibleBuffer().

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:76
&gt; +    struct CompatibleBufferInfo {
&gt; +        IntSize physicalSizeInDeviceCoordinates;
&gt; +        FloatRect inflatedRectInUserCoordinates;
&gt; +        FloatSize scale;
&gt; +    };
&gt; +    static CompatibleBufferInfo compatibleBufferInfo(const FloatRect&amp;, const GraphicsContext&amp;);

This function and this struct can be moved to ImageBuffer.cpp since they are only used internally by ImageBuffer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446801</attachid>
            <date>2021-12-10 13:30:28 -0800</date>
            <delta_ts>2021-12-10 13:31:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234171-20211210133027.patch</filename>
            <type>text/plain</type>
            <size>18607</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI4MWQzYTAwZmJiYTZh
YzExNjQwZGE5NDZmNTkyOTM3ODMwZDFiMC4uM2I5YjY4NGE4MTZjYTE2NmU5NWY5OGU4MzAzMTU3
OTA3NTE4YzkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTEyLTEwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBP
VC1TVkcgZ2x5cGhzIGRvbid0IGRyYXcgaW50byBjYW52YXNlcyAoYmVjYXVzZSBvZiB0aGUgR1BV
IHByb2Nlc3MpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQxNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcwMTY2NTUyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyYXdpbmcgT1QtU1ZHIGdseXBo
cyBpbnRvIGNhbnZhcyB3YXMgaW50ZW50aW9uYWxseSBkaXNhYmxlZCBpbiBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjY5MjExL3dlYmtpdC4KKyAgICAgICAgVGhpcyBwYXRjaCBl
bmFibGVzIGl0IGFnYWluLiBSYXRoZXIgdGhhbiBkb2luZyBhbnl0aGluZyBjb21wbGljYXRlZCBs
aWtlIHN1cHBvcnRpbmcgYWxsIG9mIFNWRyBpbiBEcmF3R2x5cGhzUmVjb3JkZXIsCisgICAgICAg
IHdlIGNhbiBzaW1wbHkgc3VwcG9ydCB0aGlzIGJ5IGRyYXdpbmcgdGhlIGdseXBocyBpbnRvIGEg
SW1hZ2VCdWZmZXIgYW5kIHNlbmRpbmcgdGhlIEltYWdlQnVmZmVyIHRvIHRoZSBHUFUgcHJvY2Vz
cy4KKworICAgICAgICBGb3IgdGV4dCwgaXQncyBwcmV0dHkgaW1wb3J0YW50IHRoYXQgdGhlIHBp
eGVsIGdyaWQgb2YgdGhlIEltYWdlQnVmZmVyIG1hdGNoZXMgdGhlIHBpeGVsIGdyaWQgb2YgdGhl
IGRlc3RpbmF0aW9uLAorICAgICAgICByYXRoZXIgdGhhbiBiZWluZyBvZmZzZXQgYnkgaGFsZiBh
IHBpeGVsIG9yIHNvbWV0aGluZy4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGNyZWF0aW9uIGZ1bmN0
aW9uIHRvIEltYWdlQnVmZmVyIHdoaWNoCisgICAgICAgIGFjY2VwdHMgYSBGbG9hdFJlY3QgKGlu
c3RlYWQgb2YgdGhlIHByZXZpb3VzIEZsb2F0U2l6ZSB3aGljaCBpdCB1c2VkIHRvIGFjY2VwdCku
IFRoZSBGbG9hdFJlY3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgaW5mbGF0aW5nIHRo
ZSBnZW9tZXRyeSBoYXMgdG8gaGFwcGVuIG9uIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBp
ZiB3ZSB3YW50IHRoZSBwaXhlbCBncmlkcyB0byBtYXRjaC4KKworICAgICAgICBUZXN0OiBmYXN0
L3RleHQvb3RzdmctY2FudmFzLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
SW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGlu
Z0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyT3V0T1RTVkdH
bHlwaHMpOiBEZWxldGVkLgorCiAyMDIxLTEyLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NjgzNi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1Jl
Y29yZGVyLmgKaW5kZXggMWQwZTg3OTBkYTM1YzA4MWE4MGJlZjFiMWU3MWEzYjdkOWY1MTM3Yy4u
MjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAg
LTc1LDYgKzc1LDEwIEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0J5U3BsaXR0
aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZv
aWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd05vbk9U
U1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworCiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2b2lkIHBvcHVsYXRlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwcmVw
YXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXgg
ODhjZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uZDY3ZmMzNGI1YTE2NzRj
YTNiN2RhMDIxMTMyODQ1MGI3ZTg2YmI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtOTAsMTEgKzkwLDM3IEBAIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0
aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNj
YWxlZFNpemUgLyBzaXplKTsKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKKy8vIFRoaXMg
aXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwaXhlbCBncmlkIG9mIHRo
ZSBJbWFnZUJ1ZmZlciBhbGlnbnMgd2l0aCB0aGUgcGl4ZWwgZ3JpZCBvZiB0aGUgY29udGV4dC4K
Ky8vIFNpbXBseSBzYXlpbmcgY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29u
dGV4dCkgaXNuJ3Qgc3VmZmljaWVudCBpbiB0aGlzIHNpdHVhdGlvbiwgYmVjYXVzZSByZWN0Lmxv
Y2F0aW9uKCkgbWF5IG5vdCBsaWUgb24gYSBwaXhlbCBib3VuZGFyeS4KKy8vIEluIHRoaXMgc2l0
dWF0aW9uLCB3ZSBoYXZlIHRvIGluZmxhdGUgYm90aCB0aGUgbGVmdCBzaWRlIGFuZCB0aGUgcmln
aHQgc2lkZSwgd2hpY2ggY2FuIGxlYWQgdG8gZGlmZmVyZW50IHJlc3VsdHMgdGhhbgorLy8gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29udGV4dCkgd291bGQgaGF2ZSBwcm9k
dWNlZC4KK2F1dG8gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIC0+IHN0ZDo6b3B0
aW9uYWw8Q29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uPgoreworICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gaW5mbyA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVySW5mbyhyZWN0LCBjb250ZXh0KTsKKworICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBpZiAoY29udGV4dC5yZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGluZm8ucGh5c2ljYWxTaXplSW5E
ZXZpY2VDb29yZGluYXRlcywgY29udGV4dCk7CisgICAgCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShp
bmZvLnBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMsIGNvbnRleHQpOworCisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoaW5mby5zY2FsZSk7CisgICAgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS50cmFuc2xhdGUoLWluZm8uaW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMubG9j
YXRpb24oKSk7CisgICAgcmV0dXJuIHsgeyBpbWFnZUJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBp
bmZvLmluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzIH0gfTsKK30KKwogUmVmUHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKQEAg
LTEwNiw3ICsxMzIsNiBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYwogICAgIGlmICghaW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CiAgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQpAQCAtMTY3LDYgKzE5MiwxOCBAQCBJbnRTaXplIEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
QwogICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3Io
KSk7CiB9CiAKK2F1dG8gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJJbmZvKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSAtPiBDb21wYXRp
YmxlQnVmZmVySW5mbworeworICAgIGF1dG8gc2NhbGVGYWN0b3IgPSBjb250ZXh0LnNjYWxlRmFj
dG9yKCk7CisgICAgYXV0byBzY2FsZWRSZWN0ID0gcmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIGluZmxhdGVkU2NhbGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3Qoc2NhbGVkUmVjdCk7CisgICAgYXV0byBwaHlzaWNhbFNpemVJbkRldmljZUNvb3JkaW5h
dGVzID0gaW5mbGF0ZWRTY2FsZWRSZWN0LnNpemUoKTsKKyAgICBhdXRvIGluZmxhdGVkUmVjdElu
VXNlckNvb3JkaW5hdGVzID0gRmxvYXRSZWN0KGluZmxhdGVkU2NhbGVkUmVjdCk7CisgICAgaW5m
bGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMuc2NhbGUoMS4wZiAvIHNjYWxlRmFjdG9yKTsKKyAg
ICByZXR1cm4geyBXVEZNb3ZlKHBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMpLCBXVEZN
b3ZlKGluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzKSwgc2NhbGVGYWN0b3IgfTsKK30KKwog
UmVmUHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyZWN0LmlzRW1wdHko
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmlu
ZGV4IGQ3Yjc1NjRhNTliOGMyNjc2YTc2ZTE5MWM1YTA3OTU5NjE4OTg2MTIuLmQyZDliZTllZjQw
MzJmYWEyNWJlNjJjYWNlNDM3ODJkZWZjYjc0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNTIsNiArNTIsMTEgQEAgcHVibGljOgog
CiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRl
eHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIg
YW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICBzdHJ1Y3QgQ29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uIHsKKyAg
ICAgICAgUmVmPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgRmxvYXRSZWN0IGlu
ZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzOworICAgIH07CisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8Q29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdEluVXNlckNvb3JkaW5hdGVzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBSZWZQdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKIApAQCAtNjMsNiArNjgsMTIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBzdGF0aWMg
SW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKKyAgICBzdHJ1Y3QgQ29tcGF0aWJsZUJ1ZmZlckluZm8geworICAgICAg
ICBJbnRTaXplIHBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXM7CisgICAgICAgIEZsb2F0
UmVjdCBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlczsKKyAgICAgICAgRmxvYXRTaXplIHNj
YWxlOworICAgIH07CisgICAgc3RhdGljIENvbXBhdGlibGVCdWZmZXJJbmZvIGNvbXBhdGlibGVC
dWZmZXJJbmZvKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAg
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9E
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZDQz
YmU2OTMxY2FmMTFlYWU4MGI1ODBjY2IyZDk1YTA5MjA1OWI0Ni4uNTA2OGY0Yzg2ZGRlMDA1NGVj
ODBiMjE0YjI3ZDQ1ZDBmMjVlZDE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNv
cmRlckNvcmVUZXh0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2luY2x1ZGUgPENvcmVUZXh0
L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcwLDUzICszNzEsNzEg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUKICAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJl
Y3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOwogfQogCi1zdHJ1Y3QgR2x5cGhz
QW5kQWR2YW5jZXNTdG9yYWdlIHsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaD4gZ2x5cGhz
OwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2U+IGFkdmFuY2VzOwotfTsKK3ZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGZvbnQpOwor
ICAgIFVOVVNFRF9QQVJBTShnbHlwaHMpOworICAgIFVOVVNFRF9QQVJBTShhZHZhbmNlcyk7Cisg
ICAgVU5VU0VEX1BBUkFNKG51bUdseXBocyk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0UG9pbnQp
OworICAgIFVOVVNFRF9QQVJBTShzbW9vdGhpbmdNb2RlKTsKKyAgICBGbG9hdFBvaW50IHBlblBv
c2l0aW9uID0gc3RhcnRQb2ludDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpIHsKKyAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGds
eXBoc1tpXSk7CisgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVySW5mbyA9IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGJvdW5kcywgbV9vd25lcikpIHsKKyAgICAgICAgICAg
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVySW5mby0+aW1hZ2VCdWZmZXItPmNv
bnRleHQoKSwgZm9udCwgZ2x5cGhzICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCks
IHNtb290aGluZ01vZGUpOworICAgICAgICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbWFn
ZUJ1ZmZlckluZm8tPmluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzOworICAgICAgICAgICAg
ZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7CisgICAgICAgICAgICBtX293bmVy
LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlckluZm8tPmltYWdlQnVmZmVyLCBkZXN0aW5hdGlv
blJlY3QpOworICAgICAgICB9CisgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNl
c1tpXSkpOworICAgIH0KK30KIAotc3RydWN0IEdseXBoc0FuZEFkdmFuY2VzIHsKLSAgICBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHM7Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlczsKLSAgICB1bnNpZ25lZCBudW1HbHlwaHM7Ci0gICAgR2x5cGhCdWZmZXJBZHZh
bmNlIGluaXRpYWxBZHZhbmNlOwotICAgIHN0ZDo6b3B0aW9uYWw8R2x5cGhzQW5kQWR2YW5jZXNT
dG9yYWdlPiBzdG9yYWdlOwotfTsKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RT
VkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCit7CisgICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9vdGhpbmdNb2RlKTsK
KyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4dCwgZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAg
ICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworfQogCi1zdGF0aWMgR2x5cGhzQW5kQWR2YW5j
ZXMgZmlsdGVyT3V0T1RTVkdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5n
SW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGF1dG8gb3RzdmdHbHlwaHMgPSBmb250LmZp
bmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7Ci0gICAgaWYgKCFvdHN2Z0dseXBocykK
LSAgICAgICAgcmV0dXJuIHsgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBtYWtlR2x5cGhC
dWZmZXJBZHZhbmNlKCksIHsgfX07CisgICAgaWYgKCFvdHN2Z0dseXBocykgeworICAgICAgICBk
cmF3Tm9uT1RTVkdSdW4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBv
aW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIEFTU0VS
VChvdHN2Z0dseXBocy0+c2l6ZSgpID49IG51bUdseXBocyk7CiAKLSAgICBHbHlwaHNBbmRBZHZh
bmNlcyByZXN1bHQ7Ci0gICAgcmVzdWx0LmluaXRpYWxBZHZhbmNlID0gbWFrZUdseXBoQnVmZmVy
QWR2YW5jZSgpOwotICAgIHJlc3VsdC5zdG9yYWdlID0gR2x5cGhzQW5kQWR2YW5jZXNTdG9yYWdl
KCk7Ci0KLSAgICByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtR2x5cGhzKTsKLSAgICByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShudW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUds
eXBoczsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnNpemUo
KSA9PSByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuc2l6ZSgpKTsKLSAgICAgICAgaWYgKG90c3Zn
R2x5cGhzLT5xdWlja0dldChpKSkgewotICAgICAgICAgICAgaWYgKHJlc3VsdC5zdG9yYWdlLT5h
ZHZhbmNlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmluaXRpYWxBZHZhbmNl
ID0gbWFrZUdseXBoQnVmZmVyQWR2YW5jZShzaXplKHJlc3VsdC5pbml0aWFsQWR2YW5jZSkgKyBz
aXplKGFkdmFuY2VzW2ldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVz
dWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmxhc3QoKSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uoc2l6
ZShyZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMubGFzdCgpKSArIHNpemUoYWR2YW5jZXNbaV0pKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdC5zdG9yYWdlLT5nbHlwaHMudW5j
aGVja2VkQXBwZW5kKGdseXBoc1tpXSk7Ci0gICAgICAgICAgICByZXN1bHQuc3RvcmFnZS0+YWR2
YW5jZXMudW5jaGVja2VkQXBwZW5kKGFkdmFuY2VzW2ldKTsKKyAgICAvLyBXZSBjYW4ndCBqdXN0
IHBhcnRpdGlvbiB0aGUgZ2x5cGhzIGludG8gT1QtU1ZHIGdseXBocyBhbmQgbm9uLU9ULVNWRyBn
bHlwaHMgYmVjYXVzZSBnbHlwaHMgYXJlIGFsbG93ZWQgdG8gZHJhdyBvdXRzaWRlIG9mIHRoZWly
IGxheW91dCBib3hlcy4KKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ2x5cGhzIGNhbiBvdmVybGFw
LCB3aGljaCBtZWFucyB3ZSBoYXZlIHRvIGdldCB0aGUgei1vcmRlciBjb3JyZWN0LiBXZSBjYW4n
dCBoYXZlIGFuIGVhcmxpZXIgcnVuIGJlIGRyYXduIG9uIHRvcCBvZiBhIGxhdGVyIHJ1bi4KKyAg
ICBGbG9hdFBvaW50IHJ1bk9yaWdpbiA9IHN0YXJ0UG9pbnQ7CisgICAgRmxvYXRQb2ludCBwZW5Q
b3NpdGlvbiA9IHN0YXJ0UG9pbnQ7CisgICAgc2l6ZV90IGdseXBoQ291bnRJblJ1biA9IDA7Cisg
ICAgYm9vbCBzdGF0ZSA9IGZhbHNlOworICAgIHVuc2lnbmVkIGk7CisgICAgYXV0byBkcmF3ID0g
WyZdICgpIHsKKyAgICAgICAgaWYgKCFnbHlwaENvdW50SW5SdW4pCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGlmIChzdGF0ZSkKKyAgICAgICAgICAgIGRyYXdPVFNWR1J1bihmb250LCBn
bHlwaHMgKyBpIC0gZ2x5cGhDb3VudEluUnVuLCBhZHZhbmNlcyArIGkgLSBnbHlwaENvdW50SW5S
dW4sIGdseXBoQ291bnRJblJ1biwgcnVuT3JpZ2luLCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZHJhd05vbk9UU1ZHUnVuKGZvbnQsIGdseXBocyArIGkgLSBnbHlw
aENvdW50SW5SdW4sIGFkdmFuY2VzICsgaSAtIGdseXBoQ291bnRJblJ1biwgZ2x5cGhDb3VudElu
UnVuLCBydW5PcmlnaW4sIHNtb290aGluZ01vZGUpOworICAgIH07CisgICAgZm9yIChpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGJvb2wgaXNPVFNWR0dseXBoID0gb3RzdmdH
bHlwaHMtPnF1aWNrR2V0KGkpOworICAgICAgICBpZiAoaXNPVFNWR0dseXBoICE9IHN0YXRlKSB7
CisgICAgICAgICAgICBkcmF3KCk7CisgICAgICAgICAgICBzdGF0ZSA9IGlzT1RTVkdHbHlwaDsK
KyAgICAgICAgICAgIGdseXBoQ291bnRJblJ1biA9IDA7CisgICAgICAgICAgICBydW5PcmlnaW4g
PSBwZW5Qb3NpdGlvbjsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocmVzdWx0LnN0b3JhZ2Ut
PmdseXBocy5zaXplKCkgPT0gcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnNpemUoKSk7CisgICAg
ICAgICsrZ2x5cGhDb3VudEluUnVuOworICAgICAgICBwZW5Qb3NpdGlvbi5tb3ZlKHNpemUoYWR2
YW5jZXNbaV0pKTsKICAgICB9Ci0KLSAgICByZXN1bHQuZ2x5cGhzID0gcmVzdWx0LnN0b3JhZ2Ut
PmdseXBocy5kYXRhKCk7Ci0gICAgcmVzdWx0LmFkdmFuY2VzID0gcmVzdWx0LnN0b3JhZ2UtPmFk
dmFuY2VzLmRhdGEoKTsKLSAgICByZXN1bHQubnVtR2x5cGhzID0gcmVzdWx0LnN0b3JhZ2UtPmds
eXBocy5zaXplKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIGRyYXcoKTsKIH0KIAogdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC00MjgsMTQgKzQ0Nyw3IEBAIHZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdsCiAKICAgICBBU1NFUlQobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMg
PT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS83MDE2NjU1Mj4gUmVjb3JkIE9UU1ZHIGdseXBocy4KLSAgICBHbHlwaHNBbmRBZHZh
bmNlcyBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocyA9IGZpbHRlck91dE9UU1ZH
R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocyk7Ci0gICAgQVNTRVJUKGds
eXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocyA9PSBnbHlwaHMgfHwgZ2x5
cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuZ2x5cGhzID09IGdseXBoc0FuZEFkdmFu
Y2VzV2l0aG91dE9UU1ZHR2x5cGhzLnN0b3JhZ2UtPmdseXBocy5kYXRhKCkpOwotICAgIEFTU0VS
VChnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5hZHZhbmNlcyA9PSBhZHZhbmNl
cyB8fCBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5hZHZhbmNlcyA9PSBnbHlw
aHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5zdG9yYWdlLT5hZHZhbmNlcy5kYXRhKCkp
OwotCi0gICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9vdGhpbmdNb2RlKTsKLSAg
ICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4dCwgZm9udCwgZ2x5cGhz
QW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuZ2x5cGhzLCBnbHlwaHNBbmRBZHZhbmNlc1dp
dGhvdXRPVFNWR0dseXBocy5hZHZhbmNlcywgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdH
bHlwaHMubnVtR2x5cGhzLCBzdGFydFBvaW50ICsgc2l6ZShnbHlwaHNBbmRBZHZhbmNlc1dpdGhv
dXRPVFNWR0dseXBocy5pbml0aWFsQWR2YW5jZSksIHNtb290aGluZ01vZGUpOwotICAgIGNvbmNs
dWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9u
T1RTVkdSdW5zKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwg
c21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0aXZl
VGV4dChDVEZvbnRSZWYgZm9udCwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmIGxpbmUsIENH
UmVjdCBsaW5lUmVjdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwYzFjMmY3ZTdmMDE5MjAxM2RiYWYzNTZjYzNlOGUzNzFl
Y2ZlOTZhLi5jN2Y0NzFmMjgxMjc5OTlmMjg5OWIwOTJiNzcyNDY2YTJhNzMzODAyIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMjEtMTItMTAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxk
QGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE9ULVNWRyBnbHlwaHMgZG9uJ3QgZHJhdyBp
bnRvIGNhbnZhc2VzIChiZWNhdXNlIG9mIHRoZSBHUFUgcHJvY2VzcykKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE3MQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzAxNjY1NTI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L3RleHQvb3RzdmctY2FudmFzLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvdGV4dC9vdHN2Zy1jYW52YXMuaHRtbDogQWRkZWQuCisKIDIwMjEt
MTItMTAgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg2ODM2LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L290c3ZnLWNhbnZhcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0L290c3ZnLWNhbnZhcy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NWEzMDEwM2U2MGU4
MDUxOGZiNzMyMjllOTg5ZWIzY2M4YzFkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwzNCBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorQGZvbnQtZmFjZSB7Cisg
ICAgZm9udC1mYW1pbHk6ICJXZWJGb250IjsKKyAgICBzcmM6IHVybCgicmVzb3VyY2VzL0FoZW0t
U1ZHLnR0ZiIpIGZvcm1hdCgidHJ1ZXR5cGUiKTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwPgorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBPVC1TVkcgZ2x5cGhzIGNhbiBiZSBk
cmF3biBpbnRvIGNhbnZhcy4KK1RoZSB0ZXN0IHBhc3NlcyBpZiB5b3Ugc2VlOgorPG9sPgorICAg
IDxsaT5BIG1lZGl1bS1zaXplZCBibGFjayBzcXVhcmUsIHRoZW48L2xpPgorICAgIDxsaT5BIHNs
aWdodGx5IHNtYWxsZXIgZ3JlZW4gc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBtZWRpdW0t
c2l6ZWQgYmxhY2sgc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBzbGlnaHRseSBzbWFsbGVy
IGdyZWVuIHNxdWFyZTwvbGk+Cis8L3A+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cit2YXIgY29udGV4dCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOworY29udGV4dC5maWxs
U3R5bGUgPSAiYmxhY2siOworY29udGV4dC5maWxsUmVjdCgxMCwgNjAsIDUwLCA1MCk7Citjb250
ZXh0LmZpbGxTdHlsZSA9ICJncmVlbiI7Citjb250ZXh0LmZpbGxSZWN0KDY1LCA2NSwgNDAsIDQw
KTsKK2NvbnRleHQuZmlsbFN0eWxlID0gImJsYWNrIjsKK2NvbnRleHQuZmlsbFJlY3QoMTEwLCA2
MCwgNTAsIDUwKTsKK2NvbnRleHQuZmlsbFN0eWxlID0gImdyZWVuIjsKK2NvbnRleHQuZmlsbFJl
Y3QoMTY1LCA2NSwgNDAsIDQwKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L290c3ZnLWNhbnZhcy5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L290c3ZnLWNhbnZhcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMmViY2NjMWE2MGM5
ZWEwYWQ0NTgyNzlmMjBiZjBmNzc3MmY4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLmh0bWwKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorQGZvbnQtZmFjZSB7CisgICAgZm9udC1m
YW1pbHk6ICJXZWJGb250IjsKKyAgICBzcmM6IHVybCgicmVzb3VyY2VzL0FoZW0tU1ZHLnR0ZiIp
IGZvcm1hdCgidHJ1ZXR5cGUiKTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPgor
VGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBPVC1TVkcgZ2x5cGhzIGNhbiBiZSBkcmF3biBpbnRv
IGNhbnZhcy4KK1RoZSB0ZXN0IHBhc3NlcyBpZiB5b3Ugc2VlOgorPG9sPgorICAgIDxsaT5BIG1l
ZGl1bS1zaXplZCBibGFjayBzcXVhcmUsIHRoZW48L2xpPgorICAgIDxsaT5BIHNsaWdodGx5IHNt
YWxsZXIgZ3JlZW4gc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBtZWRpdW0tc2l6ZWQgYmxh
Y2sgc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBzbGlnaHRseSBzbWFsbGVyIGdyZWVuIHNx
dWFyZTwvbGk+Cis8L3A+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cit2YXIgY29udGV4dCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOworWy4uLmRvY3VtZW50LmZvbnRzXVsw
XS5sb2FkKCkudGhlbihmdW5jdGlvbigpIHsKKyAgICBjb250ZXh0LmZvbnQgPSAiNTBweCAnV2Vi
Rm9udCciOworICAgIGNvbnRleHQuZmlsbFRleHQoImJBYkEiLCAxMCwgMTAwKTsKK30pOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446802</attachid>
            <date>2021-12-10 13:31:16 -0800</date>
            <delta_ts>2021-12-10 14:13:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234171-20211210133115.patch</filename>
            <type>text/plain</type>
            <size>18431</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI4MWQzYTAwZmJiYTZh
YzExNjQwZGE5NDZmNTkyOTM3ODMwZDFiMC4uM2I5YjY4NGE4MTZjYTE2NmU5NWY5OGU4MzAzMTU3
OTA3NTE4YzkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTEyLTEwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBP
VC1TVkcgZ2x5cGhzIGRvbid0IGRyYXcgaW50byBjYW52YXNlcyAoYmVjYXVzZSBvZiB0aGUgR1BV
IHByb2Nlc3MpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQxNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcwMTY2NTUyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyYXdpbmcgT1QtU1ZHIGdseXBo
cyBpbnRvIGNhbnZhcyB3YXMgaW50ZW50aW9uYWxseSBkaXNhYmxlZCBpbiBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjY5MjExL3dlYmtpdC4KKyAgICAgICAgVGhpcyBwYXRjaCBl
bmFibGVzIGl0IGFnYWluLiBSYXRoZXIgdGhhbiBkb2luZyBhbnl0aGluZyBjb21wbGljYXRlZCBs
aWtlIHN1cHBvcnRpbmcgYWxsIG9mIFNWRyBpbiBEcmF3R2x5cGhzUmVjb3JkZXIsCisgICAgICAg
IHdlIGNhbiBzaW1wbHkgc3VwcG9ydCB0aGlzIGJ5IGRyYXdpbmcgdGhlIGdseXBocyBpbnRvIGEg
SW1hZ2VCdWZmZXIgYW5kIHNlbmRpbmcgdGhlIEltYWdlQnVmZmVyIHRvIHRoZSBHUFUgcHJvY2Vz
cy4KKworICAgICAgICBGb3IgdGV4dCwgaXQncyBwcmV0dHkgaW1wb3J0YW50IHRoYXQgdGhlIHBp
eGVsIGdyaWQgb2YgdGhlIEltYWdlQnVmZmVyIG1hdGNoZXMgdGhlIHBpeGVsIGdyaWQgb2YgdGhl
IGRlc3RpbmF0aW9uLAorICAgICAgICByYXRoZXIgdGhhbiBiZWluZyBvZmZzZXQgYnkgaGFsZiBh
IHBpeGVsIG9yIHNvbWV0aGluZy4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGNyZWF0aW9uIGZ1bmN0
aW9uIHRvIEltYWdlQnVmZmVyIHdoaWNoCisgICAgICAgIGFjY2VwdHMgYSBGbG9hdFJlY3QgKGlu
c3RlYWQgb2YgdGhlIHByZXZpb3VzIEZsb2F0U2l6ZSB3aGljaCBpdCB1c2VkIHRvIGFjY2VwdCku
IFRoZSBGbG9hdFJlY3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgaW5mbGF0aW5nIHRo
ZSBnZW9tZXRyeSBoYXMgdG8gaGFwcGVuIG9uIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBp
ZiB3ZSB3YW50IHRoZSBwaXhlbCBncmlkcyB0byBtYXRjaC4KKworICAgICAgICBUZXN0OiBmYXN0
L3RleHQvb3RzdmctY2FudmFzLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
SW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGlu
Z0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyT3V0T1RTVkdH
bHlwaHMpOiBEZWxldGVkLgorCiAyMDIxLTEyLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NjgzNi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1Jl
Y29yZGVyLmgKaW5kZXggMWQwZTg3OTBkYTM1YzA4MWE4MGJlZjFiMWU3MWEzYjdkOWY1MTM3Yy4u
MjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAg
LTc1LDYgKzc1LDEwIEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0J5U3BsaXR0
aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZv
aWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd05vbk9U
U1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworCiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2b2lkIHBvcHVsYXRlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwcmVw
YXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXgg
ODhjZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uZDY3ZmMzNGI1YTE2NzRj
YTNiN2RhMDIxMTMyODQ1MGI3ZTg2YmI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtOTAsMTEgKzkwLDM3IEBAIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0
aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNj
YWxlZFNpemUgLyBzaXplKTsKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKKy8vIFRoaXMg
aXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwaXhlbCBncmlkIG9mIHRo
ZSBJbWFnZUJ1ZmZlciBhbGlnbnMgd2l0aCB0aGUgcGl4ZWwgZ3JpZCBvZiB0aGUgY29udGV4dC4K
Ky8vIFNpbXBseSBzYXlpbmcgY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29u
dGV4dCkgaXNuJ3Qgc3VmZmljaWVudCBpbiB0aGlzIHNpdHVhdGlvbiwgYmVjYXVzZSByZWN0Lmxv
Y2F0aW9uKCkgbWF5IG5vdCBsaWUgb24gYSBwaXhlbCBib3VuZGFyeS4KKy8vIEluIHRoaXMgc2l0
dWF0aW9uLCB3ZSBoYXZlIHRvIGluZmxhdGUgYm90aCB0aGUgbGVmdCBzaWRlIGFuZCB0aGUgcmln
aHQgc2lkZSwgd2hpY2ggY2FuIGxlYWQgdG8gZGlmZmVyZW50IHJlc3VsdHMgdGhhbgorLy8gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29udGV4dCkgd291bGQgaGF2ZSBwcm9k
dWNlZC4KK2F1dG8gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIC0+IHN0ZDo6b3B0
aW9uYWw8Q29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uPgoreworICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gaW5mbyA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVySW5mbyhyZWN0LCBjb250ZXh0KTsKKworICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBpZiAoY29udGV4dC5yZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGluZm8ucGh5c2ljYWxTaXplSW5E
ZXZpY2VDb29yZGluYXRlcywgY29udGV4dCk7CisgICAgCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShp
bmZvLnBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMsIGNvbnRleHQpOworCisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoaW5mby5zY2FsZSk7CisgICAgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS50cmFuc2xhdGUoLWluZm8uaW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMubG9j
YXRpb24oKSk7CisgICAgcmV0dXJuIHsgeyBpbWFnZUJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBp
bmZvLmluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzIH0gfTsKK30KKwogUmVmUHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKQEAg
LTEwNiw3ICsxMzIsNiBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYwogICAgIGlmICghaW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CiAgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQpAQCAtMTY3LDYgKzE5MiwxOCBAQCBJbnRTaXplIEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
QwogICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3Io
KSk7CiB9CiAKK2F1dG8gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJJbmZvKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSAtPiBDb21wYXRp
YmxlQnVmZmVySW5mbworeworICAgIGF1dG8gc2NhbGVGYWN0b3IgPSBjb250ZXh0LnNjYWxlRmFj
dG9yKCk7CisgICAgYXV0byBzY2FsZWRSZWN0ID0gcmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIGluZmxhdGVkU2NhbGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3Qoc2NhbGVkUmVjdCk7CisgICAgYXV0byBwaHlzaWNhbFNpemVJbkRldmljZUNvb3JkaW5h
dGVzID0gaW5mbGF0ZWRTY2FsZWRSZWN0LnNpemUoKTsKKyAgICBhdXRvIGluZmxhdGVkUmVjdElu
VXNlckNvb3JkaW5hdGVzID0gRmxvYXRSZWN0KGluZmxhdGVkU2NhbGVkUmVjdCk7CisgICAgaW5m
bGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMuc2NhbGUoMS4wZiAvIHNjYWxlRmFjdG9yKTsKKyAg
ICByZXR1cm4geyBXVEZNb3ZlKHBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMpLCBXVEZN
b3ZlKGluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzKSwgc2NhbGVGYWN0b3IgfTsKK30KKwog
UmVmUHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyZWN0LmlzRW1wdHko
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmlu
ZGV4IGQ3Yjc1NjRhNTliOGMyNjc2YTc2ZTE5MWM1YTA3OTU5NjE4OTg2MTIuLmQyZDliZTllZjQw
MzJmYWEyNWJlNjJjYWNlNDM3ODJkZWZjYjc0MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNTIsNiArNTIsMTEgQEAgcHVibGljOgog
CiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRl
eHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIg
YW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICBzdHJ1Y3QgQ29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uIHsKKyAg
ICAgICAgUmVmPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgRmxvYXRSZWN0IGlu
ZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzOworICAgIH07CisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8Q29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdEluVXNlckNvb3JkaW5hdGVzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBSZWZQdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKIApAQCAtNjMsNiArNjgsMTIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBzdGF0aWMg
SW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKKyAgICBzdHJ1Y3QgQ29tcGF0aWJsZUJ1ZmZlckluZm8geworICAgICAg
ICBJbnRTaXplIHBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXM7CisgICAgICAgIEZsb2F0
UmVjdCBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlczsKKyAgICAgICAgRmxvYXRTaXplIHNj
YWxlOworICAgIH07CisgICAgc3RhdGljIENvbXBhdGlibGVCdWZmZXJJbmZvIGNvbXBhdGlibGVC
dWZmZXJJbmZvKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAg
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9E
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZDQz
YmU2OTMxY2FmMTFlYWU4MGI1ODBjY2IyZDk1YTA5MjA1OWI0Ni4uYWIzMGQ2MDg0YTI5ODYyYTU5
ZmQ0NGE2YWEyMWNkYzI5MWNkYTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNv
cmRlckNvcmVUZXh0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2luY2x1ZGUgPENvcmVUZXh0
L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzcwLDUzICszNzEsNjUg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUKICAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJl
Y3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOwogfQogCi1zdHJ1Y3QgR2x5cGhz
QW5kQWR2YW5jZXNTdG9yYWdlIHsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaD4gZ2x5cGhz
OwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2U+IGFkdmFuY2VzOwotfTsKK3ZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgRmxvYXRQb2ludCBwZW5Qb3NpdGlv
biA9IHN0YXJ0UG9pbnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsg
KytpKSB7CisgICAgICAgIGF1dG8gYm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaHNb
aV0pOworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlckluZm8gPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihib3VuZHMsIG1fb3duZXIpKSB7CisgICAgICAgICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhpbWFnZUJ1ZmZlckluZm8tPmltYWdlQnVmZmVyLT5jb250ZXh0
KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQb2ludCgpLCBzbW9v
dGhpbmdNb2RlKTsKKyAgICAgICAgICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gaW1hZ2VCdWZm
ZXJJbmZvLT5pbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlczsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5tb3ZlQnkocGVuUG9zaXRpb24pOworICAgICAgICAgICAgbV9vd25lci5kcmF3
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXJJbmZvLT5pbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0
KTsKKyAgICAgICAgfQorICAgICAgICBwZW5Qb3NpdGlvbi5tb3ZlKHNpemUoYWR2YW5jZXNbaV0p
KTsKKyAgICB9Cit9CiAKLXN0cnVjdCBHbHlwaHNBbmRBZHZhbmNlcyB7Ci0gICAgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzOwotICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXM7Ci0gICAgdW5zaWduZWQgbnVtR2x5cGhzOwotICAgIEdseXBoQnVmZmVyQWR2YW5jZSBp
bml0aWFsQWR2YW5jZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEdseXBoc0FuZEFkdmFuY2VzU3RvcmFn
ZT4gc3RvcmFnZTsKLX07Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVu
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQor
eworICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7CisgICAg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgY29u
Y2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKK30KIAotc3RhdGljIEdseXBoc0FuZEFkdmFuY2VzIGZp
bHRlck91dE9UU1ZHR2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9P
VFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RT
VkdHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpOwotICAgIGlmICghb3RzdmdHbHlwaHMpCi0gICAg
ICAgIHJldHVybiB7IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgbWFrZUdseXBoQnVmZmVy
QWR2YW5jZSgpLCB7IH19OworICAgIGlmICghb3RzdmdHbHlwaHMpIHsKKyAgICAgICAgZHJhd05v
bk9UU1ZHUnVuKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwg
c21vb3RoaW5nTW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBBU1NFUlQob3Rz
dmdHbHlwaHMtPnNpemUoKSA+PSBudW1HbHlwaHMpOwogCi0gICAgR2x5cGhzQW5kQWR2YW5jZXMg
cmVzdWx0OwotICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9IG1ha2VHbHlwaEJ1ZmZlckFkdmFu
Y2UoKTsKLSAgICByZXN1bHQuc3RvcmFnZSA9IEdseXBoc0FuZEFkdmFuY2VzU3RvcmFnZSgpOwot
Ci0gICAgcmVzdWx0LnN0b3JhZ2UtPmdseXBocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUds
eXBocyk7Ci0gICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
ICsraSkgewotICAgICAgICBBU1NFUlQocmVzdWx0LnN0b3JhZ2UtPmdseXBocy5zaXplKCkgPT0g
cmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnNpemUoKSk7Ci0gICAgICAgIGlmIChvdHN2Z0dseXBo
cy0+cXVpY2tHZXQoaSkpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuc3RvcmFnZS0+YWR2YW5j
ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5pbml0aWFsQWR2YW5jZSA9IG1h
a2VHbHlwaEJ1ZmZlckFkdmFuY2Uoc2l6ZShyZXN1bHQuaW5pdGlhbEFkdmFuY2UpICsgc2l6ZShh
ZHZhbmNlc1tpXSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5z
dG9yYWdlLT5hZHZhbmNlcy5sYXN0KCkgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKHNpemUocmVz
dWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmxhc3QoKSkgKyBzaXplKGFkdmFuY2VzW2ldKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnVuY2hlY2tl
ZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICAgICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2Vz
LnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7CisgICAgLy8gV2UgY2FuJ3QganVzdCBwYXJ0
aXRpb24gdGhlIGdseXBocyBpbnRvIE9ULVNWRyBnbHlwaHMgYW5kIG5vbi1PVC1TVkcgZ2x5cGhz
IGJlY2F1c2UgZ2x5cGhzIGFyZSBhbGxvd2VkIHRvIGRyYXcgb3V0c2lkZSBvZiB0aGVpciBsYXlv
dXQgYm94ZXMuCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IGdseXBocyBjYW4gb3ZlcmxhcCwgd2hp
Y2ggbWVhbnMgd2UgaGF2ZSB0byBnZXQgdGhlIHotb3JkZXIgY29ycmVjdC4gV2UgY2FuJ3QgaGF2
ZSBhbiBlYXJsaWVyIHJ1biBiZSBkcmF3biBvbiB0b3Agb2YgYSBsYXRlciBydW4uCisgICAgRmxv
YXRQb2ludCBydW5PcmlnaW4gPSBzdGFydFBvaW50OworICAgIEZsb2F0UG9pbnQgcGVuUG9zaXRp
b24gPSBzdGFydFBvaW50OworICAgIHNpemVfdCBnbHlwaENvdW50SW5SdW4gPSAwOworICAgIGJv
b2wgc3RhdGUgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBpOworICAgIGF1dG8gZHJhdyA9IFsmXSAo
KSB7CisgICAgICAgIGlmICghZ2x5cGhDb3VudEluUnVuKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAoc3RhdGUpCisgICAgICAgICAgICBkcmF3T1RTVkdSdW4oZm9udCwgZ2x5cGhz
ICsgaSAtIGdseXBoQ291bnRJblJ1biwgYWR2YW5jZXMgKyBpIC0gZ2x5cGhDb3VudEluUnVuLCBn
bHlwaENvdW50SW5SdW4sIHJ1bk9yaWdpbiwgc21vb3RoaW5nTW9kZSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRyYXdOb25PVFNWR1J1bihmb250LCBnbHlwaHMgKyBpIC0gZ2x5cGhDb3Vu
dEluUnVuLCBhZHZhbmNlcyArIGkgLSBnbHlwaENvdW50SW5SdW4sIGdseXBoQ291bnRJblJ1biwg
cnVuT3JpZ2luLCBzbW9vdGhpbmdNb2RlKTsKKyAgICB9OworICAgIGZvciAoaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICBib29sIGlzT1RTVkdHbHlwaCA9IG90c3ZnR2x5cGhz
LT5xdWlja0dldChpKTsKKyAgICAgICAgaWYgKGlzT1RTVkdHbHlwaCAhPSBzdGF0ZSkgeworICAg
ICAgICAgICAgZHJhdygpOworICAgICAgICAgICAgc3RhdGUgPSBpc09UU1ZHR2x5cGg7CisgICAg
ICAgICAgICBnbHlwaENvdW50SW5SdW4gPSAwOworICAgICAgICAgICAgcnVuT3JpZ2luID0gcGVu
UG9zaXRpb247CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHJlc3VsdC5zdG9yYWdlLT5nbHlw
aHMuc2l6ZSgpID09IHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNlcy5zaXplKCkpOworICAgICAgICAr
K2dseXBoQ291bnRJblJ1bjsKKyAgICAgICAgcGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2Vz
W2ldKSk7CiAgICAgfQotCi0gICAgcmVzdWx0LmdseXBocyA9IHJlc3VsdC5zdG9yYWdlLT5nbHlw
aHMuZGF0YSgpOwotICAgIHJlc3VsdC5hZHZhbmNlcyA9IHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNl
cy5kYXRhKCk7Ci0gICAgcmVzdWx0Lm51bUdseXBocyA9IHJlc3VsdC5zdG9yYWdlLT5nbHlwaHMu
c2l6ZSgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBkcmF3KCk7CiB9CiAKIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtNDI4LDE0ICs0NDEsNyBAQCB2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiBnbAogCiAgICAgQVNTRVJUKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERl
Y29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKIAotICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vNzAxNjY1NTI+IFJlY29yZCBPVFNWRyBnbHlwaHMuCi0gICAgR2x5cGhzQW5kQWR2YW5jZXMg
Z2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMgPSBmaWx0ZXJPdXRPVFNWR0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwotICAgIEFTU0VSVChnbHlwaHNB
bmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5nbHlwaHMgPT0gZ2x5cGhzIHx8IGdseXBoc0Fu
ZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocyA9PSBnbHlwaHNBbmRBZHZhbmNlc1dp
dGhvdXRPVFNWR0dseXBocy5zdG9yYWdlLT5nbHlwaHMuZGF0YSgpKTsKLSAgICBBU1NFUlQoZ2x5
cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMgPT0gYWR2YW5jZXMgfHwg
Z2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuYWR2YW5jZXMgPT0gZ2x5cGhzQW5k
QWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuc3RvcmFnZS0+YWR2YW5jZXMuZGF0YSgpKTsKLQot
ICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBoc0FuZEFk
dmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocywgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0
T1RTVkdHbHlwaHMuYWR2YW5jZXMsIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhz
Lm51bUdseXBocywgc3RhcnRQb2ludCArIHNpemUoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RT
VkdHbHlwaHMuaW5pdGlhbEFkdmFuY2UpLCBzbW9vdGhpbmdNb2RlKTsKLSAgICBjb25jbHVkZUlu
dGVybmFsQ29udGV4dCgpOworICAgIGRyYXdCeVNwbGl0dGluZ0ludG9PVFNWR0FuZE5vbk9UU1ZH
UnVucyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290
aGluZ01vZGUpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQo
Q1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJlZiBsaW5lLCBDR1JlY3Qg
bGluZVJlY3QpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMGMxYzJmN2U3ZjAxOTIwMTNkYmFmMzU2Y2MzZThlMzcxZWNmZTk2
YS4uYzdmNDcxZjI4MTI3OTk5ZjI4OTliMDkyYjc3MjQ2NmEyYTczMzgwMiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIxLTEyLTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBPVC1TVkcgZ2x5cGhzIGRvbid0IGRyYXcgaW50byBj
YW52YXNlcyAoYmVjYXVzZSBvZiB0aGUgR1BVIHByb2Nlc3MpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQxNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzcwMTY2NTUyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC90ZXh0L290c3ZnLWNhbnZhcy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3RleHQvb3RzdmctY2FudmFzLmh0bWw6IEFkZGVkLgorCiAyMDIxLTEyLTEw
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI4NjgzNi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC9vdHN2Zy1jYW52YXMtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9v
dHN2Zy1jYW52YXMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDVhMzAxMDNlNjBlODA1MThm
YjczMjI5ZTk4OWViM2NjOGMxZGMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0L290c3ZnLWNhbnZhcy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KK0Bmb250LWZhY2UgeworICAgIGZv
bnQtZmFtaWx5OiAiV2ViRm9udCI7CisgICAgc3JjOiB1cmwoInJlc291cmNlcy9BaGVtLVNWRy50
dGYiKSBmb3JtYXQoInRydWV0eXBlIik7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8
cD4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgT1QtU1ZHIGdseXBocyBjYW4gYmUgZHJhd24g
aW50byBjYW52YXMuCitUaGUgdGVzdCBwYXNzZXMgaWYgeW91IHNlZToKKzxvbD4KKyAgICA8bGk+
QSBtZWRpdW0tc2l6ZWQgYmxhY2sgc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBzbGlnaHRs
eSBzbWFsbGVyIGdyZWVuIHNxdWFyZSwgdGhlbjwvbGk+CisgICAgPGxpPkEgbWVkaXVtLXNpemVk
IGJsYWNrIHNxdWFyZSwgdGhlbjwvbGk+CisgICAgPGxpPkEgc2xpZ2h0bHkgc21hbGxlciBncmVl
biBzcXVhcmU8L2xpPgorPC9wPgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgordmFyIGNvbnRleHQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTsKK2NvbnRleHQuZmlsbFN0eWxl
ID0gImJsYWNrIjsKK2NvbnRleHQuZmlsbFJlY3QoMTAsIDYwLCA1MCwgNTApOworY29udGV4dC5m
aWxsU3R5bGUgPSAiZ3JlZW4iOworY29udGV4dC5maWxsUmVjdCg2NSwgNjUsIDQwLCA0MCk7Citj
b250ZXh0LmZpbGxTdHlsZSA9ICJibGFjayI7Citjb250ZXh0LmZpbGxSZWN0KDExMCwgNjAsIDUw
LCA1MCk7Citjb250ZXh0LmZpbGxTdHlsZSA9ICJncmVlbiI7Citjb250ZXh0LmZpbGxSZWN0KDE2
NSwgNjUsIDQwLCA0MCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC9vdHN2Zy1jYW52YXMuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC9vdHN2Zy1jYW52YXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTJlYmNjYzFhNjBjOWVhMGFk
NDU4Mjc5ZjIwYmYwZjc3NzJmOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0L290c3ZnLWNhbnZhcy5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KK0Bmb250LWZhY2UgeworICAgIGZvbnQtZmFtaWx5
OiAiV2ViRm9udCI7CisgICAgc3JjOiB1cmwoInJlc291cmNlcy9BaGVtLVNWRy50dGYiKSBmb3Jt
YXQoInRydWV0eXBlIik7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4KK1RoaXMg
dGVzdCBtYWtlcyBzdXJlIHRoYXQgT1QtU1ZHIGdseXBocyBjYW4gYmUgZHJhd24gaW50byBjYW52
YXMuCitUaGUgdGVzdCBwYXNzZXMgaWYgeW91IHNlZToKKzxvbD4KKyAgICA8bGk+QSBtZWRpdW0t
c2l6ZWQgYmxhY2sgc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBzbGlnaHRseSBzbWFsbGVy
IGdyZWVuIHNxdWFyZSwgdGhlbjwvbGk+CisgICAgPGxpPkEgbWVkaXVtLXNpemVkIGJsYWNrIHNx
dWFyZSwgdGhlbjwvbGk+CisgICAgPGxpPkEgc2xpZ2h0bHkgc21hbGxlciBncmVlbiBzcXVhcmU8
L2xpPgorPC9wPgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgordmFyIGNvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTsKK1suLi5kb2N1bWVudC5mb250c11bMF0ubG9h
ZCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgY29udGV4dC5mb250ID0gIjUwcHggJ1dlYkZvbnQn
IjsKKyAgICBjb250ZXh0LmZpbGxUZXh0KCJiQWJBIiwgMTAsIDEwMCk7Cit9KTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446809</attachid>
            <date>2021-12-10 14:13:31 -0800</date>
            <delta_ts>2021-12-10 14:17:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234171-20211210141330.patch</filename>
            <type>text/plain</type>
            <size>19246</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI4MWQzYTAwZmJiYTZh
YzExNjQwZGE5NDZmNTkyOTM3ODMwZDFiMC4uM2I5YjY4NGE4MTZjYTE2NmU5NWY5OGU4MzAzMTU3
OTA3NTE4YzkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTEyLTEwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBP
VC1TVkcgZ2x5cGhzIGRvbid0IGRyYXcgaW50byBjYW52YXNlcyAoYmVjYXVzZSBvZiB0aGUgR1BV
IHByb2Nlc3MpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQxNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcwMTY2NTUyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyYXdpbmcgT1QtU1ZHIGdseXBo
cyBpbnRvIGNhbnZhcyB3YXMgaW50ZW50aW9uYWxseSBkaXNhYmxlZCBpbiBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjY5MjExL3dlYmtpdC4KKyAgICAgICAgVGhpcyBwYXRjaCBl
bmFibGVzIGl0IGFnYWluLiBSYXRoZXIgdGhhbiBkb2luZyBhbnl0aGluZyBjb21wbGljYXRlZCBs
aWtlIHN1cHBvcnRpbmcgYWxsIG9mIFNWRyBpbiBEcmF3R2x5cGhzUmVjb3JkZXIsCisgICAgICAg
IHdlIGNhbiBzaW1wbHkgc3VwcG9ydCB0aGlzIGJ5IGRyYXdpbmcgdGhlIGdseXBocyBpbnRvIGEg
SW1hZ2VCdWZmZXIgYW5kIHNlbmRpbmcgdGhlIEltYWdlQnVmZmVyIHRvIHRoZSBHUFUgcHJvY2Vz
cy4KKworICAgICAgICBGb3IgdGV4dCwgaXQncyBwcmV0dHkgaW1wb3J0YW50IHRoYXQgdGhlIHBp
eGVsIGdyaWQgb2YgdGhlIEltYWdlQnVmZmVyIG1hdGNoZXMgdGhlIHBpeGVsIGdyaWQgb2YgdGhl
IGRlc3RpbmF0aW9uLAorICAgICAgICByYXRoZXIgdGhhbiBiZWluZyBvZmZzZXQgYnkgaGFsZiBh
IHBpeGVsIG9yIHNvbWV0aGluZy4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGNyZWF0aW9uIGZ1bmN0
aW9uIHRvIEltYWdlQnVmZmVyIHdoaWNoCisgICAgICAgIGFjY2VwdHMgYSBGbG9hdFJlY3QgKGlu
c3RlYWQgb2YgdGhlIHByZXZpb3VzIEZsb2F0U2l6ZSB3aGljaCBpdCB1c2VkIHRvIGFjY2VwdCku
IFRoZSBGbG9hdFJlY3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgaW5mbGF0aW5nIHRo
ZSBnZW9tZXRyeSBoYXMgdG8gaGFwcGVuIG9uIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBp
ZiB3ZSB3YW50IHRoZSBwaXhlbCBncmlkcyB0byBtYXRjaC4KKworICAgICAgICBUZXN0OiBmYXN0
L3RleHQvb3RzdmctY2FudmFzLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
SW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGlu
Z0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyT3V0T1RTVkdH
bHlwaHMpOiBEZWxldGVkLgorCiAyMDIxLTEyLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NjgzNi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1Jl
Y29yZGVyLmgKaW5kZXggMWQwZTg3OTBkYTM1YzA4MWE4MGJlZjFiMWU3MWEzYjdkOWY1MTM3Yy4u
MjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAg
LTc1LDYgKzc1LDEwIEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0J5U3BsaXR0
aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZv
aWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd05vbk9U
U1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworCiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2b2lkIHBvcHVsYXRlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwcmVw
YXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXgg
ODhjZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uYzZkM2ZmOTM2Y2NjMjM4
MWZkODBmMDZkZmQyZDYzNTcyYmQwZTNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtOTAsMTEgKzkwLDM3IEBAIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0
aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNj
YWxlZFNpemUgLyBzaXplKTsKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKKy8vIFRoaXMg
aXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwaXhlbCBncmlkIG9mIHRo
ZSBJbWFnZUJ1ZmZlciBhbGlnbnMgd2l0aCB0aGUgcGl4ZWwgZ3JpZCBvZiB0aGUgY29udGV4dC4K
Ky8vIFNpbXBseSBzYXlpbmcgY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29u
dGV4dCkgaXNuJ3Qgc3VmZmljaWVudCBpbiB0aGlzIHNpdHVhdGlvbiwgYmVjYXVzZSByZWN0Lmxv
Y2F0aW9uKCkgbWF5IG5vdCBsaWUgb24gYSBwaXhlbCBib3VuZGFyeS4KKy8vIEluIHRoaXMgc2l0
dWF0aW9uLCB3ZSBoYXZlIHRvIGluZmxhdGUgYm90aCB0aGUgbGVmdCBzaWRlIGFuZCB0aGUgcmln
aHQgc2lkZSwgd2hpY2ggY2FuIGxlYWQgdG8gZGlmZmVyZW50IHJlc3VsdHMgdGhhbgorLy8gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29udGV4dCkgd291bGQgaGF2ZSBwcm9k
dWNlZC4KK2F1dG8gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIC0+IHN0ZDo6b3B0
aW9uYWw8Q29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uPgoreworICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gaW5mbyA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVySW5mbyhyZWN0LCBjb250ZXh0KTsKKworICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBpZiAoY29udGV4dC5yZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGluZm8ucGh5c2ljYWxTaXplSW5E
ZXZpY2VDb29yZGluYXRlcywgY29udGV4dCk7CisgICAgCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShp
bmZvLnBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMsIGNvbnRleHQpOworCisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoaW5mby5zY2FsZSk7CisgICAgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS50cmFuc2xhdGUoLWluZm8uaW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMubG9j
YXRpb24oKSk7CisgICAgcmV0dXJuIHsgeyBpbWFnZUJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBp
bmZvLmluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzIH0gfTsKK30KKwogUmVmUHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKQEAg
LTEwNiw3ICsxMzIsNiBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYwogICAgIGlmICghaW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CiAgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQpAQCAtMTY3LDYgKzE5MiwzMyBAQCBJbnRTaXplIEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
QwogICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3Io
KSk7CiB9CiAKK2F1dG8gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJJbmZvKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSAtPiBDb21wYXRp
YmxlQnVmZmVySW5mbworeworICAgIGF1dG8gc2NhbGVGYWN0b3IgPSBjb250ZXh0LnNjYWxlRmFj
dG9yKCk7CisgICAgYXV0byBzY2FsZWRSZWN0ID0gcmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIGluZmxhdGVkU2NhbGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3Qoc2NhbGVkUmVjdCk7CisgICAgYXV0byBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRl
cyA9IEZsb2F0UmVjdChpbmZsYXRlZFNjYWxlZFJlY3QpOworCisgICAgY29uc3RleHByIGludCBt
YXhEaW1lbnNpb24gPSA0MDk2OworICAgIGlmIChpbmZsYXRlZFNjYWxlZFJlY3Qud2lkdGgoKSA+
IG1heERpbWVuc2lvbikgeworICAgICAgICAvLyBUaGUgcGl4ZWwgZ3JpZHMgd29uJ3QgYWxpZ24g
YW55IG1vcmUsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB0cnkgdG8gaGFuZGxlIGZyYWN0aW9ucyBv
ZiBwaXhlbHMuCisgICAgICAgIGluZmxhdGVkU2NhbGVkUmVjdC5zZXRXaWR0aChtYXhEaW1lbnNp
b24pOworICAgICAgICBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlcy5zY2FsZShtYXhEaW1l
bnNpb24gLyBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlcy53aWR0aCgpLCAxKTsKKyAgICAg
ICAgc2NhbGVGYWN0b3Iuc2V0V2lkdGgobWF4RGltZW5zaW9uIC8gcmVjdC53aWR0aCgpKTsKKyAg
ICB9CisgICAgaWYgKGluZmxhdGVkU2NhbGVkUmVjdC5oZWlnaHQoKSA+IG1heERpbWVuc2lvbikg
eworICAgICAgICAvLyBUaGUgcGl4ZWwgZ3JpZHMgd29uJ3QgYWxpZ24gYW55IG1vcmUsIHNvIHRo
ZXJlJ3Mgbm8gbmVlZCB0byB0cnkgdG8gaGFuZGxlIGZyYWN0aW9ucyBvZiBwaXhlbHMuCisgICAg
ICAgIGluZmxhdGVkU2NhbGVkUmVjdC5zZXRIZWlnaHQobWF4RGltZW5zaW9uKTsKKyAgICAgICAg
aW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMuc2NhbGUoMSwgbWF4RGltZW5zaW9uIC8gaW5m
bGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMuaGVpZ2h0KCkpOworICAgICAgICBzY2FsZUZhY3Rv
ci5zZXRIZWlnaHQobWF4RGltZW5zaW9uIC8gcmVjdC5oZWlnaHQoKSk7CisgICAgfQorCisgICAg
YXV0byBwaHlzaWNhbFNpemVJbkRldmljZUNvb3JkaW5hdGVzID0gaW5mbGF0ZWRTY2FsZWRSZWN0
LnNpemUoKTsKKyAgICBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlcy5zY2FsZSgxLjBmIC8g
c2NhbGVGYWN0b3IpOworICAgIHJldHVybiB7IFdURk1vdmUocGh5c2ljYWxTaXplSW5EZXZpY2VD
b29yZGluYXRlcyksIFdURk1vdmUoaW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMpLCBzY2Fs
ZUZhY3RvciB9OworfQorCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
aWYgKHJlY3QuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKaW5kZXggZDdiNzU2NGE1OWI4YzI2NzZhNzZlMTkxYzVhMDc5NTk2MTg5
ODYxMi4uZDJkOWJlOWVmNDAzMmZhYTI1YmU2MmNhY2U0Mzc4MmRlZmNiNzQxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC01Miw2ICs1
MiwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGli
bGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5n
IGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHN0cnVjdCBDb21wYXRpYmxlQnVmZmVy
RGVzY3JpcHRpb24geworICAgICAgICBSZWY8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAg
ICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXM7CisgICAgfTsKKyAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21wYXRpYmxlQnVmZmVyRGVzY3JpcHRpb24+IGNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0SW5Vc2VyQ29vcmRpbmF0ZXMs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAg
ICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCkBAIC02Myw2ICs2OCwxMiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKIAogICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHN0cnVjdCBDb21wYXRpYmxlQnVm
ZmVySW5mbyB7CisgICAgICAgIEludFNpemUgcGh5c2ljYWxTaXplSW5EZXZpY2VDb29yZGluYXRl
czsKKyAgICAgICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzOworICAg
ICAgICBGbG9hdFNpemUgc2NhbGU7CisgICAgfTsKKyAgICBzdGF0aWMgQ29tcGF0aWJsZUJ1ZmZl
ckluZm8gY29tcGF0aWJsZUJ1ZmZlckluZm8oY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZm
ZXIoKSA9IGRlZmF1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcAppbmRleCBkNDNiZTY5MzFjYWYxMWVhZTgwYjU4MGNjYjJkOTVhMDkyMDU5YjQ2Li5h
YjMwZDYwODRhMjk4NjJhNTlmZDQ0YTZhYTIxY2RjMjkxY2RhODg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJD
b3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCiAj
aW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC0zNzAsNTMgKzM3MSw2NSBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0lt
YWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZQogICAgIG1fb3duZXIu
dHJhbnNsYXRlKDAsIC0ocmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7CiB9
CiAKLXN0cnVjdCBHbHlwaHNBbmRBZHZhbmNlc1N0b3JhZ2UgewotICAgIFZlY3RvcjxHbHlwaEJ1
ZmZlckdseXBoPiBnbHlwaHM7Ci0gICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZT4gYWR2YW5j
ZXM7Ci19Owordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
c3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBGbG9h
dFBvaW50IHBlblBvc2l0aW9uID0gc3RhcnRQb2ludDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5k
c0ZvckdseXBoKGdseXBoc1tpXSk7CisgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVySW5mbyA9
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGJvdW5kcywgbV9vd25lcikpIHsK
KyAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVySW5mby0+aW1h
Z2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhzICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBG
bG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOworICAgICAgICAgICAgYXV0byBkZXN0aW5hdGlv
blJlY3QgPSBpbWFnZUJ1ZmZlckluZm8tPmluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7CisgICAgICAg
ICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlckluZm8tPmltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICB9CisgICAgICAgIHBlblBvc2l0aW9uLm1vdmUo
c2l6ZShhZHZhbmNlc1tpXSkpOworICAgIH0KK30KIAotc3RydWN0IEdseXBoc0FuZEFkdmFuY2Vz
IHsKLSAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHM7Ci0gICAgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlczsKLSAgICB1bnNpZ25lZCBudW1HbHlwaHM7Ci0gICAgR2x5
cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlOwotICAgIHN0ZDo6b3B0aW9uYWw8R2x5cGhz
QW5kQWR2YW5jZXNTdG9yYWdlPiBzdG9yYWdlOwotfTsKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCit7CisgICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9v
dGhpbmdNb2RlKTsKKyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4
dCwgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKTsKKyAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworfQogCi1zdGF0aWMgR2x5
cGhzQW5kQWR2YW5jZXMgZmlsdGVyT3V0T1RTVkdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJh
d0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGF1dG8gb3RzdmdHbHlw
aHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7Ci0gICAgaWYgKCFv
dHN2Z0dseXBocykKLSAgICAgICAgcmV0dXJuIHsgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCksIHsgfX07CisgICAgaWYgKCFvdHN2Z0dseXBocykg
eworICAgICAgICBkcmF3Tm9uT1RTVkdSdW4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIEFTU0VSVChvdHN2Z0dseXBocy0+c2l6ZSgpID49IG51bUdseXBocyk7CiAKLSAgICBH
bHlwaHNBbmRBZHZhbmNlcyByZXN1bHQ7Ci0gICAgcmVzdWx0LmluaXRpYWxBZHZhbmNlID0gbWFr
ZUdseXBoQnVmZmVyQWR2YW5jZSgpOwotICAgIHJlc3VsdC5zdG9yYWdlID0gR2x5cGhzQW5kQWR2
YW5jZXNTdG9yYWdlKCk7Ci0KLSAgICByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobnVtR2x5cGhzKTsKLSAgICByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQuc3RvcmFnZS0+
Z2x5cGhzLnNpemUoKSA9PSByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuc2l6ZSgpKTsKLSAgICAg
ICAgaWYgKG90c3ZnR2x5cGhzLT5xdWlja0dldChpKSkgewotICAgICAgICAgICAgaWYgKHJlc3Vs
dC5zdG9yYWdlLT5hZHZhbmNlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lmlu
aXRpYWxBZHZhbmNlID0gbWFrZUdseXBoQnVmZmVyQWR2YW5jZShzaXplKHJlc3VsdC5pbml0aWFs
QWR2YW5jZSkgKyBzaXplKGFkdmFuY2VzW2ldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmxhc3QoKSA9IG1ha2VHbHlwaEJ1ZmZl
ckFkdmFuY2Uoc2l6ZShyZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMubGFzdCgpKSArIHNpemUoYWR2
YW5jZXNbaV0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdC5zdG9yYWdl
LT5nbHlwaHMudW5jaGVja2VkQXBwZW5kKGdseXBoc1tpXSk7Ci0gICAgICAgICAgICByZXN1bHQu
c3RvcmFnZS0+YWR2YW5jZXMudW5jaGVja2VkQXBwZW5kKGFkdmFuY2VzW2ldKTsKKyAgICAvLyBX
ZSBjYW4ndCBqdXN0IHBhcnRpdGlvbiB0aGUgZ2x5cGhzIGludG8gT1QtU1ZHIGdseXBocyBhbmQg
bm9uLU9ULVNWRyBnbHlwaHMgYmVjYXVzZSBnbHlwaHMgYXJlIGFsbG93ZWQgdG8gZHJhdyBvdXRz
aWRlIG9mIHRoZWlyIGxheW91dCBib3hlcy4KKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZ2x5cGhz
IGNhbiBvdmVybGFwLCB3aGljaCBtZWFucyB3ZSBoYXZlIHRvIGdldCB0aGUgei1vcmRlciBjb3Jy
ZWN0LiBXZSBjYW4ndCBoYXZlIGFuIGVhcmxpZXIgcnVuIGJlIGRyYXduIG9uIHRvcCBvZiBhIGxh
dGVyIHJ1bi4KKyAgICBGbG9hdFBvaW50IHJ1bk9yaWdpbiA9IHN0YXJ0UG9pbnQ7CisgICAgRmxv
YXRQb2ludCBwZW5Qb3NpdGlvbiA9IHN0YXJ0UG9pbnQ7CisgICAgc2l6ZV90IGdseXBoQ291bnRJ
blJ1biA9IDA7CisgICAgYm9vbCBzdGF0ZSA9IGZhbHNlOworICAgIHVuc2lnbmVkIGk7CisgICAg
YXV0byBkcmF3ID0gWyZdICgpIHsKKyAgICAgICAgaWYgKCFnbHlwaENvdW50SW5SdW4pCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChzdGF0ZSkKKyAgICAgICAgICAgIGRyYXdPVFNW
R1J1bihmb250LCBnbHlwaHMgKyBpIC0gZ2x5cGhDb3VudEluUnVuLCBhZHZhbmNlcyArIGkgLSBn
bHlwaENvdW50SW5SdW4sIGdseXBoQ291bnRJblJ1biwgcnVuT3JpZ2luLCBzbW9vdGhpbmdNb2Rl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZHJhd05vbk9UU1ZHUnVuKGZvbnQsIGdseXBo
cyArIGkgLSBnbHlwaENvdW50SW5SdW4sIGFkdmFuY2VzICsgaSAtIGdseXBoQ291bnRJblJ1biwg
Z2x5cGhDb3VudEluUnVuLCBydW5PcmlnaW4sIHNtb290aGluZ01vZGUpOworICAgIH07CisgICAg
Zm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGJvb2wgaXNPVFNWR0ds
eXBoID0gb3RzdmdHbHlwaHMtPnF1aWNrR2V0KGkpOworICAgICAgICBpZiAoaXNPVFNWR0dseXBo
ICE9IHN0YXRlKSB7CisgICAgICAgICAgICBkcmF3KCk7CisgICAgICAgICAgICBzdGF0ZSA9IGlz
T1RTVkdHbHlwaDsKKyAgICAgICAgICAgIGdseXBoQ291bnRJblJ1biA9IDA7CisgICAgICAgICAg
ICBydW5PcmlnaW4gPSBwZW5Qb3NpdGlvbjsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocmVz
dWx0LnN0b3JhZ2UtPmdseXBocy5zaXplKCkgPT0gcmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLnNp
emUoKSk7CisgICAgICAgICsrZ2x5cGhDb3VudEluUnVuOworICAgICAgICBwZW5Qb3NpdGlvbi5t
b3ZlKHNpemUoYWR2YW5jZXNbaV0pKTsKICAgICB9Ci0KLSAgICByZXN1bHQuZ2x5cGhzID0gcmVz
dWx0LnN0b3JhZ2UtPmdseXBocy5kYXRhKCk7Ci0gICAgcmVzdWx0LmFkdmFuY2VzID0gcmVzdWx0
LnN0b3JhZ2UtPmFkdmFuY2VzLmRhdGEoKTsKLSAgICByZXN1bHQubnVtR2x5cGhzID0gcmVzdWx0
LnN0b3JhZ2UtPmdseXBocy5zaXplKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIGRyYXco
KTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC00MjgsMTQgKzQ0
MSw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdsCiAKICAgICBBU1NFUlQobV9kZWNvbnN0cnVj
dERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS83MDE2NjU1Mj4gUmVjb3JkIE9UU1ZHIGdseXBocy4KLSAgICBH
bHlwaHNBbmRBZHZhbmNlcyBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocyA9IGZp
bHRlck91dE9UU1ZHR2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocyk7Ci0g
ICAgQVNTRVJUKGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmdseXBocyA9PSBn
bHlwaHMgfHwgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuZ2x5cGhzID09IGds
eXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLnN0b3JhZ2UtPmdseXBocy5kYXRhKCkp
OwotICAgIEFTU0VSVChnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5hZHZhbmNl
cyA9PSBhZHZhbmNlcyB8fCBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5hZHZh
bmNlcyA9PSBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5zdG9yYWdlLT5hZHZh
bmNlcy5kYXRhKCkpOwotCi0gICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9vdGhp
bmdNb2RlKTsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4dCwg
Zm9udCwgZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuZ2x5cGhzLCBnbHlwaHNB
bmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5hZHZhbmNlcywgZ2x5cGhzQW5kQWR2YW5jZXNX
aXRob3V0T1RTVkdHbHlwaHMubnVtR2x5cGhzLCBzdGFydFBvaW50ICsgc2l6ZShnbHlwaHNBbmRB
ZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5pbml0aWFsQWR2YW5jZSksIHNtb290aGluZ01vZGUp
OwotICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgZHJhd0J5U3BsaXR0aW5nSW50
b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3TmF0aXZlVGV4dChDVEZvbnRSZWYgZm9udCwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5l
UmVmIGxpbmUsIENHUmVjdCBsaW5lUmVjdCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwYzFjMmY3ZTdmMDE5MjAxM2RiYWYz
NTZjYzNlOGUzNzFlY2ZlOTZhLi5jN2Y0NzFmMjgxMjc5OTlmMjg5OWIwOTJiNzcyNDY2YTJhNzMz
ODAyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTItMTAgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIE9ULVNWRyBnbHlwaHMg
ZG9uJ3QgZHJhdyBpbnRvIGNhbnZhc2VzIChiZWNhdXNlIG9mIHRoZSBHUFUgcHJvY2VzcykKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE3MQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNzAxNjY1NTI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3RleHQvb3RzdmctY2FudmFzLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9vdHN2Zy1jYW52YXMuaHRtbDogQWRk
ZWQuCisKIDIwMjEtMTItMTAgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg2ODM2LgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L290c3ZnLWNhbnZhcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0L290c3ZnLWNhbnZhcy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0
NWEzMDEwM2U2MGU4MDUxOGZiNzMyMjllOTg5ZWIzY2M4YzFkYzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLWV4cGVjdGVkLmh0bWwKQEAgLTAs
MCArMSwzNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorQGZv
bnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6ICJXZWJGb250IjsKKyAgICBzcmM6IHVybCgicmVz
b3VyY2VzL0FoZW0tU1ZHLnR0ZiIpIGZvcm1hdCgidHJ1ZXR5cGUiKTsKK30KKzwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwPgorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBPVC1TVkcgZ2x5
cGhzIGNhbiBiZSBkcmF3biBpbnRvIGNhbnZhcy4KK1RoZSB0ZXN0IHBhc3NlcyBpZiB5b3Ugc2Vl
OgorPG9sPgorICAgIDxsaT5BIG1lZGl1bS1zaXplZCBibGFjayBzcXVhcmUsIHRoZW48L2xpPgor
ICAgIDxsaT5BIHNsaWdodGx5IHNtYWxsZXIgZ3JlZW4gc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8
bGk+QSBtZWRpdW0tc2l6ZWQgYmxhY2sgc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBzbGln
aHRseSBzbWFsbGVyIGdyZWVuIHNxdWFyZTwvbGk+Cis8L3A+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cit2YXIgY29udGV4
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOwor
Y29udGV4dC5maWxsU3R5bGUgPSAiYmxhY2siOworY29udGV4dC5maWxsUmVjdCgxMCwgNjAsIDUw
LCA1MCk7Citjb250ZXh0LmZpbGxTdHlsZSA9ICJncmVlbiI7Citjb250ZXh0LmZpbGxSZWN0KDY1
LCA2NSwgNDAsIDQwKTsKK2NvbnRleHQuZmlsbFN0eWxlID0gImJsYWNrIjsKK2NvbnRleHQuZmls
bFJlY3QoMTEwLCA2MCwgNTAsIDUwKTsKK2NvbnRleHQuZmlsbFN0eWxlID0gImdyZWVuIjsKK2Nv
bnRleHQuZmlsbFJlY3QoMTY1LCA2NSwgNDAsIDQwKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L290c3ZnLWNhbnZhcy5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L290c3ZnLWNhbnZhcy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkx
MmViY2NjMWE2MGM5ZWEwYWQ0NTgyNzlmMjBiZjBmNzc3MmY4YjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLmh0bWwKQEAgLTAsMCArMSwzMCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorQGZvbnQtZmFjZSB7
CisgICAgZm9udC1mYW1pbHk6ICJXZWJGb250IjsKKyAgICBzcmM6IHVybCgicmVzb3VyY2VzL0Fo
ZW0tU1ZHLnR0ZiIpIGZvcm1hdCgidHJ1ZXR5cGUiKTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwPgorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBPVC1TVkcgZ2x5cGhzIGNhbiBi
ZSBkcmF3biBpbnRvIGNhbnZhcy4KK1RoZSB0ZXN0IHBhc3NlcyBpZiB5b3Ugc2VlOgorPG9sPgor
ICAgIDxsaT5BIG1lZGl1bS1zaXplZCBibGFjayBzcXVhcmUsIHRoZW48L2xpPgorICAgIDxsaT5B
IHNsaWdodGx5IHNtYWxsZXIgZ3JlZW4gc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBtZWRp
dW0tc2l6ZWQgYmxhY2sgc3F1YXJlLCB0aGVuPC9saT4KKyAgICA8bGk+QSBzbGlnaHRseSBzbWFs
bGVyIGdyZWVuIHNxdWFyZTwvbGk+Cis8L3A+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cit2YXIgY29udGV4dCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOworWy4uLmRvY3Vt
ZW50LmZvbnRzXVswXS5sb2FkKCkudGhlbihmdW5jdGlvbigpIHsKKyAgICBjb250ZXh0LmZvbnQg
PSAiNTBweCAnV2ViRm9udCciOworICAgIGNvbnRleHQuZmlsbFRleHQoImJBYkEiLCAxMCwgMTAw
KTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446811</attachid>
            <date>2021-12-10 14:17:55 -0800</date>
            <delta_ts>2021-12-10 17:41:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234171-20211210141754.patch</filename>
            <type>text/plain</type>
            <size>19662</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI4MWQzYTAwZmJiYTZh
YzExNjQwZGE5NDZmNTkyOTM3ODMwZDFiMC4uM2I5YjY4NGE4MTZjYTE2NmU5NWY5OGU4MzAzMTU3
OTA3NTE4YzkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTEyLTEwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBP
VC1TVkcgZ2x5cGhzIGRvbid0IGRyYXcgaW50byBjYW52YXNlcyAoYmVjYXVzZSBvZiB0aGUgR1BV
IHByb2Nlc3MpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQxNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcwMTY2NTUyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyYXdpbmcgT1QtU1ZHIGdseXBo
cyBpbnRvIGNhbnZhcyB3YXMgaW50ZW50aW9uYWxseSBkaXNhYmxlZCBpbiBodHRwczovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjY5MjExL3dlYmtpdC4KKyAgICAgICAgVGhpcyBwYXRjaCBl
bmFibGVzIGl0IGFnYWluLiBSYXRoZXIgdGhhbiBkb2luZyBhbnl0aGluZyBjb21wbGljYXRlZCBs
aWtlIHN1cHBvcnRpbmcgYWxsIG9mIFNWRyBpbiBEcmF3R2x5cGhzUmVjb3JkZXIsCisgICAgICAg
IHdlIGNhbiBzaW1wbHkgc3VwcG9ydCB0aGlzIGJ5IGRyYXdpbmcgdGhlIGdseXBocyBpbnRvIGEg
SW1hZ2VCdWZmZXIgYW5kIHNlbmRpbmcgdGhlIEltYWdlQnVmZmVyIHRvIHRoZSBHUFUgcHJvY2Vz
cy4KKworICAgICAgICBGb3IgdGV4dCwgaXQncyBwcmV0dHkgaW1wb3J0YW50IHRoYXQgdGhlIHBp
eGVsIGdyaWQgb2YgdGhlIEltYWdlQnVmZmVyIG1hdGNoZXMgdGhlIHBpeGVsIGdyaWQgb2YgdGhl
IGRlc3RpbmF0aW9uLAorICAgICAgICByYXRoZXIgdGhhbiBiZWluZyBvZmZzZXQgYnkgaGFsZiBh
IHBpeGVsIG9yIHNvbWV0aGluZy4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGNyZWF0aW9uIGZ1bmN0
aW9uIHRvIEltYWdlQnVmZmVyIHdoaWNoCisgICAgICAgIGFjY2VwdHMgYSBGbG9hdFJlY3QgKGlu
c3RlYWQgb2YgdGhlIHByZXZpb3VzIEZsb2F0U2l6ZSB3aGljaCBpdCB1c2VkIHRvIGFjY2VwdCku
IFRoZSBGbG9hdFJlY3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICAgaW5mbGF0aW5nIHRo
ZSBnZW9tZXRyeSBoYXMgdG8gaGFwcGVuIG9uIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBp
ZiB3ZSB3YW50IHRoZSBwaXhlbCBncmlkcyB0byBtYXRjaC4KKworICAgICAgICBUZXN0OiBmYXN0
L3RleHQvb3RzdmctY2FudmFzLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
SW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGlu
Z0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyT3V0T1RTVkdH
bHlwaHMpOiBEZWxldGVkLgorCiAyMDIxLTEyLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4NjgzNi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1Jl
Y29yZGVyLmgKaW5kZXggMWQwZTg3OTBkYTM1YzA4MWE4MGJlZjFiMWU3MWEzYjdkOWY1MTM3Yy4u
MjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAg
LTc1LDYgKzc1LDEwIEBAIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0J5U3BsaXR0
aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZv
aWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd05vbk9U
U1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworCiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2b2lkIHBvcHVsYXRlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwcmVw
YXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXgg
ODhjZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uMjE5YjAyYjNiMzcxNzU0
OWNkMWQ3MjY4MWU3Y2Y0ZWJkNmEzYThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtOTAsMTEgKzkwLDM3IEBAIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0
aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNj
YWxlZFNpemUgLyBzaXplKTsKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKKy8vIFRoaXMg
aXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwaXhlbCBncmlkIG9mIHRo
ZSBJbWFnZUJ1ZmZlciBhbGlnbnMgd2l0aCB0aGUgcGl4ZWwgZ3JpZCBvZiB0aGUgY29udGV4dC4K
Ky8vIFNpbXBseSBzYXlpbmcgY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29u
dGV4dCkgaXNuJ3Qgc3VmZmljaWVudCBpbiB0aGlzIHNpdHVhdGlvbiwgYmVjYXVzZSByZWN0Lmxv
Y2F0aW9uKCkgbWF5IG5vdCBsaWUgb24gYSBwaXhlbCBib3VuZGFyeS4KKy8vIEluIHRoaXMgc2l0
dWF0aW9uLCB3ZSBoYXZlIHRvIGluZmxhdGUgYm90aCB0aGUgbGVmdCBzaWRlIGFuZCB0aGUgcmln
aHQgc2lkZSwgd2hpY2ggY2FuIGxlYWQgdG8gZGlmZmVyZW50IHJlc3VsdHMgdGhhbgorLy8gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSwgY29udGV4dCkgd291bGQgaGF2ZSBwcm9k
dWNlZC4KK2F1dG8gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIC0+IHN0ZDo6b3B0
aW9uYWw8Q29tcGF0aWJsZUJ1ZmZlckRlc2NyaXB0aW9uPgoreworICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gaW5mbyA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVySW5mbyhyZWN0LCBjb250ZXh0KTsKKworICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBpZiAoY29udGV4dC5yZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGluZm8ucGh5c2ljYWxTaXplSW5E
ZXZpY2VDb29yZGluYXRlcywgY29udGV4dCk7CisgICAgCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShp
bmZvLnBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMsIGNvbnRleHQpOworCisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoaW5mby5zY2FsZSk7CisgICAgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS50cmFuc2xhdGUoLWluZm8uaW5mbGF0ZWRSZWN0SW5Vc2VyQ29vcmRpbmF0ZXMubG9j
YXRpb24oKSk7CisgICAgcmV0dXJuIHsgeyBpbWFnZUJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBp
bmZvLmluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzIH0gfTsKK30KKwogUmVmUHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKQEAg
LTEwNiw3ICsxMzIsNiBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYwogICAgIGlmICghaW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CiAgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQpAQCAtMTY3LDYgKzE5MiwzOCBAQCBJbnRTaXplIEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
QwogICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3Io
KSk7CiB9CiAKK2F1dG8gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJJbmZvKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSAtPiBDb21wYXRp
YmxlQnVmZmVySW5mbworeworICAgIGF1dG8gc2NhbGVGYWN0b3IgPSBjb250ZXh0LnNjYWxlRmFj
dG9yKCk7CisgICAgYXV0byBzY2FsZWRSZWN0ID0gcmVjdDsKKyAgICBzY2FsZWRSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIGluZmxhdGVkU2NhbGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3Qoc2NhbGVkUmVjdCk7CisgICAgYXV0byBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRl
cyA9IEZsb2F0UmVjdChpbmZsYXRlZFNjYWxlZFJlY3QpOworCisgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBhbGxvY2F0ZSBodWdlIEltYWdlQnVmZmVycyBiZWNhdXNlIHRoZXkgY2FuIHRha2UgYSBs
b3Qgb2YgbWVtb3J5LAorICAgIC8vIHNvIGlmIHRoZSBzaXplIHdvdWxkIGhhdmUgYmVlbiB0b28g
YmlnLCBkZWNyZWFzZSByZXNvbHV0aW9uIGFuZCBzY2FsZSB0aGUgcmVzdWx0aW5nIGNvbnRleHQu
CisgICAgLy8gVGhpcyB3aWxsIG1lYW4gdGhhdCB0aGUgZ2x5cGggd2lsbCBsb3NlIHF1YWxpdHks
IGJ1dCB3aWxsIHN0aWxsIGdlbmVyYWxseSBsb29rIGNvcnJlY3QuCisgICAgLy8gSW4gcHJhY3Rp
Y2UsIHRoaXMgc2hvdWxkIGFsbW9zdCBuZXZlciBoYXBwZW4gLSBpbmRpdmlkdWFsIGdseXBocyBp
bnNpZGUgdGV4dCBwcmV0dHkgbXVjaAorICAgIC8vIG5ldmVyIGVuZCB1cCB0aGlzIGJpZy4KKyAg
ICBjb25zdGV4cHIgaW50IG1heERpbWVuc2lvbiA9IDQwOTY7CisgICAgaWYgKGluZmxhdGVkU2Nh
bGVkUmVjdC53aWR0aCgpID4gbWF4RGltZW5zaW9uKSB7CisgICAgICAgIC8vIFRoZSBwaXhlbCBn
cmlkcyB3b24ndCBhbGlnbiBhbnkgbW9yZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHRyeSB0byBo
YW5kbGUgZnJhY3Rpb25zIG9mIHBpeGVscy4KKyAgICAgICAgaW5mbGF0ZWRTY2FsZWRSZWN0LnNl
dFdpZHRoKG1heERpbWVuc2lvbik7CisgICAgICAgIGluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5h
dGVzLnNjYWxlKG1heERpbWVuc2lvbiAvIGluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5hdGVzLndp
ZHRoKCksIDEpOworICAgICAgICBzY2FsZUZhY3Rvci5zZXRXaWR0aChtYXhEaW1lbnNpb24gLyBy
ZWN0LndpZHRoKCkpOworICAgIH0KKyAgICBpZiAoaW5mbGF0ZWRTY2FsZWRSZWN0LmhlaWdodCgp
ID4gbWF4RGltZW5zaW9uKSB7CisgICAgICAgIC8vIFRoZSBwaXhlbCBncmlkcyB3b24ndCBhbGln
biBhbnkgbW9yZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHRyeSB0byBoYW5kbGUgZnJhY3Rpb25z
IG9mIHBpeGVscy4KKyAgICAgICAgaW5mbGF0ZWRTY2FsZWRSZWN0LnNldEhlaWdodChtYXhEaW1l
bnNpb24pOworICAgICAgICBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlcy5zY2FsZSgxLCBt
YXhEaW1lbnNpb24gLyBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGluYXRlcy5oZWlnaHQoKSk7Cisg
ICAgICAgIHNjYWxlRmFjdG9yLnNldEhlaWdodChtYXhEaW1lbnNpb24gLyByZWN0LmhlaWdodCgp
KTsKKyAgICB9CisKKyAgICBhdXRvIHBoeXNpY2FsU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMgPSBp
bmZsYXRlZFNjYWxlZFJlY3Quc2l6ZSgpOworICAgIGluZmxhdGVkUmVjdEluVXNlckNvb3JkaW5h
dGVzLnNjYWxlKDEuMGYgLyBzY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIHsgV1RGTW92ZShwaHlz
aWNhbFNpemVJbkRldmljZUNvb3JkaW5hdGVzKSwgV1RGTW92ZShpbmZsYXRlZFJlY3RJblVzZXJD
b29yZGluYXRlcyksIHNjYWxlRmFjdG9yIH07Cit9CisKIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBkN2I3NTY0YTU5YjhjMjY3NmE3
NmUxOTFjNWEwNzk1OTYxODk4NjEyLi5kMmQ5YmU5ZWY0MDMyZmFhMjViZTYyY2FjZTQzNzgyZGVm
Y2I3NDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKQEAgLTUyLDYgKzUyLDExIEBAIHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFn
ZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29s
dXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250
ZXh0LgogICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgc3RydWN0
IENvbXBhdGlibGVCdWZmZXJEZXNjcmlwdGlvbiB7CisgICAgICAgIFJlZjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXI7CisgICAgICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3RJblVzZXJDb29yZGlu
YXRlczsKKyAgICB9OworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbXBhdGlibGVCdWZmZXJE
ZXNjcmlwdGlvbj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3RJ
blVzZXJDb29yZGluYXRlcywgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKQEAg
LTYzLDYgKzY4LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZl
clNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgc3Ry
dWN0IENvbXBhdGlibGVCdWZmZXJJbmZvIHsKKyAgICAgICAgSW50U2l6ZSBwaHlzaWNhbFNpemVJ
bkRldmljZUNvb3JkaW5hdGVzOworICAgICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0SW5Vc2Vy
Q29vcmRpbmF0ZXM7CisgICAgICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICB9OworICAgIHN0YXRp
YyBDb21wYXRpYmxlQnVmZmVySW5mbyBjb21wYXRpYmxlQnVmZmVySW5mbyhjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGQ0M2JlNjkzMWNhZjExZWFlODBiNTgwY2Ni
MmQ5NWEwOTIwNTliNDYuLmFiMzBkNjA4NGEyOTg2MmE1OWZkNDRhNmFhMjFjZGMyOTFjZGE4ODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Ry
YXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTM3MCw1MyArMzcxLDY1IEBAIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0
YXRlCiAgICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJl
Y3Qub3JpZ2luLnkpKTsKIH0KIAotc3RydWN0IEdseXBoc0FuZEFkdmFuY2VzU3RvcmFnZSB7Ci0g
ICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGg+IGdseXBoczsKLSAgICBWZWN0b3I8R2x5cGhCdWZm
ZXJBZHZhbmNlPiBhZHZhbmNlczsKLX07Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09U
U1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQoreworICAgIEZsb2F0UG9pbnQgcGVuUG9zaXRpb24gPSBzdGFydFBvaW50OworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBhdXRvIGJv
dW5kcyA9IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhzW2ldKTsKKyAgICAgICAgaWYgKGF1dG8g
aW1hZ2VCdWZmZXJJbmZvID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYm91
bmRzLCBtX293bmVyKSkgeworICAgICAgICAgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoaW1h
Z2VCdWZmZXJJbmZvLT5pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLCBmb250LCBnbHlwaHMgKyBpLCBh
ZHZhbmNlcyArIGksIDEsIEZsb2F0UG9pbnQoKSwgc21vb3RoaW5nTW9kZSk7CisgICAgICAgICAg
ICBhdXRvIGRlc3RpbmF0aW9uUmVjdCA9IGltYWdlQnVmZmVySW5mby0+aW5mbGF0ZWRSZWN0SW5V
c2VyQ29vcmRpbmF0ZXM7CisgICAgICAgICAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KHBlblBv
c2l0aW9uKTsKKyAgICAgICAgICAgIG1fb3duZXIuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
SW5mby0+aW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAg
cGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CisgICAgfQorfQogCi1zdHJ1Y3Qg
R2x5cGhzQW5kQWR2YW5jZXMgewotICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBoczsK
LSAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzOwotICAgIHVuc2lnbmVkIG51
bUdseXBoczsKLSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgaW5pdGlhbEFkdmFuY2U7Ci0gICAgc3Rk
OjpvcHRpb25hbDxHbHlwaHNBbmRBZHZhbmNlc1N0b3JhZ2U+IHN0b3JhZ2U7Ci19Owordm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0
YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7
Cit9CiAKLXN0YXRpYyBHbHlwaHNBbmRBZHZhbmNlcyBmaWx0ZXJPdXRPVFNWR0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocykKK3ZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAg
ICAgYXV0byBvdHN2Z0dseXBocyA9IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5
cGhzKTsKLSAgICBpZiAoIW90c3ZnR2x5cGhzKQotICAgICAgICByZXR1cm4geyBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2UoKSwgeyB9fTsKKyAgICBp
ZiAoIW90c3ZnR2x5cGhzKSB7CisgICAgICAgIGRyYXdOb25PVFNWR1J1bihmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgQVNTRVJUKG90c3ZnR2x5cGhzLT5zaXplKCkgPj0gbnVt
R2x5cGhzKTsKIAotICAgIEdseXBoc0FuZEFkdmFuY2VzIHJlc3VsdDsKLSAgICByZXN1bHQuaW5p
dGlhbEFkdmFuY2UgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7Ci0gICAgcmVzdWx0LnN0b3Jh
Z2UgPSBHbHlwaHNBbmRBZHZhbmNlc1N0b3JhZ2UoKTsKLQotICAgIHJlc3VsdC5zdG9yYWdlLT5n
bHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1HbHlwaHMpOwotICAgIHJlc3VsdC5zdG9y
YWdlLT5hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUdseXBocyk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgQVNTRVJU
KHJlc3VsdC5zdG9yYWdlLT5nbHlwaHMuc2l6ZSgpID09IHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNl
cy5zaXplKCkpOwotICAgICAgICBpZiAob3RzdmdHbHlwaHMtPnF1aWNrR2V0KGkpKSB7Ci0gICAg
ICAgICAgICBpZiAocmVzdWx0LnN0b3JhZ2UtPmFkdmFuY2VzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQuaW5pdGlhbEFkdmFuY2UgPSBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKHNp
emUocmVzdWx0LmluaXRpYWxBZHZhbmNlKSArIHNpemUoYWR2YW5jZXNbaV0pKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMubGFzdCgp
ID0gbWFrZUdseXBoQnVmZmVyQWR2YW5jZShzaXplKHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNlcy5s
YXN0KCkpICsgc2l6ZShhZHZhbmNlc1tpXSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgcmVzdWx0LnN0b3JhZ2UtPmdseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5zdG9yYWdlLT5hZHZhbmNlcy51bmNoZWNrZWRBcHBlbmQoYWR2YW5j
ZXNbaV0pOworICAgIC8vIFdlIGNhbid0IGp1c3QgcGFydGl0aW9uIHRoZSBnbHlwaHMgaW50byBP
VC1TVkcgZ2x5cGhzIGFuZCBub24tT1QtU1ZHIGdseXBocyBiZWNhdXNlIGdseXBocyBhcmUgYWxs
b3dlZCB0byBkcmF3IG91dHNpZGUgb2YgdGhlaXIgbGF5b3V0IGJveGVzLgorICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBnbHlwaHMgY2FuIG92ZXJsYXAsIHdoaWNoIG1lYW5zIHdlIGhhdmUgdG8gZ2V0
IHRoZSB6LW9yZGVyIGNvcnJlY3QuIFdlIGNhbid0IGhhdmUgYW4gZWFybGllciBydW4gYmUgZHJh
d24gb24gdG9wIG9mIGEgbGF0ZXIgcnVuLgorICAgIEZsb2F0UG9pbnQgcnVuT3JpZ2luID0gc3Rh
cnRQb2ludDsKKyAgICBGbG9hdFBvaW50IHBlblBvc2l0aW9uID0gc3RhcnRQb2ludDsKKyAgICBz
aXplX3QgZ2x5cGhDb3VudEluUnVuID0gMDsKKyAgICBib29sIHN0YXRlID0gZmFsc2U7CisgICAg
dW5zaWduZWQgaTsKKyAgICBhdXRvIGRyYXcgPSBbJl0gKCkgeworICAgICAgICBpZiAoIWdseXBo
Q291bnRJblJ1bikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHN0YXRlKQorICAg
ICAgICAgICAgZHJhd09UU1ZHUnVuKGZvbnQsIGdseXBocyArIGkgLSBnbHlwaENvdW50SW5SdW4s
IGFkdmFuY2VzICsgaSAtIGdseXBoQ291bnRJblJ1biwgZ2x5cGhDb3VudEluUnVuLCBydW5Pcmln
aW4sIHNtb290aGluZ01vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3Tm9uT1RT
VkdSdW4oZm9udCwgZ2x5cGhzICsgaSAtIGdseXBoQ291bnRJblJ1biwgYWR2YW5jZXMgKyBpIC0g
Z2x5cGhDb3VudEluUnVuLCBnbHlwaENvdW50SW5SdW4sIHJ1bk9yaWdpbiwgc21vb3RoaW5nTW9k
ZSk7CisgICAgfTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAg
ICAgYm9vbCBpc09UU1ZHR2x5cGggPSBvdHN2Z0dseXBocy0+cXVpY2tHZXQoaSk7CisgICAgICAg
IGlmIChpc09UU1ZHR2x5cGggIT0gc3RhdGUpIHsKKyAgICAgICAgICAgIGRyYXcoKTsKKyAgICAg
ICAgICAgIHN0YXRlID0gaXNPVFNWR0dseXBoOworICAgICAgICAgICAgZ2x5cGhDb3VudEluUnVu
ID0gMDsKKyAgICAgICAgICAgIHJ1bk9yaWdpbiA9IHBlblBvc2l0aW9uOwogICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVChyZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnNpemUoKSA9PSByZXN1bHQuc3Rv
cmFnZS0+YWR2YW5jZXMuc2l6ZSgpKTsKKyAgICAgICAgKytnbHlwaENvdW50SW5SdW47CisgICAg
ICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNlc1tpXSkpOwogICAgIH0KLQotICAgIHJl
c3VsdC5nbHlwaHMgPSByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLmRhdGEoKTsKLSAgICByZXN1bHQu
YWR2YW5jZXMgPSByZXN1bHQuc3RvcmFnZS0+YWR2YW5jZXMuZGF0YSgpOwotICAgIHJlc3VsdC5u
dW1HbHlwaHMgPSByZXN1bHQuc3RvcmFnZS0+Z2x5cGhzLnNpemUoKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgZHJhdygpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKQEAgLTQyOCwxNCArNDQxLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2wKIAogICAgIEFT
U0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olll
cyk7CiAKLSAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzcwMTY2NTUyPiBSZWNvcmQgT1RT
VkcgZ2x5cGhzLgotICAgIEdseXBoc0FuZEFkdmFuY2VzIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91
dE9UU1ZHR2x5cGhzID0gZmlsdGVyT3V0T1RTVkdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzKTsKLSAgICBBU1NFUlQoZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdH
bHlwaHMuZ2x5cGhzID09IGdseXBocyB8fCBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0ds
eXBocy5nbHlwaHMgPT0gZ2x5cGhzQW5kQWR2YW5jZXNXaXRob3V0T1RTVkdHbHlwaHMuc3RvcmFn
ZS0+Z2x5cGhzLmRhdGEoKSk7Ci0gICAgQVNTRVJUKGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9U
U1ZHR2x5cGhzLmFkdmFuY2VzID09IGFkdmFuY2VzIHx8IGdseXBoc0FuZEFkdmFuY2VzV2l0aG91
dE9UU1ZHR2x5cGhzLmFkdmFuY2VzID09IGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5
cGhzLnN0b3JhZ2UtPmFkdmFuY2VzLmRhdGEoKSk7Ci0KLSAgICBwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOwotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1f
aW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBo
cy5nbHlwaHMsIGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmFkdmFuY2VzLCBn
bHlwaHNBbmRBZHZhbmNlc1dpdGhvdXRPVFNWR0dseXBocy5udW1HbHlwaHMsIHN0YXJ0UG9pbnQg
KyBzaXplKGdseXBoc0FuZEFkdmFuY2VzV2l0aG91dE9UU1ZHR2x5cGhzLmluaXRpYWxBZHZhbmNl
KSwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICBk
cmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoZm9udCwgZ2x5cGhzLCBhZHZh
bmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJlZiBmb250LCBDR0Zsb2F0
IGZvbnRTaXplLCBDVExpbmVSZWYgbGluZSwgQ0dSZWN0IGxpbmVSZWN0KQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBjMWMy
ZjdlN2YwMTkyMDEzZGJhZjM1NmNjM2U4ZTM3MWVjZmU5NmEuLmM3ZjQ3MWYyODEyNzk5OWYyODk5
YjA5MmI3NzI0NjZhMmE3MzM4MDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0xMi0xMCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2Nv
YV0gT1QtU1ZHIGdseXBocyBkb24ndCBkcmF3IGludG8gY2FudmFzZXMgKGJlY2F1c2Ugb2YgdGhl
IEdQVSBwcm9jZXNzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM0MTcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MDE2NjU1Mj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvdGV4dC9vdHN2
Zy1jYW52YXMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L290c3Zn
LWNhbnZhcy5odG1sOiBBZGRlZC4KKwogMjAyMS0xMi0xMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODY4
MzYuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLWV4cGVjdGVkLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDQ1YTMwMTAzZTYwZTgwNTE4ZmI3MzIyOWU5ODllYjNjYzhjMWRjMwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9vdHN2Zy1jYW52YXMtZXhw
ZWN0ZWQuaHRtbApAQCAtMCwwICsxLDM0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c3R5bGU+CitAZm9udC1mYWNlIHsKKyAgICBmb250LWZhbWlseTogIldlYkZvbnQiOwor
ICAgIHNyYzogdXJsKCJyZXNvdXJjZXMvQWhlbS1TVkcudHRmIikgZm9ybWF0KCJ0cnVldHlwZSIp
OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+CitUaGlzIHRlc3QgbWFrZXMgc3Vy
ZSB0aGF0IE9ULVNWRyBnbHlwaHMgY2FuIGJlIGRyYXduIGludG8gY2FudmFzLgorVGhlIHRlc3Qg
cGFzc2VzIGlmIHlvdSBzZWU6Cis8b2w+CisgICAgPGxpPkEgbWVkaXVtLXNpemVkIGJsYWNrIHNx
dWFyZSwgdGhlbjwvbGk+CisgICAgPGxpPkEgc2xpZ2h0bHkgc21hbGxlciBncmVlbiBzcXVhcmUs
IHRoZW48L2xpPgorICAgIDxsaT5BIG1lZGl1bS1zaXplZCBibGFjayBzcXVhcmUsIHRoZW48L2xp
PgorICAgIDxsaT5BIHNsaWdodGx5IHNtYWxsZXIgZ3JlZW4gc3F1YXJlPC9saT4KKzwvcD4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK3ZhciBjb250ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpLmdl
dENvbnRleHQoIjJkIik7Citjb250ZXh0LmZpbGxTdHlsZSA9ICJibGFjayI7Citjb250ZXh0LmZp
bGxSZWN0KDEwLCA2MCwgNTAsIDUwKTsKK2NvbnRleHQuZmlsbFN0eWxlID0gImdyZWVuIjsKK2Nv
bnRleHQuZmlsbFJlY3QoNjUsIDY1LCA0MCwgNDApOworY29udGV4dC5maWxsU3R5bGUgPSAiYmxh
Y2siOworY29udGV4dC5maWxsUmVjdCgxMTAsIDYwLCA1MCwgNTApOworY29udGV4dC5maWxsU3R5
bGUgPSAiZ3JlZW4iOworY29udGV4dC5maWxsUmVjdCgxNjUsIDY1LCA0MCwgNDApOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQv
b3RzdmctY2FudmFzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvb3RzdmctY2FudmFzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTEyZWJjY2MxYTYwYzllYTBhZDQ1ODI3OWYyMGJmMGY3NzcyZjhiOQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9vdHN2Zy1jYW52YXMuaHRt
bApAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5
bGU+CitAZm9udC1mYWNlIHsKKyAgICBmb250LWZhbWlseTogIldlYkZvbnQiOworICAgIHNyYzog
dXJsKCJyZXNvdXJjZXMvQWhlbS1TVkcudHRmIikgZm9ybWF0KCJ0cnVldHlwZSIpOworfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IE9U
LVNWRyBnbHlwaHMgY2FuIGJlIGRyYXduIGludG8gY2FudmFzLgorVGhlIHRlc3QgcGFzc2VzIGlm
IHlvdSBzZWU6Cis8b2w+CisgICAgPGxpPkEgbWVkaXVtLXNpemVkIGJsYWNrIHNxdWFyZSwgdGhl
bjwvbGk+CisgICAgPGxpPkEgc2xpZ2h0bHkgc21hbGxlciBncmVlbiBzcXVhcmUsIHRoZW48L2xp
PgorICAgIDxsaT5BIG1lZGl1bS1zaXplZCBibGFjayBzcXVhcmUsIHRoZW48L2xpPgorICAgIDxs
aT5BIHNsaWdodGx5IHNtYWxsZXIgZ3JlZW4gc3F1YXJlPC9saT4KKzwvcD4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK3Zh
ciBjb250ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpLmdldENvbnRleHQo
IjJkIik7CitbLi4uZG9jdW1lbnQuZm9udHNdWzBdLmxvYWQoKS50aGVuKGZ1bmN0aW9uKCkgewor
ICAgIGNvbnRleHQuZm9udCA9ICI1MHB4ICdXZWJGb250JyI7CisgICAgY29udGV4dC5maWxsVGV4
dCgiYkFiQSIsIDEwLCAxMDApOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="472294"
          type_id="1"
          status="+"
          setter="hi"
    />
    <flag name="commit-queue"
          id="472348"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>