<?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>137094</bug_id>
          
          <creation_ts>2014-09-24 17:25:28 -0700</creation_ts>
          <short_desc>[SVG -&gt; OTF Converter] Implement ligatures</short_desc>
          <delta_ts>2015-01-11 14:55:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>mitz</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037097</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-24 17:25:28 -0700</bug_when>
    <thetext>The following tests fail because of this (when the SVG -&gt; OTF converter is turned on):

svg/W3C-SVG-1.1/fonts-glyph-04-t.svg
svg/W3C-SVG-1.1/text-text-06-t.svg
svg/text/kerning.svg
svg/text/multichar-glyph.svg

Note that svg/W3C-SVG-1.1/fonts-glyph-04-t.svg claims that the elements should be searched in order. This should be verified with the spec before implementing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037859</commentid>
    <comment_count>1</comment_count>
      <attachid>238835</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 19:14:16 -0700</bug_when>
    <thetext>Created attachment 238835
Patch depends on https://bugs.webkit.org/show_bug.cgi?id=137092</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039598</commentid>
    <comment_count>2</comment_count>
      <attachid>239300</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-05 10:04:15 -0700</bug_when>
    <thetext>Created attachment 239300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047755</commentid>
    <comment_count>3</comment_count>
      <attachid>241332</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-11-10 22:06:02 -0800</bug_when>
    <thetext>Created attachment 241332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054617</commentid>
    <comment_count>4</comment_count>
      <attachid>241332</attachid>
    <who name="">mitz</who>
    <bug_when>2014-12-11 14:21:51 -0800</bug_when>
    <thetext>Comment on attachment 241332
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        (WebCore::getNextCodepoint): Convenience function around U16_NEXT().
&gt; +        (WebCore::SVGToOTFFontConverter::appendCMAPTable): Use getNextCodepoint().

This tells me that the change log entry is out of date

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:185
&gt; +    unsigned featureCountGSUB;

Member variable names should have the m_ prefix

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:233
&gt; +        bool skipCodepoint = false;

Not sure why you need this variable…

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:240
&gt; +                skipCodepoint = true;

…you can simply continue here.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:609
&gt; +        ASSERT(lhs.first.size() &gt; 1 &amp;&amp; rhs.first.size() &gt; 1);

This should be split into two assertions, though I don’t think it’s necessary to assert this here. The code that prevents shorter-than-2 vectors is just above.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:618
&gt; +            ASSERT(ligaturePair.first.size() &gt; 1);

Not sure this assertion is useful.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:621
&gt; +                segmentStart = i; // FIXME: This is not quite right for the first one

It’s not? What’s wrong with it?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:633
&gt; +    for (size_t i = 0; i &lt; overlappingFirstGlyphSegmentLengths.size(); ++i)
&gt; +        append16(0); // Placeholder for offset to LigatureSet table

Do we have a more efficient way to do this?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:641
&gt; +        for (size_t j = 0; j &lt; overlappingFirstGlyphSegmentLengths[i]; ++j)
&gt; +            append16(0); // Placeholder for offset to Ligature table

And this?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:650
&gt; +            ASSERT(ligaturePairIndex &lt; ligaturePairs.size());
&gt; +            auto&amp; ligaturePair = ligaturePairs[ligaturePairIndex];

I think this second line includes a release assert that’s equivalent to the assertion on the first line.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:873
&gt; +Vector&lt;Glyph, 1&gt; SVGToOTFFontConverter::lookupCodepoint(UChar32 codepoint) const

I think this function could have a better name. Maybe glyphsForCodepoint?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056187</commentid>
    <comment_count>5</comment_count>
      <attachid>243406</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-16 17:13:10 -0800</bug_when>
    <thetext>Created attachment 243406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056188</commentid>
    <comment_count>6</comment_count>
      <attachid>241332</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-16 17:14:11 -0800</bug_when>
    <thetext>Comment on attachment 241332
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        (WebCore::SVGToOTFFontConverter::appendCMAPTable): Use getNextCodepoint().
&gt; 
&gt; This tells me that the change log entry is out of date

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:185
&gt;&gt; +    unsigned featureCountGSUB;
&gt; 
&gt; Member variable names should have the m_ prefix

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:233
&gt;&gt; +        bool skipCodepoint = false;
&gt; 
&gt; Not sure why you need this variable…

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:240
&gt;&gt; +                skipCodepoint = true;
&gt; 
&gt; …you can simply continue here.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:609
&gt;&gt; +        ASSERT(lhs.first.size() &gt; 1 &amp;&amp; rhs.first.size() &gt; 1);
&gt; 
&gt; This should be split into two assertions, though I don’t think it’s necessary to assert this here. The code that prevents shorter-than-2 vectors is just above.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:618
&gt;&gt; +            ASSERT(ligaturePair.first.size() &gt; 1);
&gt; 
&gt; Not sure this assertion is useful.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:621
&gt;&gt; +                segmentStart = i; // FIXME: This is not quite right for the first one
&gt; 
&gt; It’s not? What’s wrong with it?

It is right. Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:633
&gt;&gt; +        append16(0); // Placeholder for offset to LigatureSet table
&gt; 
&gt; Do we have a more efficient way to do this?

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:641
&gt;&gt; +            append16(0); // Placeholder for offset to Ligature table
&gt; 
&gt; And this?

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:650
&gt;&gt; +            auto&amp; ligaturePair = ligaturePairs[ligaturePairIndex];
&gt; 
&gt; I think this second line includes a release assert that’s equivalent to the assertion on the first line.

I didn&apos;t realize that. Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:873
&gt;&gt; +Vector&lt;Glyph, 1&gt; SVGToOTFFontConverter::lookupCodepoint(UChar32 codepoint) const
&gt; 
&gt; I think this function could have a better name. Maybe glyphsForCodepoint?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056203</commentid>
    <comment_count>7</comment_count>
      <attachid>243412</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-12-16 17:40:02 -0800</bug_when>
    <thetext>Created attachment 243412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058332</commentid>
    <comment_count>8</comment_count>
      <attachid>243412</attachid>
    <who name="">mitz</who>
    <bug_when>2015-01-01 11:09:48 -0800</bug_when>
    <thetext>Comment on attachment 243412
Patch

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

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:111
&gt; +    void growByLength(size_t numberOfBytes)

“by length” doesn’t contribute much to this function’s name. If you think that “grow” is not sufficiently clear, then maybe this should be called “growResult”.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:174
&gt; +    Vector&lt;Glyph, 1&gt; glyphsForCodepoint(UChar32 codepoint) const;

No need to name the parameter here.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:242
&gt; +            codepoint = *iterator;
&gt; +            ++iterator;

codepoint = iterator++;

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:598
&gt; +        Vector&lt;Glyph&gt; ligatureGlyphs;

You (almost?) always append at least one element to this Vector. You should give it some inline capacity (of probably more than 1) to avoid many heap allocations. Then you’ll typically only allocate buffers on the heap for the few ligatures in the font when you create a LigaturePair. You can probably even further minimize heap allocations by giving the Vector in LigaturePair inline capacity, and you can avoid copying by “speculatively” appending to ligaturePairs and doing all the work in the appended element.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:613
&gt; +    if (!ligaturePairs.isEmpty()) {

If there are no ligatures, can we just avoid writing this subtable?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:620
&gt; +                segmentStart = i;

You forgot the update previousFirstGlyph here!

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:661
&gt; +    for (auto segmentLength : overlappingFirstGlyphSegmentLengths) {

Why use range-based iteration here and index-based iteration everywhere else?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:710
&gt; +        append16(m_featureCountGSUB + i); // Features indices
&gt; +    m_featureCountGSUB += featureCount;

Can just replace this with
    append16(m_featureCountGSUB++);

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:781
&gt; +        case 0:

Why does 4 come before 0? It’s kind of weird to write a for loop with a switch statement over the loop index variable.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:1155
&gt; +    Vector&lt;char&gt; charString;
&gt; +    writeCFFEncodedNumber(charString, m_unitsPerEm);
&gt; +    writeCFFEncodedNumber(charString, 0);
&gt; +    writeCFFEncodedNumber(charString, 0);
&gt; +    charString.append(rMoveTo);
&gt; +    charString.append(endChar);

Perhaps there should be a copy of this in a member variable so that you don’t have to create it every time this function is called?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:1169
&gt; +        UChar32 codepoint = *codePointsIterator;
&gt; +        ++codePointsIterator;

UChar32 codepoint = codePointsIterator++;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059242</commentid>
    <comment_count>9</comment_count>
      <attachid>243412</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-01-06 17:47:19 -0800</bug_when>
    <thetext>Comment on attachment 243412
Patch

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

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:111
&gt;&gt; +    void growByLength(size_t numberOfBytes)
&gt; 
&gt; “by length” doesn’t contribute much to this function’s name. If you think that “grow” is not sufficiently clear, then maybe this should be called “growResult”.

I want to be clear of the semantics of &quot;grow&quot;. In particular, you pass Vector::grow() the resulting size that you want the vector to be. However, for this function, I wanted to pass the delta. I think I can better solve this by making the function void grow(size_t delta).

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:174
&gt;&gt; +    Vector&lt;Glyph, 1&gt; glyphsForCodepoint(UChar32 codepoint) const;
&gt; 
&gt; No need to name the parameter here.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:242
&gt;&gt; +            ++iterator;
&gt; 
&gt; codepoint = iterator++;

WTF::StringView::CodePoints::Iterator doesn&apos;t have a suffix increment operator, and given the implementation of that class (in particular, the particular semantics that Darin and I discussed), I don&apos;t think adding one would be a good idea.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:598
&gt;&gt; +        Vector&lt;Glyph&gt; ligatureGlyphs;
&gt; 
&gt; You (almost?) always append at least one element to this Vector. You should give it some inline capacity (of probably more than 1) to avoid many heap allocations. Then you’ll typically only allocate buffers on the heap for the few ligatures in the font when you create a LigaturePair. You can probably even further minimize heap allocations by giving the Vector in LigaturePair inline capacity, and you can avoid copying by “speculatively” appending to ligaturePairs and doing all the work in the appended element.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:613
&gt;&gt; +    if (!ligaturePairs.isEmpty()) {
&gt; 
&gt; If there are no ligatures, can we just avoid writing this subtable?

I don&apos;t think that&apos;s worth it. Doing so would both introduce additional complexity to SVGToOTFFontConverter::appendGSUBTable() which is already too complex, as well as splitting ligature handling into two places - a prepass to determine if we have ligatures (and probably build a data structure) and a secondary pass to iterate over the data structure and write the table. I don&apos;t think those costs justify this idea.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:620
&gt;&gt; +                segmentStart = i;
&gt; 
&gt; You forgot the update previousFirstGlyph here!

Oh my. It&apos;s a wonder the tests didn&apos;t catch this. I&apos;ll make sure I add a test for this.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:661
&gt;&gt; +    for (auto segmentLength : overlappingFirstGlyphSegmentLengths) {
&gt; 
&gt; Why use range-based iteration here and index-based iteration everywhere else?

The other loops all use their loop variables.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:710
&gt;&gt; +    m_featureCountGSUB += featureCount;
&gt; 
&gt; Can just replace this with
&gt;     append16(m_featureCountGSUB++);

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:781
&gt;&gt; +        case 0:
&gt; 
&gt; Why does 4 come before 0? It’s kind of weird to write a for loop with a switch statement over the loop index variable.

I wanted to make it clear that I&apos;m populating the LookupList with each feature. I think it&apos;s better to switch for a particular output value than have a bunch of duplicated code where it&apos;s not very obvious what the intention of the code is.

Do you think maybe I should pull out this switch statement into a helper function?

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:1155
&gt;&gt; +    charString.append(endChar);
&gt; 
&gt; Perhaps there should be a copy of this in a member variable so that you don’t have to create it every time this function is called?

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:1169
&gt;&gt; +        ++codePointsIterator;
&gt; 
&gt; UChar32 codepoint = codePointsIterator++;

See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059243</commentid>
    <comment_count>10</comment_count>
      <attachid>244114</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-01-06 17:52:47 -0800</bug_when>
    <thetext>Created attachment 244114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060488</commentid>
    <comment_count>11</comment_count>
      <attachid>244114</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-11 14:55:43 -0800</bug_when>
    <thetext>Comment on attachment 244114
Patch

Clearing flags on attachment: 244114

Committed r178249: &lt;http://trac.webkit.org/changeset/178249&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060489</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-11 14:55:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238835</attachid>
            <date>2014-09-28 19:14:16 -0700</date>
            <delta_ts>2014-10-05 10:04:09 -0700</delta_ts>
            <desc>Patch depends on https://bugs.webkit.org/show_bug.cgi?id=137092</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23018</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGIxZjIxNGYyNjM2NmFmMThiYTFkMjdhNjYyN2I1OTM0NzkzZmJmYjQKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTdW4gU2VwIDI4
IDE5OjA4OjQyIDIwMTQgLTA3MDAKCiAgICBbU1ZHIC0+IE9URiBDb252ZXJ0ZXJdIEltcGxlbWVu
dCBsaWdhdHVyZXMKICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzcwOTQKICAgIAogICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAgIFVzZSB0
aGUgImxpZ2EiIE9wZW5UeXBlIGZlYXR1cmUgdG8gaW1wbGVtZW50IGxpZ2F0dXJlcyBpbnNpZGUg
dGhlIEdTVUIgdGFibGUuCiAgICAKICAgIFRlc3RzOiBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5
cGgtMDQtdC5zdmcKICAgICAgICAgICBzdmcvVzNDLVNWRy0xLjEvdGV4dC10ZXh0LTA2LXQuc3Zn
CiAgICAgICAgICAgc3ZnL3RleHQva2VybmluZy5zdmcKICAgICAgICAgICBzdmcvdGV4dC9tdWx0
aWNoYXItZ2x5cGguc3ZnCiAgICAKICAgICogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3Bw
OgogICAgKFdlYkNvcmU6OmdldE5leHRDb2RlcG9pbnQpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiBh
cm91bmQgVTE2X05FWFQoKS4KICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZENNQVBUYWJsZSk6IFVzZSBnZXROZXh0Q29kZXBvaW50KCkuCiAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjpnZXRGaXJzdEdseXBoKTogQm91bmRzIGNoZWNraW5nIG9uIGEg
dmVjdG9yIG9mIGdseXBocy4KICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZExpZ2F0dXJlU3VidGFibGUpOgogICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kU2NyaXB0U3VidGFibGUpOiBVc2VkIGluc2lkZSBhcHBlbmRHU1VCVGFibGUuCiAg
ICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUpOiBVcGRh
dGluZyBmb3IgbGlnYXR1cmVzLgogICAgKFdlYkNvcmU6OmNvZGVwb2ludFRvU3RyaW5nKTogV3Jh
cHBlciBhcm91bmQgVTE2X0FQUEVORCgpLgogICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6bG9va3VwQ29kZXBvaW50KTogQ2FsbCBjb2RlcG9pbnRUb1N0cmluZyBhbmQgbG9vayBp
biBpbnRlcm5hbCBtYXAuCiAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRD
b2RlcG9pbnRSYW5nZXMpOiBVc2UgbG9va3VwQ29kZXBvaW50KCkuCiAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRFbXB0eUdseXBoKTogQ29tbW9uIGNvZGUgcHVsbGVk
IG91dCBpbnRvIGEgZnVuY3Rpb24uCiAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRMaWdhdHVyZUdseXBocyk6IExpZ2F0dXJlcyBhcmUgaW1wbGVtZW50ZWQgYXMgbWFw
cGluZyBhIHNlcXVlbmNlCiAgICBvZiBnbHlwaHMgdG8gYW5vdGhlciBnbHlwaCBpbnNpZGUgT3Bl
blR5cGUuIEhvd2V2ZXIsIFNWRyBtb2RlbHMgbGlnYXR1cmVzIGFzIG1hcHBpbmcgYSBzZXF1ZW5j
ZSBvZgogICAgY29kZXBvaW50cyB0byBhIGdseXBoLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGR1bW15
IGdseXBocyBmb3IgYWxsIHRoZSBjb2RlcG9pbnRzIHRoYXQgd2UgZG9uJ3QgaGF2ZQogICAgZ2x5
cGhzIGZvciBhbmQgYXBwZW5kcyB0aGVtIHRvIG1fZ2x5cGhzLgogICAgKFdlYkNvcmU6OlNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseSk6IFVz
ZSBnZXROZXh0Q29kZXBvaW50KCkuCiAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVy
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXIpOiBVc2UgYXBwZW5kRW1wdHlHbHlwaCgpIGFuZCBjYWxs
CiAgICBhcHBlbmRMaWdhdHVyZUdseXBocygpLgogICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kSEVBRFRhYmxlKTogRGVsZXRlZC4KICAgIChXZWJDb3JlOjpTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludHMpOiBEZWxldGVkLgogICAgKFdlYkNvcmU6OlNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YWRkR2x5cGhOYW1lcyk6IERlbGV0ZWQuCiAgICAoV2ViQ29y
ZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUpOiBEZWxldGVkLgog
ICAgKFdlYkNvcmU6OkNGRkJ1aWxkZXI6OnVwZGF0ZUZvckNvbnN0aXR1ZW50UG9pbnQpOiBEZWxl
dGVkLgogICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29udmVydFNWR1RvT1RG
Rm9udCk6IERlbGV0ZWQuCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFiODJlZDUuLjRjYzhmZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSw0NCBAQAorMjAxNC0wOS0yOCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtTVkcgLT4gT1RGIENvbnZlcnRlcl0gSW1wbGVt
ZW50IGxpZ2F0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM3MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVXNlIHRoZSAibGlnYSIgT3BlblR5cGUgZmVhdHVyZSB0byBpbXBsZW1lbnQgbGlnYXR1
cmVzIGluc2lkZSB0aGUgR1NVQiB0YWJsZS4KKworICAgICAgICBUZXN0czogc3ZnL1czQy1TVkct
MS4xL2ZvbnRzLWdseXBoLTA0LXQuc3ZnCisgICAgICAgICAgICAgICBzdmcvVzNDLVNWRy0xLjEv
dGV4dC10ZXh0LTA2LXQuc3ZnCisgICAgICAgICAgICAgICBzdmcvdGV4dC9rZXJuaW5nLnN2Zwor
ICAgICAgICAgICAgICAgc3ZnL3RleHQvbXVsdGljaGFyLWdseXBoLnN2ZworCisgICAgICAgICog
c3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV4
dENvZGVwb2ludCk6IENvbnZlbmllbmNlIGZ1bmN0aW9uIGFyb3VuZCBVMTZfTkVYVCgpLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUpOiBV
c2UgZ2V0TmV4dENvZGVwb2ludCgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29u
dmVydGVyOjpnZXRGaXJzdEdseXBoKTogQm91bmRzIGNoZWNraW5nIG9uIGEgdmVjdG9yIG9mIGds
eXBocy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTGln
YXR1cmVTdWJ0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZFNjcmlwdFN1YnRhYmxlKTogVXNlZCBpbnNpZGUgYXBwZW5kR1NVQlRhYmxlLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUpOiBV
cGRhdGluZyBmb3IgbGlnYXR1cmVzLgorICAgICAgICAoV2ViQ29yZTo6Y29kZXBvaW50VG9TdHJp
bmcpOiBXcmFwcGVyIGFyb3VuZCBVMTZfQVBQRU5EKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdU
b09URkZvbnRDb252ZXJ0ZXI6Omxvb2t1cENvZGVwb2ludCk6IENhbGwgY29kZXBvaW50VG9TdHJp
bmcgYW5kIGxvb2sgaW4gaW50ZXJuYWwgbWFwLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZG
b250Q29udmVydGVyOjphZGRDb2RlcG9pbnRSYW5nZXMpOiBVc2UgbG9va3VwQ29kZXBvaW50KCku
CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEVtcHR5R2x5
cGgpOiBDb21tb24gY29kZSBwdWxsZWQgb3V0IGludG8gYSBmdW5jdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTGlnYXR1cmVHbHlwaHMpOiBMaWdh
dHVyZXMgYXJlIGltcGxlbWVudGVkIGFzIG1hcHBpbmcgYSBzZXF1ZW5jZQorICAgICAgICBvZiBn
bHlwaHMgdG8gYW5vdGhlciBnbHlwaCBpbnNpZGUgT3BlblR5cGUuIEhvd2V2ZXIsIFNWRyBtb2Rl
bHMgbGlnYXR1cmVzIGFzIG1hcHBpbmcgYSBzZXF1ZW5jZSBvZgorICAgICAgICBjb2RlcG9pbnRz
IHRvIGEgZ2x5cGguIFRoaXMgZnVuY3Rpb24gbWFrZXMgZHVtbXkgZ2x5cGhzIGZvciBhbGwgdGhl
IGNvZGVwb2ludHMgdGhhdCB3ZSBkb24ndCBoYXZlCisgICAgICAgIGdseXBocyBmb3IgYW5kIGFw
cGVuZHMgdGhlbSB0byBtX2dseXBocy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseSk6IFVzZSBnZXROZXh0
Q29kZXBvaW50KCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNW
R1RvT1RGRm9udENvbnZlcnRlcik6IFVzZSBhcHBlbmRFbXB0eUdseXBoKCkgYW5kIGNhbGwKKyAg
ICAgICAgYXBwZW5kTGlnYXR1cmVHbHlwaHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6YXBwZW5kSEVBRFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEdseXBoTmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJO
U3VidGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0ZGQnVpbGRlcjo6dXBkYXRl
Rm9yQ29uc3RpdHVlbnRQb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmNvbnZlcnRTVkdUb09URkZvbnQpOiBEZWxldGVkLgogCiAyMDE0LTA5
LTI4ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAg
W1NWRyAtPiBPVEYgQ29udmVydGVyXSBBcmFiaWMgZm9ybXMgYXJlIG5vdCBzdWJzdGl0dXRlZCBj
b3JyZWN0bHkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNzA5MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5j
cHAKaW5kZXggMzJjMzUxOC4uOTAyMDhmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
b09URkZvbnRDb252ZXJzaW9uLmNwcApAQCAtMTU2LDYgKzE1Niw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhcHBlbmRDRkZUYWJsZSgpOwogICAgIHZvaWQgYXBwZW5kVk9SR1RhYmxlKCk7CiAKKyAg
ICB2b2lkIGFwcGVuZEVtcHR5R2x5cGgoQ29kZXBvaW50cyBjb2RlcG9pbnRzKTsKKyAgICB2b2lk
IGFwcGVuZExpZ2F0dXJlR2x5cGhzKCk7CiAgICAgc3RhdGljIGJvb2wgY29tcGFyZUNvZGVwb2lu
dHNMZXhpY29ncmFwaGljYWxseShjb25zdCBHbHlwaERhdGEmLCBjb25zdCBHbHlwaERhdGEmKTsK
IAogICAgIHZvaWQgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcoY29uc3QgU3RyaW5nJik7CkBAIC0xNzEs
NyArMTczLDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgc2l6
ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2Vy
bmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwogCisgICAgdm9pZCBhcHBlbmRM
aWdhdHVyZVN1YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKICAgICB2b2lk
IGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9j
YXRpb24sIGNvbnN0IFN0cmluZyYgYXJhYmljRm9ybSk7CisgICAgdm9pZCBhcHBlbmRTY3JpcHRT
dWJ0YWJsZSh1bnNpZ25lZCBmZWF0dXJlQ291bnQpOworCisgICAgVmVjdG9yPEdseXBoLCAxPiBs
b29rdXBDb2RlcG9pbnQoVUNoYXIzMiBjb2RlcG9pbnQpIGNvbnN0OworICAgIEdseXBoIGdldEZp
cnN0R2x5cGgoVmVjdG9yPEdseXBoLCAxPiB2LCBVQ2hhcjMyIGNvZGVwb2ludCkgY29uc3Q7CiAK
ICAgICBWZWN0b3I8R2x5cGhEYXRhPiBtX2dseXBoczsKICAgICBIYXNoTWFwPFN0cmluZywgR2x5
cGg+IG1fZ2x5cGhOYW1lVG9JbmRleE1hcDsgLy8gU1ZHIDEuMTogIkl0IGlzIHJlY29tbWVuZGVk
IHRoYXQgZ2x5cGggbmFtZXMgYmUgdW5pcXVlIHdpdGhpbiBhIGZvbnQuIgpAQCAtMTg2LDYgKzE5
Myw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9hZHZhbmNlSGVpZ2h0TWF4OwogICAgIGZsb2F0
IG1fbWluUmlnaHRTaWRlQmVhcmluZzsKICAgICB1bnNpZ25lZCBtX3VuaXRzUGVyRW07CisgICAg
dW5zaWduZWQgZmVhdHVyZUNvdW50R1NVQjsKICAgICBpbnQgbV90YWJsZXNBcHBlbmRlZENvdW50
OwogICAgIGNoYXIgbV93ZWlnaHQ7CiAgICAgYm9vbCBtX2l0YWxpYzsKQEAgLTIwNyw2ICsyMTUs
MTYgQEAgc3RhdGljIHVpbnQxNl90IGludGVncmFsTG9nMih1aW50MTZfdCB4KSB7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIFVDaGFyMzIgZ2V0TmV4dENvZGVwb2ludChjb25zdCBT
dHJpbmcmIHMsIHVuc2lnbmVkJiBpbmRleCkgeworICAgIEFTU0VSVChpbmRleCA8IHMubGVuZ3Ro
KCkpOworICAgIFVDaGFyMzIgcmVzdWx0OworICAgIGlmIChzLmlzOEJpdCgpKQorICAgICAgICBy
ZXN1bHQgPSBzW2luZGV4KytdOworICAgIGVsc2UKKyAgICAgICAgVTE2X05FWFQocy5jaGFyYWN0
ZXJzMTYoKSwgaW5kZXgsIHMubGVuZ3RoKCksIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSgpCiB7CiAg
ICAgYXV0byBzdGFydGluZ09mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKQEAgLTIyNiwyNSArMjQ0
LDI1IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUoKQogICAg
IGFwcGVuZDMyKDApOyAvLyBQbGFjZWhvbGRlciBmb3Igbkdyb3VwcwogCiAgICAgdWludDE2X3Qg
bkdyb3VwcyA9IDA7CiAgICAgVUNoYXIzMiBwcmV2aW91c0NvZGVwb2ludCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8VUNoYXIzMj46Om1heCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9n
bHlwaHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgZ2x5cGggPSBtX2dseXBoc1tpXTsK
ICAgICAgICAgdW5zaWduZWQgY29kZXBvaW50U2l6ZSA9IDA7CiAgICAgICAgIFVDaGFyMzIgY29k
ZXBvaW50OwogICAgICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5pc051bGwoKSkKICAgICAgICAg
ICAgIGNvZGVwb2ludCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKGdseXBoLmNvZGVwb2ludHMuaXM4
Qml0KCkpCi0gICAgICAgICAgICBjb2RlcG9pbnQgPSBnbHlwaC5jb2RlcG9pbnRzW2NvZGVwb2lu
dFNpemUrK107CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFUxNl9ORVhUKGdseXBoLmNvZGVw
b2ludHMuY2hhcmFjdGVyczE2KCksIGNvZGVwb2ludFNpemUsIGdseXBoLmNvZGVwb2ludHMubGVu
Z3RoKCksIGNvZGVwb2ludCk7CisgICAgICAgICAgICBjb2RlcG9pbnQgPSBnZXROZXh0Q29kZXBv
aW50KGdseXBoLmNvZGVwb2ludHMsIGNvZGVwb2ludFNpemUpOwogCiAgICAgICAgIC8vIERvbid0
IG1hcCBsaWdhdHVyZXMgaGVyZS4KICAgICAgICAgaWYgKGdseXBoLmNvZGVwb2ludHMubGVuZ3Ro
KCkgPiBjb2RlcG9pbnRTaXplIHx8IGNvZGVwb2ludCA9PSBwcmV2aW91c0NvZGVwb2ludCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGFwcGVuZDMyKGNvZGVwb2ludCk7IC8vIHN0
YXJ0Q2hhckNvZGUKICAgICAgICAgYXBwZW5kMzIoY29kZXBvaW50KTsgLy8gZW5kQ2hhckNvZGUK
ICAgICAgICAgYXBwZW5kMzIoaSk7IC8vIHN0YXJ0R2x5cGhDb2RlCiAgICAgICAgICsrbkdyb3Vw
czsKICAgICAgICAgcHJldmlvdXNDb2RlcG9pbnQgPSBjb2RlcG9pbnQ7CiAgICAgfQogICAgIG92
ZXJ3cml0ZTMyKHN1YnRhYmxlTG9jYXRpb24gKyA0LCBtX3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJs
ZUxvY2F0aW9uKTsKICAgICBvdmVyd3JpdGUzMihzdWJ0YWJsZUxvY2F0aW9uICsgMTIsIG5Hcm91
cHMpOwpAQCAtNTc3LDYgKzU5NSw3MSBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kQ0ZGVGFibGUoKQogICAgICAgICBtX3Jlc3VsdC5hcHBlbmRWZWN0b3IoZ2x5cGguY2hhclN0
cmluZyk7CiB9CiAKK0dseXBoIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6Z2V0Rmlyc3RHbHlwaChW
ZWN0b3I8R2x5cGgsIDE+IHYsIFVDaGFyMzIgY29kZXBvaW50KSBjb25zdAoreworI2lmIEFTU0VS
VF9ESVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTShjb2RlcG9pbnQpOworI2VuZGlmCisgICAgQVNT
RVJUKHYuc2l6ZSgpKTsKKyAgICBpZiAoIXYuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICB1bnNpZ25lZCBpID0gMDsKKyAgICBBU1NFUlRfVU5VU0VEKGksIGNvZGVwb2ludCA9PSBnZXRO
ZXh0Q29kZXBvaW50KG1fZ2x5cGhzW3ZbMF1dLmNvZGVwb2ludHMsIGkpKTsKKyAgICByZXR1cm4g
dlswXTsKK30KKwordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZExpZ2F0dXJlU3Vi
dGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pCit7CisgICAgdHlwZWRlZiBzdGQ6
OnBhaXI8VmVjdG9yPEdseXBoPiwgR2x5cGg+IExpZ2F0dXJlUGFpcjsKKyAgICBWZWN0b3I8TGln
YXR1cmVQYWlyPiBsaWdhdHVyZVBhaXJzOworICAgIGZvciAoR2x5cGggZ2x5cGhJbmRleCA9IDA7
IGdseXBoSW5kZXggPCBtX2dseXBocy5zaXplKCk7ICsrZ2x5cGhJbmRleCkgeworICAgICAgICBh
dXRvJiBnbHlwaCA9IG1fZ2x5cGhzW2dseXBoSW5kZXhdOworICAgICAgICBpZiAoZ2x5cGguY29k
ZXBvaW50cy5pc051bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICAgICAgVUNoYXIzMiBjb2RlcG9pbnQgPSBnZXROZXh0Q29kZXBvaW50KGds
eXBoLmNvZGVwb2ludHMsIGkpOworICAgICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5sZW5ndGgo
KSA+IGkpIHsKKyAgICAgICAgICAgIGxpZ2F0dXJlUGFpcnMuYXBwZW5kKExpZ2F0dXJlUGFpcihW
ZWN0b3I8R2x5cGg+KCksIGdseXBoSW5kZXgpKTsKKyAgICAgICAgICAgIGxpZ2F0dXJlUGFpcnNb
bGlnYXR1cmVQYWlycy5zaXplKCkgLSAxXS5maXJzdC5hcHBlbmQoZ2V0Rmlyc3RHbHlwaChsb29r
dXBDb2RlcG9pbnQoY29kZXBvaW50KSwgY29kZXBvaW50KSk7CisgICAgICAgICAgICB3aGlsZSAo
aSA8IGdseXBoLmNvZGVwb2ludHMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjb2RlcG9p
bnQgPSBnZXROZXh0Q29kZXBvaW50KGdseXBoLmNvZGVwb2ludHMsIGkpOworICAgICAgICAgICAg
ICAgIGxpZ2F0dXJlUGFpcnNbbGlnYXR1cmVQYWlycy5zaXplKCkgLSAxXS5maXJzdC5hcHBlbmQo
Z2V0Rmlyc3RHbHlwaChsb29rdXBDb2RlcG9pbnQoY29kZXBvaW50KSwgY29kZXBvaW50KSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxpZ2F0dXJlUGFpcnMuc2l6
ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICBsaWdh
dHVyZVBhaXJzLmNsZWFyKCk7CisKKyAgICBvdmVyd3JpdGUxNihzdWJ0YWJsZVJlY29yZExvY2F0
aW9uICsgNiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbik7CisgICAg
YXV0byBzdWJ0YWJsZUxvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVuZDE2KDEp
OyAvLyBGb3JtYXQgMQorICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0
IHRvIGNvdmVyYWdlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3Vic3RpdHV0aW9u
IHRhYmxlCisgICAgYXBwZW5kMTYoMSk7IC8vIE51bWJlciBvZiBMaWdhdHVyZVNldCB0YWJsZXMK
KyAgICBhcHBlbmQxNihtX3Jlc3VsdC5zaXplKCkgKyAyIC0gc3VidGFibGVMb2NhdGlvbik7IC8v
IE9mZnNldCB0byBMaWdhdHVyZVNldCB0YWJsZQorCisgICAgYXV0byBsaWdhdHVyZVNldFRhYmxl
TG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7CisgICAgYXBwZW5kMTYobGlnYXR1cmVQYWlycy5z
aXplKCkpOworICAgIGZvciAoYXV0byYgaSA6IGxpZ2F0dXJlUGFpcnMpIHsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGkpOworICAgICAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9m
ZnNldCB0byBsaWdhdHVyZSB0YWJsZSBmcm9tIGJlZ2lubmluZyBvZiBsaWdhdHVyZSBzZXQgdGFi
bGUKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaWdhdHVyZVBhaXJzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGF1dG8mIGxpZ2F0dXJlID0gbGlnYXR1cmVQYWlyc1tpXTsKKyAg
ICAgICAgb3ZlcndyaXRlMTYobGlnYXR1cmVTZXRUYWJsZUxvY2F0aW9uICsgMiArIDIgKiBpLCBt
X3Jlc3VsdC5zaXplKCkgLSBsaWdhdHVyZVNldFRhYmxlTG9jYXRpb24pOworICAgICAgICBhcHBl
bmQxNihsaWdhdHVyZS5zZWNvbmQpOyAvLyBHbHlwaCB0byBzdWJzdGl0dXRlCisgICAgICAgIGFw
cGVuZDE2KGxpZ2F0dXJlLmZpcnN0LnNpemUoKSAtIDEpOyAvLyBDb21wb25lbnQgY291bnQKKyAg
ICAgICAgZm9yIChzaXplX3QgZ2x5cGggPSAxOyBnbHlwaCA8IGxpZ2F0dXJlLmZpcnN0LnNpemUo
KTsgKytnbHlwaCkKKyAgICAgICAgICAgIGFwcGVuZDE2KGxpZ2F0dXJlLmZpcnN0W2dseXBoXSk7
CisgICAgfQorCisgICAgLy8gQ292ZXJhZ2UgdGFibGUKKyAgICBvdmVyd3JpdGUxNihzdWJ0YWJs
ZUxvY2F0aW9uICsgMiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVMb2NhdGlvbik7CisgICAg
YXBwZW5kMTYoMSk7IC8vIENvdmVyYWdlRm9ybWF0CisgICAgYXBwZW5kMTYobGlnYXR1cmVQYWly
cy5zaXplKCkpOyAvLyBHbHlwaENvdW50CisgICAgZm9yIChhdXRvJiBsaWdhdHVyZSA6IGxpZ2F0
dXJlUGFpcnMpCisgICAgICAgIGFwcGVuZDE2KGxpZ2F0dXJlLmZpcnN0WzBdKTsKK30KKwogdm9p
ZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUo
c2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24sIGNvbnN0IFN0cmluZyYgYXJhYmljRm9ybSkK
IHsKICAgICBWZWN0b3I8c3RkOjpwYWlyPEdseXBoLCBHbHlwaD4+IGFyYWJpY0ZpbmFsUmVwbGFj
ZW1lbnRzOwpAQCAtNjA1LDYgKzY4OCwyMiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcgogICAg
ICAgICBhcHBlbmQxNihwYWlyLmZpcnN0KTsKIH0KIAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZFNjcmlwdFN1YnRhYmxlKHVuc2lnbmVkIGZlYXR1cmVDb3VudCkKK3sKKyAgICBh
dXRvIGRmbHRTY3JpcHRUYWJsZUxvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVu
ZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIGRlZmF1bHQgbGFuZ3VhZ2Ugc3lz
dGVtIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0IHRhYmxlCisgICAgYXBw
ZW5kMTYoMCk7IC8vIE51bWJlciBvZiBmb2xsb3dpbmcgbGFuZ3VhZ2Ugc3lzdGVtIHRhYmxlcwor
CisgICAgLy8gTGFuZ1N5cyB0YWJsZQorICAgIG92ZXJ3cml0ZTE2KGRmbHRTY3JpcHRUYWJsZUxv
Y2F0aW9uLCBtX3Jlc3VsdC5zaXplKCkgLSBkZmx0U2NyaXB0VGFibGVMb2NhdGlvbik7CisgICAg
YXBwZW5kMTYoMCk7IC8vIExvb2t1cE9yZGVyICI9IE5VTEwgLi4uIHJlc2VydmVkIgorICAgIGFw
cGVuZDE2KDB4RkZGRik7IC8vIE5vIGZlYXR1cmVzIGFyZSByZXF1aXJlZAorICAgIGFwcGVuZDE2
KGZlYXR1cmVDb3VudCk7IC8vIE51bWJlciBvZiBGZWF0dXJlSW5kZXggdmFsdWVzCisgICAgZm9y
ICh1aW50MTZfdCBpID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytpKQorICAgICAgICBhcHBlbmQx
NihmZWF0dXJlQ291bnRHU1VCICsgaSk7IC8vIEZlYXR1cmVzIGluZGljZXMKKyAgICBmZWF0dXJl
Q291bnRHU1VCICs9IGZlYXR1cmVDb3VudDsKK30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiB7CiAgICAgYXV0byB0YWJsZUxvY2F0aW9uID0gbV9yZXN1
bHQuc2l6ZSgpOwpAQCAtNjIwLDIyICs3MTksMTggQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAKICAgICAvLyBTY3JpcHRMaXN0CiAgICAgYXV0byBzY3Jp
cHRMaXN0TG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7Ci0gICAgYXBwZW5kMTYoMSk7IC8vIE51
bWJlciBvZiBTY3JpcHRSZWNvcmRzCisgICAgYXBwZW5kMTYoMik7IC8vIE51bWJlciBvZiBTY3Jp
cHRSZWNvcmRzCisgICAgYXBwZW5kNEJ5dGVDb2RlKCJERkxUIik7CisgICAgYXBwZW5kMTYoMCk7
IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgb2YgU2NyaXB0IHRhYmxlLCByZWxhdGl2ZSB0byBi
ZWdpbm5pbmcgb2YgU2NyaXB0TGlzdAogICAgIGFwcGVuZDRCeXRlQ29kZSgiYXJhYiIpOwotICAg
IGFwcGVuZDE2KG1fcmVzdWx0LnNpemUoKSArIDIgLSBzY3JpcHRMaXN0TG9jYXRpb24pOyAvLyBP
ZmZzZXQgb2YgU2NyaXB0IHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0TGlz
dAorICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIFNjcmlwdCB0
YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlwdExpc3QKIAotICAgIGF1dG8gc2Ny
aXB0VGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKLSAgICBhdXRvIHNpemVPZkVtcHR5
U2NyaXB0VGFibGUgPSA0OwotICAgIGFwcGVuZDE2KHNpemVPZkVtcHR5U2NyaXB0VGFibGUpOyAv
LyBPZmZzZXQgb2YgZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0gdGFibGUsIHJlbGF0aXZlIHRvIGJl
Z2lubmluZyBvZiBTY3JpcHQgdGFibGUKLSAgICBhcHBlbmQxNigwKTsgLy8gTnVtYmVyIG9mIGZv
bGxvd2luZyBsYW5ndWFnZSBzeXN0ZW0gdGFibGVzCi0gICAgQVNTRVJUX1VOVVNFRChzY3JpcHRU
YWJsZUxvY2F0aW9uLCBzY3JpcHRUYWJsZUxvY2F0aW9uICsgc2l6ZU9mRW1wdHlTY3JpcHRUYWJs
ZSA9PSBtX3Jlc3VsdC5zaXplKCkpOworICAgIG92ZXJ3cml0ZTE2KHNjcmlwdExpc3RMb2NhdGlv
biArIDYsIG1fcmVzdWx0LnNpemUoKSAtIHNjcmlwdExpc3RMb2NhdGlvbik7CisgICAgYXBwZW5k
U2NyaXB0U3VidGFibGUoMSk7CisgICAgb3ZlcndyaXRlMTYoc2NyaXB0TGlzdExvY2F0aW9uICsg
MTIsIG1fcmVzdWx0LnNpemUoKSAtIHNjcmlwdExpc3RMb2NhdGlvbik7CisgICAgYXBwZW5kU2Ny
aXB0U3VidGFibGUoNCk7CiAKLSAgICBhcHBlbmQxNigwKTsgLy8gTG9va3VwT3JkZXIgIj0gTlVM
TCAuLi4gcmVzZXJ2ZWQiCi0gICAgYXBwZW5kMTYoMCk7IC8vIEZpcnN0IGZlYXR1cmUgaXMgcmVx
dWlyZWQKLSAgICB1aW50MTZfdCBmZWF0dXJlQ291bnQgPSA0OwotICAgIGFwcGVuZDE2KDQpOyAv
LyBGZWF0dXJlQ291bnQKLSAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50
OyArK2kpCi0gICAgICAgIGFwcGVuZDE2KGkpOyAvLyBJbmRleCBvZiBvdXIgZmVhdHVyZSBpbnRv
IHRoZSBGZWF0dXJlTGlzdAorICAgIHVuc2lnbmVkIGZlYXR1cmVDb3VudCA9IDU7CiAKICAgICAv
LyBGZWF0dXJlTGlzdAogICAgIG92ZXJ3cml0ZTE2KGZlYXR1cmVMaXN0T2Zmc2V0TG9jYXRpb24s
IG1fcmVzdWx0LnNpemUoKSAtIHRhYmxlTG9jYXRpb24pOwpAQCAtNjQzLDE0ICs3MzgsMTYgQEAg
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAgICAgc2l6ZV90
IGZlYXR1cmVMaXN0U2l6ZSA9IDIgKyA2ICogZmVhdHVyZUNvdW50OwogICAgIHNpemVfdCBmZWF0
dXJlVGFibGVTaXplID0gNjsKICAgICBhcHBlbmQxNihmZWF0dXJlQ291bnQpOyAvLyBGZWF0dXJl
Q291bnQKLSAgICBhcHBlbmQ0Qnl0ZUNvZGUoImZpbmEiKTsKKyAgICBhcHBlbmQ0Qnl0ZUNvZGUo
ImxpZ2EiKTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXpl
ICogMCk7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcg
b2YgRmVhdHVyZUxpc3QgdGFibGUKLSAgICBhcHBlbmQ0Qnl0ZUNvZGUoIm1lZGkiKTsKKyAgICBh
cHBlbmQ0Qnl0ZUNvZGUoImZpbmEiKTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBm
ZWF0dXJlVGFibGVTaXplICogMSk7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2
ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKLSAgICBhcHBlbmQ0Qnl0ZUNvZGUo
ImluaXQiKTsKKyAgICBhcHBlbmQ0Qnl0ZUNvZGUoIm1lZGkiKTsKICAgICBhcHBlbmQxNihmZWF0
dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMik7IC8vIE9mZnNldCBvZiBmZWF0dXJl
IHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKLSAgICBh
cHBlbmQ0Qnl0ZUNvZGUoInJsaWciKTsKKyAgICBhcHBlbmQ0Qnl0ZUNvZGUoImluaXQiKTsKICAg
ICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMyk7IC8vIE9m
ZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxp
c3QgdGFibGUKKyAgICBhcHBlbmQ0Qnl0ZUNvZGUoInJsaWciKTsKKyAgICBhcHBlbmQxNihmZWF0
dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogNCk7IC8vIE9mZnNldCBvZiBmZWF0dXJl
IHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKICAgICBB
U1NFUlRfVU5VU0VEKGZlYXR1cmVMaXN0TG9jYXRpb24sIGZlYXR1cmVMaXN0TG9jYXRpb24gKyBm
ZWF0dXJlTGlzdFNpemUgPT0gbV9yZXN1bHQuc2l6ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewpAQCAtNjcxLDE4ICs3NjgsMjkgQEAgdm9p
ZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytpKSB7CiAgICAgICAgIHN1YnRhYmxlUmVj
b3JkTG9jYXRpb25zW2ldID0gbV9yZXN1bHQuc2l6ZSgpOwogICAgICAgICBvdmVyd3JpdGUxNihs
b29rdXBMaXN0TG9jYXRpb24gKyAyICsgMiAqIGksIG1fcmVzdWx0LnNpemUoKSAtIGxvb2t1cExp
c3RMb2NhdGlvbik7Ci0gICAgICAgIGFwcGVuZDE2KGkgPT0gMyA/IDMgOiAxKTsgLy8gVHlwZSAx
OiAiUmVwbGFjZSBvbmUgZ2x5cGggd2l0aCBvbmUgZ2x5cGgiIC8gVHlwZSAzOiAiUmVwbGFjZSBv
bmUgZ2x5cGggd2l0aCBvbmUgb2YgbWFueSBnbHlwaHMiCisgICAgICAgIHN3aXRjaCAoaSkgewor
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBhcHBlbmQxNigzKTsgLy8gVHlwZSAzOiAiUmVw
bGFjZSBvbmUgZ2x5cGggd2l0aCBvbmUgb2YgbWFueSBnbHlwaHMiCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgYXBwZW5kMTYoNCk7IC8vIFR5cGUgNDog
IlJlcGxhY2UgbXVsdGlwbGUgZ2x5cGhzIHdpdGggb25lIGdseXBoIgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhcHBlbmQxNigxKTsgLy8gVHlwZSAx
OiAiUmVwbGFjZSBvbmUgZ2x5cGggd2l0aCBvbmUgZ2x5cGgiCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBhcHBlbmQxNigwKTsgLy8gTG9va3VwRmxhZwogICAgICAgICBh
cHBlbmQxNigxKTsgLy8gU3ViVGFibGVDb3VudAogICAgICAgICBhcHBlbmQxNigwKTsgLy8gUGxh
Y2Vob2xkZXIgZm9yIG9mZnNldCB0byBzdWJ0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9m
IExvb2t1cCB0YWJsZQogICAgIH0KIAotICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFi
bGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbMF0sIFN0cmluZygidGVybWluYWwiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0
YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1sxXSwgU3RyaW5nKCJtZWRpYWwiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0
YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1syXSwgU3RyaW5nKCJpbml0aWFsIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIGFwcGVuZExpZ2F0dXJlU3VidGFibGUoc3Vi
dGFibGVSZWNvcmRMb2NhdGlvbnNbMF0pOworICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3Vi
dGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbMV0sIFN0cmluZygidGVybWluYWwiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRT
dWJ0YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1syXSwgU3RyaW5nKCJtZWRpYWwiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CisgICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRT
dWJ0YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1szXSwgU3RyaW5nKCJpbml0aWFsIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gTWFudWFsbHkgYXBwZW5kIGVt
cHR5ICJybGlnIiBzdWJ0YWJsZQotICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxlUmVjb3JkTG9jYXRp
b25zWzNdICsgNiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbM10p
OworICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzRdICsgNiwgbV9yZXN1
bHQuc2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbNF0pOwogICAgIGFwcGVuZDE2KDEp
OyAvLyBGb3JtYXQgMQogICAgIGFwcGVuZDE2KDYpOyAvLyBvZmZzZXQgdG8gY292ZXJhZ2UgdGFi
bGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBzdWJzdGl0dXRpb24gdGFibGUKICAgICBhcHBl
bmQxNigwKTsgLy8gQWx0ZXJuYXRlU2V0Q291bnQKQEAgLTc0OSwxOCArODU3LDI2IEBAIHZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUoKQogICAgIH0KIH0KIAorc3Rh
dGljIFN0cmluZyBjb2RlcG9pbnRUb1N0cmluZyhVQ2hhcjMyIGNvZGVwb2ludCkKK3sKKyAgICBV
Q2hhciBidWZmZXJbMl07CisgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgIFVCb29sIGVycm9y
ID0gZmFsc2U7CisgICAgVTE2X0FQUEVORChidWZmZXIsIGxlbmd0aCwgMiwgY29kZXBvaW50LCBl
cnJvcik7CisgICAgcmV0dXJuIGVycm9yID8gU3RyaW5nKCkgOiBTdHJpbmcoYnVmZmVyLCBsZW5n
dGgpOworfQorCitWZWN0b3I8R2x5cGgsIDE+IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6bG9va3Vw
Q29kZXBvaW50KFVDaGFyMzIgY29kZXBvaW50KSBjb25zdAoreworICAgIHJldHVybiBtX2NvZGVw
b2ludHNUb0luZGljZXNNYXAuZ2V0KGNvZGVwb2ludFRvU3RyaW5nKGNvZGVwb2ludCkpOworfQor
CiB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVu
aWNvZGVSYW5nZXMmIHVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29u
c3QKIHsKICAgICBmb3IgKGF1dG8mIHVuaWNvZGVSYW5nZSA6IHVuaWNvZGVSYW5nZXMpIHsKICAg
ICAgICAgZm9yIChhdXRvIGNvZGVwb2ludCA9IHVuaWNvZGVSYW5nZS5maXJzdDsgY29kZXBvaW50
IDw9IHVuaWNvZGVSYW5nZS5zZWNvbmQ7ICsrY29kZXBvaW50KSB7Ci0gICAgICAgICAgICBVQ2hh
ciBidWZmZXJbMl07Ci0gICAgICAgICAgICB1aW50OF90IGxlbmd0aCA9IDA7Ci0gICAgICAgICAg
ICBVQm9vbCBlcnJvciA9IGZhbHNlOwotICAgICAgICAgICAgVTE2X0FQUEVORChidWZmZXIsIGxl
bmd0aCwgMiwgY29kZXBvaW50LCBlcnJvcik7Ci0gICAgICAgICAgICBpZiAoIWVycm9yKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChhdXRvIGluZGV4IDogbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFw
LmdldChTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSkKLSAgICAgICAgICAgICAgICAgICAgZ2x5cGhT
ZXQuYWRkKGluZGV4KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byBpbmRl
eCA6IGxvb2t1cENvZGVwb2ludChjb2RlcG9pbnQpKQorICAgICAgICAgICAgICAgIGdseXBoU2V0
LmFkZChpbmRleCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMDUwLDI3ICsxMTY2LDYyIEBA
IHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjpwcm9jZXNzR2x5cGhFbGVtZW50KGNvbnN0IFQm
IGVsZW1lbnQsIGZsb2F0IGRlZmF1bHRICiAgICAgYXBwZW5kR2x5cGhEYXRhKHBhdGgsICZlbGVt
ZW50LCBob3Jpem9udGFsQWR2YW5jZSwgdmVydGljYWxBZHZhbmNlLCBnbHlwaEJvdW5kaW5nQm94
LCBjb2RlcG9pbnRzKTsKIH0KIAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEVt
cHR5R2x5cGgoQ29kZXBvaW50cyBjb2RlcG9pbnRzKQoreworICAgIFZlY3RvcjxjaGFyPiBjaGFy
U3RyaW5nOworICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihjaGFyU3RyaW5nLCBtX3VuaXRzUGVy
RW0pOworICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihjaGFyU3RyaW5nLCAwKTsKKyAgICB3cml0
ZUNGRkVuY29kZWROdW1iZXIoY2hhclN0cmluZywgMCk7CisgICAgY2hhclN0cmluZy5hcHBlbmQo
ck1vdmVUbyk7CisgICAgY2hhclN0cmluZy5hcHBlbmQoZW5kQ2hhcik7CisgICAgbV9nbHlwaHMu
YXBwZW5kKEdseXBoRGF0YShjaGFyU3RyaW5nLCBudWxscHRyLCBtX3VuaXRzUGVyRW0sIG1fdW5p
dHNQZXJFbSwgRmxvYXRSZWN0KCksIGNvZGVwb2ludHMpKTsKK30KKwordm9pZCBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZExpZ2F0dXJlR2x5cGhzKCkKK3sKKyAgICBIYXNoU2V0PFVDaGFy
MzI+IGxpZ2F0dXJlQ29kZXBvaW50czsKKyAgICBIYXNoU2V0PFVDaGFyMzI+IG5vbkxpZ2F0dXJl
Q29kZXBvaW50czsKKyAgICBmb3IgKGF1dG8mIGdseXBoIDogbV9nbHlwaHMpIHsKKyAgICAgICAg
aWYgKGdseXBoLmNvZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIFVDaGFyMzIgY29kZXBvaW50ID0gZ2V0TmV4
dENvZGVwb2ludChnbHlwaC5jb2RlcG9pbnRzLCBpKTsKKyAgICAgICAgaWYgKGkgPT0gZ2x5cGgu
Y29kZXBvaW50cy5sZW5ndGgoKSkKKyAgICAgICAgICAgIG5vbkxpZ2F0dXJlQ29kZXBvaW50cy5h
ZGQoY29kZXBvaW50KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaWdhdHVyZUNvZGVw
b2ludHMuYWRkKGNvZGVwb2ludCk7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGdseXBoLmNvZGVw
b2ludHMubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgbGlnYXR1cmVDb2RlcG9pbnRzLmFkZChn
ZXROZXh0Q29kZXBvaW50KGdseXBoLmNvZGVwb2ludHMsIGkpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAoYXV0byBjb2RlcG9pbnQgOiBub25MaWdhdHVyZUNvZGVwb2ludHMpCisgICAg
ICAgIGxpZ2F0dXJlQ29kZXBvaW50cy5yZW1vdmUoY29kZXBvaW50KTsKKyAgICBmb3IgKGF1dG8g
Y29kZXBvaW50IDogbGlnYXR1cmVDb2RlcG9pbnRzKSB7CisgICAgICAgIGF1dG8gY29kZXBvaW50
cyA9IGNvZGVwb2ludFRvU3RyaW5nKGNvZGVwb2ludCk7CisgICAgICAgIGlmICghY29kZXBvaW50
cy5pc051bGwoKSkKKyAgICAgICAgICAgIGFwcGVuZEVtcHR5R2x5cGgoY29kZXBvaW50cyk7Cisg
ICAgfQorfQorCiBib29sIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNM
ZXhpY29ncmFwaGljYWxseShjb25zdCBHbHlwaERhdGEmIGRhdGExLCBjb25zdCBHbHlwaERhdGEm
IGRhdGEyKQogewogICAgIHVuc2lnbmVkIGkxID0gMCwgaTIgPSAwOwogICAgIFVDaGFyMzIgY29k
ZXBvaW50MSwgY29kZXBvaW50MjsKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gZGF0YTEuY29kZXBv
aW50cy5sZW5ndGgoKSwgbGVuZ3RoMiA9IGRhdGEyLmNvZGVwb2ludHMubGVuZ3RoKCk7CiAgICAg
Zm9yICggOyBpMSA8IGxlbmd0aDEgJiYgaTIgPCBsZW5ndGgyOyApIHsKLSAgICAgICAgaWYgKGRh
dGExLmNvZGVwb2ludHMuaXM4Qml0KCkpCi0gICAgICAgICAgICBjb2RlcG9pbnQxID0gZGF0YTEu
Y29kZXBvaW50c1tpMSsrXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgVTE2X05FWFQoZGF0
YTEuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgaTEsIGxlbmd0aDEsIGNvZGVwb2ludDEpOwot
Ci0gICAgICAgIGlmIChkYXRhMi5jb2RlcG9pbnRzLmlzOEJpdCgpKQotICAgICAgICAgICAgY29k
ZXBvaW50MiA9IGRhdGEyLmNvZGVwb2ludHNbaTIrK107Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIFUxNl9ORVhUKGRhdGEyLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGkyLCBsZW5ndGgy
LCBjb2RlcG9pbnQyKTsKKyAgICAgICAgY29kZXBvaW50MSA9IGdldE5leHRDb2RlcG9pbnQoZGF0
YTEuY29kZXBvaW50cywgaTEpOworICAgICAgICBjb2RlcG9pbnQyID0gZ2V0TmV4dENvZGVwb2lu
dChkYXRhMi5jb2RlcG9pbnRzLCBpMik7CiAKICAgICAgICAgaWYgKGNvZGVwb2ludDEgPCBjb2Rl
cG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChjb2RlcG9pbnQx
ID4gY29kZXBvaW50MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBp
ZiAobGVuZ3RoMSA9PSBsZW5ndGgyICYmIGRhdGExLmdseXBoRWxlbWVudAogICAgICAgICAmJiBl
cXVhbElnbm9yaW5nQ2FzZShkYXRhMS5nbHlwaEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmFyYWJpY19mb3JtQXR0ciksIFN0cmluZygiaXNvbGF0ZWQiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
bGVuZ3RoMSA8IGxlbmd0aDI7CiB9CiAKQEAgLTEwODIsNiArMTIzMyw3IEBAIFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBm
b250RWxlbWVudCkKICAgICAsIG1fYWR2YW5jZUhlaWdodE1heCgwKQogICAgICwgbV9taW5SaWdo
dFNpZGVCZWFyaW5nKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKICAgICAsIG1f
dW5pdHNQZXJFbSgwKQorICAgICwgZmVhdHVyZUNvdW50R1NVQigwKQogICAgICwgbV90YWJsZXNB
cHBlbmRlZENvdW50KDApCiAgICAgLCBtX3dlaWdodCg1KQogICAgICwgbV9pdGFsaWMoZmFsc2Up
CkBAIC0xMDk1LDE1ICsxMjQ3LDggQEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogCiAgICAgaWYg
KG1fbWlzc2luZ0dseXBoRWxlbWVudCkKICAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudCgqbV9t
aXNzaW5nR2x5cGhFbGVtZW50LCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0
aWNhbEFkdmFuY2UsIENvZGVwb2ludHMoKSwgaW5pdGlhbEdseXBoKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgVmVjdG9yPGNoYXI+IG5vdGRlZkNoYXJTdHJpbmc7Ci0gICAgICAgIHdyaXRlQ0ZGRW5j
b2RlZE51bWJlcihub3RkZWZDaGFyU3RyaW5nLCBtX3VuaXRzUGVyRW0pOwotICAgICAgICB3cml0
ZUNGRkVuY29kZWROdW1iZXIobm90ZGVmQ2hhclN0cmluZywgMCk7Ci0gICAgICAgIHdyaXRlQ0ZG
RW5jb2RlZE51bWJlcihub3RkZWZDaGFyU3RyaW5nLCAwKTsKLSAgICAgICAgbm90ZGVmQ2hhclN0
cmluZy5hcHBlbmQock1vdmVUbyk7Ci0gICAgICAgIG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKGVu
ZENoYXIpOwotICAgICAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKG5vdGRlZkNoYXJTdHJp
bmcsIG51bGxwdHIsIG1fdW5pdHNQZXJFbSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwgQ29k
ZXBvaW50cygpKSk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgYXBwZW5kRW1wdHlHbHlwaChD
b2RlcG9pbnRzKCkpOwogCiAgICAgZm9yIChhdXRvJiBnbHlwaEVsZW1lbnQgOiBjaGlsZHJlbk9m
VHlwZTxTVkdHbHlwaEVsZW1lbnQ+KG1fZm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8mIHVu
aWNvZGVBdHRyaWJ1dGUgPSBnbHlwaEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6
dW5pY29kZUF0dHIpOwpAQCAtMTExMiw2ICsxMjU3LDggQEAgU1ZHVG9PVEZGb250Q29udmVydGVy
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50
KQogICAgICAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudChnbHlwaEVsZW1lbnQsIGRlZmF1bHRI
b3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgdW5pY29kZUF0dHJpYnV0
ZSwgaW5pdGlhbEdseXBoKTsKICAgICB9CiAKKyAgICBhcHBlbmRMaWdhdHVyZUdseXBocygpOwor
CiAgICAgaWYgKG1fZ2x5cGhzLnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8R2x5cGg+Ojpt
YXgoKSkgewogICAgICAgICAvLyBUaGlzIHdpbGwgYnJlYWsgYWxsIHNvcnRzIG9mIHRoaW5ncy4g
QmFpbCBlYXJseSBpbnN0ZWFkLgogICAgICAgICBtX2dseXBocy5jbGVhcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239300</attachid>
            <date>2014-10-05 10:04:15 -0700</date>
            <delta_ts>2014-11-10 22:05:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137094-20141005100417.patch</filename>
            <type>text/plain</type>
            <size>19683</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE2YjMyMDAyMGJiMzI5
YzU1Mzg4YTgwMTM0YzRmMWU1Y2I5NmVjYy4uMmQwYzlhYWIzYjYyYTQwMjE2M2I3MzBjYjA0NTky
ZDMxZmFlNDZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE0LTA5LTI4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBJbXBsZW1lbnQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlICJsaWdhIiBPcGVuVHlwZSBmZWF0dXJl
IHRvIGltcGxlbWVudCBsaWdhdHVyZXMgaW5zaWRlIHRoZSBHU1VCIHRhYmxlLgorCisgICAgICAg
IFRlc3RzOiBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDQtdC5zdmcKKyAgICAgICAgICAg
ICAgIHN2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC5zdmcKKyAgICAgICAgICAgICAgIHN2
Zy90ZXh0L2tlcm5pbmcuc3ZnCisgICAgICAgICAgICAgICBzdmcvdGV4dC9tdWx0aWNoYXItZ2x5
cGguc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROZXh0Q29kZXBvaW50KTogQ29udmVuaWVuY2UgZnVuY3Rpb24gYXJv
dW5kIFUxNl9ORVhUKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZENNQVBUYWJsZSk6IFVzZSBnZXROZXh0Q29kZXBvaW50KCkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmdldEZpcnN0R2x5cGgpOiBCb3VuZHMgY2hlY2tp
bmcgb24gYSB2ZWN0b3Igb2YgZ2x5cGhzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmRMaWdhdHVyZVN1YnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kU2NyaXB0U3VidGFibGUpOiBVc2VkIGluc2lkZSBh
cHBlbmRHU1VCVGFibGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZEdTVUJUYWJsZSk6IFVwZGF0aW5nIGZvciBsaWdhdHVyZXMuCisgICAgICAgIChXZWJD
b3JlOjpjb2RlcG9pbnRUb1N0cmluZyk6IFdyYXBwZXIgYXJvdW5kIFUxNl9BUFBFTkQoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6bG9va3VwQ29kZXBvaW50KTog
Q2FsbCBjb2RlcG9pbnRUb1N0cmluZyBhbmQgbG9vayBpbiBpbnRlcm5hbCBtYXAuCisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6IFVz
ZSBsb29rdXBDb2RlcG9pbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kRW1wdHlHbHlwaCk6IENvbW1vbiBjb2RlIHB1bGxlZCBvdXQgaW50byBhIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRM
aWdhdHVyZUdseXBocyk6IExpZ2F0dXJlcyBhcmUgaW1wbGVtZW50ZWQgYXMgbWFwcGluZyBhIHNl
cXVlbmNlCisgICAgICAgIG9mIGdseXBocyB0byBhbm90aGVyIGdseXBoIGluc2lkZSBPcGVuVHlw
ZS4gSG93ZXZlciwgU1ZHIG1vZGVscyBsaWdhdHVyZXMgYXMgbWFwcGluZyBhIHNlcXVlbmNlIG9m
CisgICAgICAgIGNvZGVwb2ludHMgdG8gYSBnbHlwaC4gVGhpcyBmdW5jdGlvbiBtYWtlcyBkdW1t
eSBnbHlwaHMgZm9yIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IHdlIGRvbid0IGhhdmUKKyAgICAg
ICAgZ2x5cGhzIGZvciBhbmQgYXBwZW5kcyB0aGVtIHRvIG1fZ2x5cGhzLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBo
aWNhbGx5KTogVXNlIGdldE5leHRDb2RlcG9pbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKTogVXNlIGFwcGVuZEVtcHR5
R2x5cGgoKSBhbmQgY2FsbAorICAgICAgICBhcHBlbmRMaWdhdHVyZUdseXBocygpLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRIRUFEVGFibGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRDb2RlcG9p
bnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YWRkR2x5cGhOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDRkZCdWlsZGVyOjp1cGRhdGVGb3JDb25zdGl0dWVudFBvaW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29udmVydFNWR1RvT1RGRm9udCk6
IERlbGV0ZWQuCisKIDIwMTQtMTAtMDUgIExvcmVuem8gVGlsdmUgIDxsdGlsdmVAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXSBGaXggYnVpbGQgd2hlbiBEUkFHX1NVUFBPUlQgaXMgZGlzYWJs
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAppbmRl
eCAwYjBiYTAxOWI3MDgyMzI4ZGE5NjMzZmQzODYwNGI0OTI1ZjA0MGU0Li5lZjIyNDY5ZTFlYzVk
ZTZlYjY5NGNmNGMzNDExNzBmNDhhZWE0YjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RvT1RGRm9udENvbnZlcnNpb24uY3BwCkBAIC0xNDgsNiArMTQ4LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGFwcGVuZENGRlRhYmxlKCk7CiAgICAgdm9pZCBhcHBlbmRWT1JHVGFibGUoKTsKIAor
ICAgIHZvaWQgYXBwZW5kRW1wdHlHbHlwaChTdHJpbmcgY29kZXBvaW50cyk7CisgICAgdm9pZCBh
cHBlbmRMaWdhdHVyZUdseXBocygpOwogICAgIHN0YXRpYyBib29sIGNvbXBhcmVDb2RlcG9pbnRz
TGV4aWNvZ3JhcGhpY2FsbHkoY29uc3QgR2x5cGhEYXRhJiwgY29uc3QgR2x5cGhEYXRhJik7CiAK
ICAgICB2b2lkIGFwcGVuZFZhbGlkQ0ZGU3RyaW5nKGNvbnN0IFN0cmluZyYpOwpAQCAtMTYxLDcg
KzE2MywxMSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBhcHBl
bmRLRVJOU3VidGFibGUoYm9vbCAoVDo6KmJ1aWxkS2VybmluZ1BhaXIpKFNWR0tlcm5pbmdQYWly
JikgY29uc3QsIHVpbnQxNl90IGNvdmVyYWdlKTsKICAgICBzaXplX3QgZmluaXNoQXBwZW5kaW5n
S0VSTlN1YnRhYmxlKFZlY3RvcjxLZXJuaW5nRGF0YT4sIHVpbnQxNl90IGNvdmVyYWdlKTsKIAor
ICAgIHZvaWQgYXBwZW5kTGlnYXR1cmVTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2Nh
dGlvbik7CiAgICAgdm9pZCBhcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHNpemVfdCBz
dWJ0YWJsZVJlY29yZExvY2F0aW9uLCBjb25zdCBjaGFyIGFyYWJpY0Zvcm1bXSk7CisgICAgdm9p
ZCBhcHBlbmRTY3JpcHRTdWJ0YWJsZSh1bnNpZ25lZCBmZWF0dXJlQ291bnQpOworICAgIFZlY3Rv
cjxHbHlwaCwgMT4gbG9va3VwQ29kZXBvaW50KFVDaGFyMzIgY29kZXBvaW50KSBjb25zdDsKKyAg
ICBHbHlwaCBnZXRGaXJzdEdseXBoKFZlY3RvcjxHbHlwaCwgMT4sIFVDaGFyMzIgY29kZXBvaW50
KSBjb25zdDsKIAogICAgIFZlY3RvcjxHbHlwaERhdGE+IG1fZ2x5cGhzOwogICAgIEhhc2hNYXA8
U3RyaW5nLCBHbHlwaD4gbV9nbHlwaE5hbWVUb0luZGV4TWFwOyAvLyBTVkcgMS4xOiAiSXQgaXMg
cmVjb21tZW5kZWQgdGhhdCBnbHlwaCBuYW1lcyBiZSB1bmlxdWUgd2l0aGluIGEgZm9udC4iCkBA
IC0xNzYsNiArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2FkdmFuY2VIZWlnaHRNYXg7
CiAgICAgZmxvYXQgbV9taW5SaWdodFNpZGVCZWFyaW5nOwogICAgIHVuc2lnbmVkIG1fdW5pdHNQ
ZXJFbTsKKyAgICB1bnNpZ25lZCBmZWF0dXJlQ291bnRHU1VCOwogICAgIGludCBtX3RhYmxlc0Fw
cGVuZGVkQ291bnQ7CiAgICAgY2hhciBtX3dlaWdodDsKICAgICBib29sIG1faXRhbGljOwpAQCAt
MTk4LDYgKzIwNSwxNyBAQCBzdGF0aWMgdWludDE2X3QgaW50ZWdyYWxMb2cyKHVpbnQxNl90IHgp
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIFVDaGFyMzIgZ2V0TmV4dENvZGVwb2lu
dChjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkJiBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXgg
PCBzLmxlbmd0aCgpKTsKKyAgICBVQ2hhcjMyIHJlc3VsdDsKKyAgICBpZiAocy5pczhCaXQoKSkK
KyAgICAgICAgcmVzdWx0ID0gc1tpbmRleCsrXTsKKyAgICBlbHNlCisgICAgICAgIFUxNl9ORVhU
KHMuY2hhcmFjdGVyczE2KCksIGluZGV4LCBzLmxlbmd0aCgpLCByZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFi
bGUoKQogewogICAgIGF1dG8gc3RhcnRpbmdPZmZzZXQgPSBtX3Jlc3VsdC5zaXplKCk7CkBAIC0y
MjQsMTAgKzI0Miw4IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFi
bGUoKQogICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludDsKICAgICAgICAgaWYgKGdseXBoLmNvZGVw
b2ludHMuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb2RlcG9pbnQgPSAwOwotICAgICAgICBlbHNl
IGlmIChnbHlwaC5jb2RlcG9pbnRzLmlzOEJpdCgpKQotICAgICAgICAgICAgY29kZXBvaW50ID0g
Z2x5cGguY29kZXBvaW50c1tjb2RlcG9pbnRTaXplKytdOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBVMTZfTkVYVChnbHlwaC5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBjb2RlcG9pbnRT
aXplLCBnbHlwaC5jb2RlcG9pbnRzLmxlbmd0aCgpLCBjb2RlcG9pbnQpOworICAgICAgICAgICAg
Y29kZXBvaW50ID0gZ2V0TmV4dENvZGVwb2ludChnbHlwaC5jb2RlcG9pbnRzLCBjb2RlcG9pbnRT
aXplKTsKIAogICAgICAgICAvLyBEb24ndCBtYXAgbGlnYXR1cmVzIGhlcmUuCiAgICAgICAgIGlm
IChnbHlwaC5jb2RlcG9pbnRzLmxlbmd0aCgpID4gY29kZXBvaW50U2l6ZSB8fCBjb2RlcG9pbnQg
PT0gcHJldmlvdXNDb2RlcG9pbnQpCkBAIC01NjEsNiArNTc3LDcxIEBAIHZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRDRkZUYWJsZSgpCiAgICAgICAgIG1fcmVzdWx0LmFwcGVuZFZl
Y3RvcihnbHlwaC5jaGFyU3RyaW5nKTsKIH0KIAorR2x5cGggU1ZHVG9PVEZGb250Q29udmVydGVy
OjpnZXRGaXJzdEdseXBoKFZlY3RvcjxHbHlwaCwgMT4gdiwgVUNoYXIzMiBjb2RlcG9pbnQpIGNv
bnN0Cit7CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGNvZGVwb2ludCk7
CisjZW5kaWYKKyAgICBBU1NFUlQodi5zaXplKCkpOworICAgIGlmICghdi5zaXplKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIEFTU0VSVF9VTlVTRUQoaSwg
Y29kZXBvaW50ID09IGdldE5leHRDb2RlcG9pbnQobV9nbHlwaHNbdlswXV0uY29kZXBvaW50cywg
aSkpOworICAgIHJldHVybiB2WzBdOworfQorCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kTGlnYXR1cmVTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2NhdGlvbikKK3sK
KyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxWZWN0b3I8R2x5cGg+LCBHbHlwaD4gTGlnYXR1cmVQYWly
OworICAgIFZlY3RvcjxMaWdhdHVyZVBhaXI+IGxpZ2F0dXJlUGFpcnM7CisgICAgZm9yIChHbHlw
aCBnbHlwaEluZGV4ID0gMDsgZ2x5cGhJbmRleCA8IG1fZ2x5cGhzLnNpemUoKTsgKytnbHlwaElu
ZGV4KSB7CisgICAgICAgIGF1dG8mIGdseXBoID0gbV9nbHlwaHNbZ2x5cGhJbmRleF07CisgICAg
ICAgIGlmIChnbHlwaC5jb2RlcG9pbnRzLmlzTnVsbCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludCA9IGdl
dE5leHRDb2RlcG9pbnQoZ2x5cGguY29kZXBvaW50cywgaSk7CisgICAgICAgIGlmIChnbHlwaC5j
b2RlcG9pbnRzLmxlbmd0aCgpID4gaSkgeworICAgICAgICAgICAgbGlnYXR1cmVQYWlycy5hcHBl
bmQoTGlnYXR1cmVQYWlyKFZlY3RvcjxHbHlwaD4oKSwgZ2x5cGhJbmRleCkpOworICAgICAgICAg
ICAgbGlnYXR1cmVQYWlyc1tsaWdhdHVyZVBhaXJzLnNpemUoKSAtIDFdLmZpcnN0LmFwcGVuZChn
ZXRGaXJzdEdseXBoKGxvb2t1cENvZGVwb2ludChjb2RlcG9pbnQpLCBjb2RlcG9pbnQpKTsKKyAg
ICAgICAgICAgIHdoaWxlIChpIDwgZ2x5cGguY29kZXBvaW50cy5sZW5ndGgoKSkgeworICAgICAg
ICAgICAgICAgIGNvZGVwb2ludCA9IGdldE5leHRDb2RlcG9pbnQoZ2x5cGguY29kZXBvaW50cywg
aSk7CisgICAgICAgICAgICAgICAgbGlnYXR1cmVQYWlyc1tsaWdhdHVyZVBhaXJzLnNpemUoKSAt
IDFdLmZpcnN0LmFwcGVuZChnZXRGaXJzdEdseXBoKGxvb2t1cENvZGVwb2ludChjb2RlcG9pbnQp
LCBjb2RlcG9pbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
bGlnYXR1cmVQYWlycy5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4
KCkpCisgICAgICAgIGxpZ2F0dXJlUGFpcnMuY2xlYXIoKTsKKworICAgIG92ZXJ3cml0ZTE2KHN1
YnRhYmxlUmVjb3JkTG9jYXRpb24gKyA2LCBtX3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJsZVJlY29y
ZExvY2F0aW9uKTsKKyAgICBhdXRvIHN1YnRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7
CisgICAgYXBwZW5kMTYoMSk7IC8vIEZvcm1hdCAxCisgICAgYXBwZW5kMTYoMCk7IC8vIFBsYWNl
aG9sZGVyIGZvciBvZmZzZXQgdG8gY292ZXJhZ2UgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmlu
ZyBvZiBzdWJzdGl0dXRpb24gdGFibGUKKyAgICBhcHBlbmQxNigxKTsgLy8gTnVtYmVyIG9mIExp
Z2F0dXJlU2V0IHRhYmxlcworICAgIGFwcGVuZDE2KG1fcmVzdWx0LnNpemUoKSArIDIgLSBzdWJ0
YWJsZUxvY2F0aW9uKTsgLy8gT2Zmc2V0IHRvIExpZ2F0dXJlU2V0IHRhYmxlCisKKyAgICBhdXRv
IGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQx
NihsaWdhdHVyZVBhaXJzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBpIDogbGlnYXR1cmVQYWly
cykgeworICAgICAgICBVTlVTRURfUEFSQU0oaSk7CisgICAgICAgIGFwcGVuZDE2KDApOyAvLyBQ
bGFjZWhvbGRlciBmb3Igb2Zmc2V0IHRvIGxpZ2F0dXJlIHRhYmxlIGZyb20gYmVnaW5uaW5nIG9m
IGxpZ2F0dXJlIHNldCB0YWJsZQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
Z2F0dXJlUGFpcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgbGlnYXR1cmUgPSBsaWdh
dHVyZVBhaXJzW2ldOworICAgICAgICBvdmVyd3JpdGUxNihsaWdhdHVyZVNldFRhYmxlTG9jYXRp
b24gKyAyICsgMiAqIGksIG1fcmVzdWx0LnNpemUoKSAtIGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlv
bik7CisgICAgICAgIGFwcGVuZDE2KGxpZ2F0dXJlLnNlY29uZCk7IC8vIEdseXBoIHRvIHN1YnN0
aXR1dGUKKyAgICAgICAgYXBwZW5kMTYobGlnYXR1cmUuZmlyc3Quc2l6ZSgpIC0gMSk7IC8vIENv
bXBvbmVudCBjb3VudAorICAgICAgICBmb3IgKHNpemVfdCBnbHlwaCA9IDE7IGdseXBoIDwgbGln
YXR1cmUuZmlyc3Quc2l6ZSgpOyArK2dseXBoKQorICAgICAgICAgICAgYXBwZW5kMTYobGlnYXR1
cmUuZmlyc3RbZ2x5cGhdKTsKKyAgICB9CisKKyAgICAvLyBDb3ZlcmFnZSB0YWJsZQorICAgIG92
ZXJ3cml0ZTE2KHN1YnRhYmxlTG9jYXRpb24gKyAyLCBtX3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJs
ZUxvY2F0aW9uKTsKKyAgICBhcHBlbmQxNigxKTsgLy8gQ292ZXJhZ2VGb3JtYXQKKyAgICBhcHBl
bmQxNihsaWdhdHVyZVBhaXJzLnNpemUoKSk7IC8vIEdseXBoQ291bnQKKyAgICBmb3IgKGF1dG8m
IGxpZ2F0dXJlIDogbGlnYXR1cmVQYWlycykKKyAgICAgICAgYXBwZW5kMTYobGlnYXR1cmUuZmly
c3RbMF0pOworfQorCiB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQXJhYmljUmVw
bGFjZW1lbnRTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2NhdGlvbiwgY29uc3QgY2hh
ciBhcmFiaWNGb3JtW10pCiB7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHbHlwaCwgR2x5cGg+PiBh
cmFiaWNGaW5hbFJlcGxhY2VtZW50czsKQEAgLTU4OSw2ICs2NzAsMjIgQEAgdm9pZCBTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1
YnRhYmxlUmVjb3IKICAgICAgICAgYXBwZW5kMTYocGFpci5maXJzdCk7CiB9CiAKK3ZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRTY3JpcHRTdWJ0YWJsZSh1bnNpZ25lZCBmZWF0dXJl
Q291bnQpCit7CisgICAgYXV0byBkZmx0U2NyaXB0VGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNp
emUoKTsKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCBvZiBkZWZh
dWx0IGxhbmd1YWdlIHN5c3RlbSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlw
dCB0YWJsZQorICAgIGFwcGVuZDE2KDApOyAvLyBOdW1iZXIgb2YgZm9sbG93aW5nIGxhbmd1YWdl
IHN5c3RlbSB0YWJsZXMKKworICAgIC8vIExhbmdTeXMgdGFibGUKKyAgICBvdmVyd3JpdGUxNihk
Zmx0U2NyaXB0VGFibGVMb2NhdGlvbiwgbV9yZXN1bHQuc2l6ZSgpIC0gZGZsdFNjcmlwdFRhYmxl
TG9jYXRpb24pOworICAgIGFwcGVuZDE2KDApOyAvLyBMb29rdXBPcmRlciAiPSBOVUxMIC4uLiBy
ZXNlcnZlZCIKKyAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBObyBmZWF0dXJlcyBhcmUgcmVxdWly
ZWQKKyAgICBhcHBlbmQxNihmZWF0dXJlQ291bnQpOyAvLyBOdW1iZXIgb2YgRmVhdHVyZUluZGV4
IHZhbHVlcworICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkK
KyAgICAgICAgYXBwZW5kMTYoZmVhdHVyZUNvdW50R1NVQiArIGkpOyAvLyBGZWF0dXJlcyBpbmRp
Y2VzCisgICAgZmVhdHVyZUNvdW50R1NVQiArPSBmZWF0dXJlQ291bnQ7Cit9CisKIHZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUoKQogewogICAgIGF1dG8gdGFibGVM
b2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKQEAgLTYwNCwyMiArNzAxLDE4IEBAIHZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUoKQogCiAgICAgLy8gU2NyaXB0TGlz
dAogICAgIGF1dG8gc2NyaXB0TGlzdExvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOwotICAgIGFw
cGVuZDE2KDEpOyAvLyBOdW1iZXIgb2YgU2NyaXB0UmVjb3JkcworICAgIGFwcGVuZDE2KDIpOyAv
LyBOdW1iZXIgb2YgU2NyaXB0UmVjb3JkcworICAgIGFwcGVuZDMyQml0Q29kZSgiREZMVCIpOwor
ICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIFNjcmlwdCB0YWJs
ZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlwdExpc3QKICAgICBhcHBlbmQzMkJpdENv
ZGUoImFyYWIiKTsKLSAgICBhcHBlbmQxNihtX3Jlc3VsdC5zaXplKCkgKyAyIC0gc2NyaXB0TGlz
dExvY2F0aW9uKTsgLy8gT2Zmc2V0IG9mIFNjcmlwdCB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5u
aW5nIG9mIFNjcmlwdExpc3QKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9m
ZnNldCBvZiBTY3JpcHQgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHRMaXN0
CiAKLSAgICBhdXRvIHNjcmlwdFRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7Ci0gICAg
YXV0byBzaXplT2ZFbXB0eVNjcmlwdFRhYmxlID0gNDsKLSAgICBhcHBlbmQxNihzaXplT2ZFbXB0
eVNjcmlwdFRhYmxlKTsgLy8gT2Zmc2V0IG9mIGRlZmF1bHQgbGFuZ3VhZ2Ugc3lzdGVtIHRhYmxl
LCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0IHRhYmxlCi0gICAgYXBwZW5kMTYoMCk7
IC8vIE51bWJlciBvZiBmb2xsb3dpbmcgbGFuZ3VhZ2Ugc3lzdGVtIHRhYmxlcwotICAgIEFTU0VS
VF9VTlVTRUQoc2NyaXB0VGFibGVMb2NhdGlvbiwgc2NyaXB0VGFibGVMb2NhdGlvbiArIHNpemVP
ZkVtcHR5U2NyaXB0VGFibGUgPT0gbV9yZXN1bHQuc2l6ZSgpKTsKKyAgICBvdmVyd3JpdGUxNihz
Y3JpcHRMaXN0TG9jYXRpb24gKyA2LCBtX3Jlc3VsdC5zaXplKCkgLSBzY3JpcHRMaXN0TG9jYXRp
b24pOworICAgIGFwcGVuZFNjcmlwdFN1YnRhYmxlKDEpOworICAgIG92ZXJ3cml0ZTE2KHNjcmlw
dExpc3RMb2NhdGlvbiArIDEyLCBtX3Jlc3VsdC5zaXplKCkgLSBzY3JpcHRMaXN0TG9jYXRpb24p
OworICAgIGFwcGVuZFNjcmlwdFN1YnRhYmxlKDQpOwogCi0gICAgYXBwZW5kMTYoMCk7IC8vIExv
b2t1cE9yZGVyICI9IE5VTEwgLi4uIHJlc2VydmVkIgotICAgIGFwcGVuZDE2KDApOyAvLyBGaXJz
dCBmZWF0dXJlIGlzIHJlcXVpcmVkCi0gICAgdWludDE2X3QgZmVhdHVyZUNvdW50ID0gNDsKLSAg
ICBhcHBlbmQxNig0KTsgLy8gRmVhdHVyZUNvdW50Ci0gICAgZm9yICh1aW50MTZfdCBpID0gMDsg
aSA8IGZlYXR1cmVDb3VudDsgKytpKQotICAgICAgICBhcHBlbmQxNihpKTsgLy8gSW5kZXggb2Yg
b3VyIGZlYXR1cmUgaW50byB0aGUgRmVhdHVyZUxpc3QKKyAgICB1bnNpZ25lZCBmZWF0dXJlQ291
bnQgPSA1OwogCiAgICAgLy8gRmVhdHVyZUxpc3QKICAgICBvdmVyd3JpdGUxNihmZWF0dXJlTGlz
dE9mZnNldExvY2F0aW9uLCBtX3Jlc3VsdC5zaXplKCkgLSB0YWJsZUxvY2F0aW9uKTsKQEAgLTYy
NywxNCArNzIwLDE2IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFi
bGUoKQogICAgIHNpemVfdCBmZWF0dXJlTGlzdFNpemUgPSAyICsgNiAqIGZlYXR1cmVDb3VudDsK
ICAgICBzaXplX3QgZmVhdHVyZVRhYmxlU2l6ZSA9IDY7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUNv
dW50KTsgLy8gRmVhdHVyZUNvdW50Ci0gICAgYXBwZW5kMzJCaXRDb2RlKCJmaW5hIik7CisgICAg
YXBwZW5kMzJCaXRDb2RlKCJsaWdhIik7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUxpc3RTaXplICsg
ZmVhdHVyZVRhYmxlU2l6ZSAqIDApOyAvLyBPZmZzZXQgb2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRp
dmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRhYmxlCi0gICAgYXBwZW5kMzJCaXRDb2Rl
KCJtZWRpIik7CisgICAgYXBwZW5kMzJCaXRDb2RlKCJmaW5hIik7CiAgICAgYXBwZW5kMTYoZmVh
dHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIDEpOyAvLyBPZmZzZXQgb2YgZmVhdHVy
ZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRhYmxlCi0gICAg
YXBwZW5kMzJCaXRDb2RlKCJpbml0Iik7CisgICAgYXBwZW5kMzJCaXRDb2RlKCJtZWRpIik7CiAg
ICAgYXBwZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIDIpOyAvLyBP
ZmZzZXQgb2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVM
aXN0IHRhYmxlCi0gICAgYXBwZW5kMzJCaXRDb2RlKCJybGlnIik7CisgICAgYXBwZW5kMzJCaXRD
b2RlKCJpbml0Iik7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxl
U2l6ZSAqIDMpOyAvLyBPZmZzZXQgb2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5u
aW5nIG9mIEZlYXR1cmVMaXN0IHRhYmxlCisgICAgYXBwZW5kMzJCaXRDb2RlKCJybGlnIik7Cisg
ICAgYXBwZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIDQpOyAvLyBP
ZmZzZXQgb2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVM
aXN0IHRhYmxlCiAgICAgQVNTRVJUX1VOVVNFRChmZWF0dXJlTGlzdExvY2F0aW9uLCBmZWF0dXJl
TGlzdExvY2F0aW9uICsgZmVhdHVyZUxpc3RTaXplID09IG1fcmVzdWx0LnNpemUoKSk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKQEAgLTY1NSwx
OCArNzUwLDI5IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUo
KQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewogICAg
ICAgICBzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1tpXSA9IG1fcmVzdWx0LnNpemUoKTsKICAgICAg
ICAgb3ZlcndyaXRlMTYobG9va3VwTGlzdExvY2F0aW9uICsgMiArIDIgKiBpLCBtX3Jlc3VsdC5z
aXplKCkgLSBsb29rdXBMaXN0TG9jYXRpb24pOwotICAgICAgICBhcHBlbmQxNihpID09IDMgPyAz
IDogMSk7IC8vIFR5cGUgMTogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIGdseXBoIiAvIFR5
cGUgMzogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIG9mIG1hbnkgZ2x5cGhzIgorICAgICAg
ICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgYXBwZW5kMTYoMyk7
IC8vIFR5cGUgMzogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIG9mIG1hbnkgZ2x5cGhzIgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGFwcGVuZDE2
KDQpOyAvLyBUeXBlIDQ6ICJSZXBsYWNlIG11bHRpcGxlIGdseXBocyB3aXRoIG9uZSBnbHlwaCIK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXBwZW5k
MTYoMSk7IC8vIFR5cGUgMTogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIGdseXBoIgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYXBwZW5kMTYoMCk7IC8vIExvb2t1
cEZsYWcKICAgICAgICAgYXBwZW5kMTYoMSk7IC8vIFN1YlRhYmxlQ291bnQKICAgICAgICAgYXBw
ZW5kMTYoMCk7IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgdG8gc3VidGFibGUsIHJlbGF0aXZl
IHRvIGJlZ2lubmluZyBvZiBMb29rdXAgdGFibGUKICAgICB9CiAKLSAgICBhcHBlbmRBcmFiaWNS
ZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzBdLCAidGVybWluYWwi
KTsKLSAgICBhcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9j
YXRpb25zWzFdLCAibWVkaWFsIik7Ci0gICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJs
ZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1syXSwgImluaXRpYWwiKTsKKyAgICBhcHBlbmRMaWdh
dHVyZVN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzBdKTsKKyAgICBhcHBlbmRBcmFi
aWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzFdLCAidGVybWlu
YWwiKTsKKyAgICBhcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3Jk
TG9jYXRpb25zWzJdLCAibWVkaWFsIik7CisgICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0
YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1szXSwgImluaXRpYWwiKTsKIAogICAgIC8vIE1h
bnVhbGx5IGFwcGVuZCBlbXB0eSAicmxpZyIgc3VidGFibGUKLSAgICBvdmVyd3JpdGUxNihzdWJ0
YWJsZVJlY29yZExvY2F0aW9uc1szXSArIDYsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlUmVj
b3JkTG9jYXRpb25zWzNdKTsKKyAgICBvdmVyd3JpdGUxNihzdWJ0YWJsZVJlY29yZExvY2F0aW9u
c1s0XSArIDYsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzRdKTsK
ICAgICBhcHBlbmQxNigxKTsgLy8gRm9ybWF0IDEKICAgICBhcHBlbmQxNig2KTsgLy8gb2Zmc2V0
IHRvIGNvdmVyYWdlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3Vic3RpdHV0aW9u
IHRhYmxlCiAgICAgYXBwZW5kMTYoMCk7IC8vIEFsdGVybmF0ZVNldENvdW50CkBAIC03MjcsMTgg
KzgzMywyNiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk1UWFRhYmxlKCkK
ICAgICB9CiB9CiAKK3N0YXRpYyBTdHJpbmcgY29kZXBvaW50VG9TdHJpbmcoVUNoYXIzMiBjb2Rl
cG9pbnQpCit7CisgICAgVUNoYXIgYnVmZmVyWzJdOworICAgIHVpbnQ4X3QgbGVuZ3RoID0gMDsK
KyAgICBVQm9vbCBlcnJvciA9IGZhbHNlOworICAgIFUxNl9BUFBFTkQoYnVmZmVyLCBsZW5ndGgs
IDIsIGNvZGVwb2ludCwgZXJyb3IpOworICAgIHJldHVybiBlcnJvciA/IFN0cmluZygpIDogU3Ry
aW5nKGJ1ZmZlciwgbGVuZ3RoKTsKK30KKworVmVjdG9yPEdseXBoLCAxPiBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6Omxvb2t1cENvZGVwb2ludChVQ2hhcjMyIGNvZGVwb2ludCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFwLmdldChjb2RlcG9pbnRUb1N0cmluZyhj
b2RlcG9pbnQpKTsKK30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2lu
dFJhbmdlcyhjb25zdCBVbmljb2RlUmFuZ2VzJiB1bmljb2RlUmFuZ2VzLCBIYXNoU2V0PEdseXBo
PiYgZ2x5cGhTZXQpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiB1bmljb2RlUmFuZ2UgOiB1bmlj
b2RlUmFuZ2VzKSB7CiAgICAgICAgIGZvciAoYXV0byBjb2RlcG9pbnQgPSB1bmljb2RlUmFuZ2Uu
Zmlyc3Q7IGNvZGVwb2ludCA8PSB1bmljb2RlUmFuZ2Uuc2Vjb25kOyArK2NvZGVwb2ludCkgewot
ICAgICAgICAgICAgVUNoYXIgYnVmZmVyWzJdOwotICAgICAgICAgICAgdWludDhfdCBsZW5ndGgg
PSAwOwotICAgICAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsKLSAgICAgICAgICAgIFUxNl9B
UFBFTkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNvZGVwb2ludCwgZXJyb3IpOwotICAgICAgICAgICAg
aWYgKCFlcnJvcikgewotICAgICAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBv
aW50c1RvSW5kaWNlc01hcC5nZXQoU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpCi0gICAgICAgICAg
ICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKGF1dG8gaW5kZXggOiBsb29rdXBDb2RlcG9pbnQoY29kZXBvaW50KSkKKyAgICAgICAg
ICAgICAgICBnbHlwaFNldC5hZGQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTAw
Nyw2ICsxMTIxLDQ0IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjpwcm9jZXNzR2x5cGhF
bGVtZW50KGNvbnN0IFNWR0VsZW1lbnQmIGdseXBoT3JNaXNzaW5nCiAgICAgbV9nbHlwaHMuYXBw
ZW5kKEdseXBoRGF0YShXVEY6Om1vdmUocGF0aCksIGdseXBoRWxlbWVudCwgaG9yaXpvbnRhbEFk
dmFuY2UsIHZlcnRpY2FsQWR2YW5jZSwgbV9ib3VuZGluZ0JveCwgY29kZXBvaW50cykpOwogfQog
Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kRW1wdHlHbHlwaChTdHJpbmcgY29k
ZXBvaW50cykKK3sKKyAgICBWZWN0b3I8Y2hhcj4gY2hhclN0cmluZzsKKyAgICB3cml0ZUNGRkVu
Y29kZWROdW1iZXIoY2hhclN0cmluZywgbV91bml0c1BlckVtKTsKKyAgICB3cml0ZUNGRkVuY29k
ZWROdW1iZXIoY2hhclN0cmluZywgMCk7CisgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKGNoYXJT
dHJpbmcsIDApOworICAgIGNoYXJTdHJpbmcuYXBwZW5kKHJNb3ZlVG8pOworICAgIGNoYXJTdHJp
bmcuYXBwZW5kKGVuZENoYXIpOworICAgIG1fZ2x5cGhzLmFwcGVuZChHbHlwaERhdGEoV1RGOjpt
b3ZlKGNoYXJTdHJpbmcpLCBudWxscHRyLCBtX3VuaXRzUGVyRW0sIG1fdW5pdHNQZXJFbSwgRmxv
YXRSZWN0KCksIGNvZGVwb2ludHMpKTsKK30KKwordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZExpZ2F0dXJlR2x5cGhzKCkKK3sKKyAgICBIYXNoU2V0PFVDaGFyMzI+IGxpZ2F0dXJl
Q29kZXBvaW50czsKKyAgICBIYXNoU2V0PFVDaGFyMzI+IG5vbkxpZ2F0dXJlQ29kZXBvaW50czsK
KyAgICBmb3IgKGF1dG8mIGdseXBoIDogbV9nbHlwaHMpIHsKKyAgICAgICAgaWYgKGdseXBoLmNv
ZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgICAgIFVDaGFyMzIgY29kZXBvaW50ID0gZ2V0TmV4dENvZGVwb2ludChn
bHlwaC5jb2RlcG9pbnRzLCBpKTsKKyAgICAgICAgaWYgKGkgPT0gZ2x5cGguY29kZXBvaW50cy5s
ZW5ndGgoKSkKKyAgICAgICAgICAgIG5vbkxpZ2F0dXJlQ29kZXBvaW50cy5hZGQoY29kZXBvaW50
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaWdhdHVyZUNvZGVwb2ludHMuYWRkKGNv
ZGVwb2ludCk7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGdseXBoLmNvZGVwb2ludHMubGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgbGlnYXR1cmVDb2RlcG9pbnRzLmFkZChnZXROZXh0Q29kZXBv
aW50KGdseXBoLmNvZGVwb2ludHMsIGkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
YXV0byBjb2RlcG9pbnQgOiBub25MaWdhdHVyZUNvZGVwb2ludHMpCisgICAgICAgIGxpZ2F0dXJl
Q29kZXBvaW50cy5yZW1vdmUoY29kZXBvaW50KTsKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDog
bGlnYXR1cmVDb2RlcG9pbnRzKSB7CisgICAgICAgIGF1dG8gY29kZXBvaW50cyA9IGNvZGVwb2lu
dFRvU3RyaW5nKGNvZGVwb2ludCk7CisgICAgICAgIGlmICghY29kZXBvaW50cy5pc051bGwoKSkK
KyAgICAgICAgICAgIGFwcGVuZEVtcHR5R2x5cGgoY29kZXBvaW50cyk7CisgICAgfQorfQorCiBi
b29sIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGlj
YWxseShjb25zdCBHbHlwaERhdGEmIGRhdGExLCBjb25zdCBHbHlwaERhdGEmIGRhdGEyKQogewog
ICAgIHVuc2lnbmVkIGkxID0gMDsKQEAgLTEwMTUsMTUgKzExNjcsOCBAQCBib29sIFNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25zdCBH
bHlwaERhdGEmCiAgICAgdW5zaWduZWQgbGVuZ3RoMiA9IGRhdGEyLmNvZGVwb2ludHMubGVuZ3Ro
KCk7CiAgICAgd2hpbGUgKGkxIDwgbGVuZ3RoMSAmJiBpMiA8IGxlbmd0aDIpIHsKICAgICAgICAg
VUNoYXIzMiBjb2RlcG9pbnQxLCBjb2RlcG9pbnQyOwotICAgICAgICBpZiAoZGF0YTEuY29kZXBv
aW50cy5pczhCaXQoKSkKLSAgICAgICAgICAgIGNvZGVwb2ludDEgPSBkYXRhMS5jb2RlcG9pbnRz
W2kxKytdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBVMTZfTkVYVChkYXRhMS5jb2RlcG9p
bnRzLmNoYXJhY3RlcnMxNigpLCBpMSwgbGVuZ3RoMSwgY29kZXBvaW50MSk7Ci0KLSAgICAgICAg
aWYgKGRhdGEyLmNvZGVwb2ludHMuaXM4Qml0KCkpCi0gICAgICAgICAgICBjb2RlcG9pbnQyID0g
ZGF0YTIuY29kZXBvaW50c1tpMisrXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgVTE2X05F
WFQoZGF0YTIuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgaTIsIGxlbmd0aDIsIGNvZGVwb2lu
dDIpOworICAgICAgICBjb2RlcG9pbnQxID0gZ2V0TmV4dENvZGVwb2ludChkYXRhMS5jb2RlcG9p
bnRzLCBpMSk7CisgICAgICAgIGNvZGVwb2ludDIgPSBnZXROZXh0Q29kZXBvaW50KGRhdGEyLmNv
ZGVwb2ludHMsIGkyKTsKIAogICAgICAgICBpZiAoY29kZXBvaW50MSA8IGNvZGVwb2ludDIpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNDUsNiArMTE5MCw3IEBAIFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBm
b250RWxlbWVudCkKICAgICAsIG1fYWR2YW5jZUhlaWdodE1heCgwKQogICAgICwgbV9taW5SaWdo
dFNpZGVCZWFyaW5nKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKICAgICAsIG1f
dW5pdHNQZXJFbSgwKQorICAgICwgZmVhdHVyZUNvdW50R1NVQigwKQogICAgICwgbV90YWJsZXNB
cHBlbmRlZENvdW50KDApCiAgICAgLCBtX3dlaWdodCg1KQogICAgICwgbV9pdGFsaWMoZmFsc2Up
CkBAIC0xMDU4LDE1ICsxMjA0LDggQEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogCiAgICAgaWYg
KG1fbWlzc2luZ0dseXBoRWxlbWVudCkKICAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudCgqbV9t
aXNzaW5nR2x5cGhFbGVtZW50LCBudWxscHRyLCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGRl
ZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIFN0cmluZygpLCBpbml0aWFsR2x5cGgpOwotICAgIGVsc2Ug
ewotICAgICAgICBWZWN0b3I8Y2hhcj4gbm90ZGVmQ2hhclN0cmluZzsKLSAgICAgICAgd3JpdGVD
RkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcsIG1fdW5pdHNQZXJFbSk7Ci0gICAgICAg
IHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihub3RkZWZDaGFyU3RyaW5nLCAwKTsKLSAgICAgICAgd3Jp
dGVDRkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcsIDApOwotICAgICAgICBub3RkZWZD
aGFyU3RyaW5nLmFwcGVuZChyTW92ZVRvKTsKLSAgICAgICAgbm90ZGVmQ2hhclN0cmluZy5hcHBl
bmQoZW5kQ2hhcik7Ci0gICAgICAgIG1fZ2x5cGhzLmFwcGVuZChHbHlwaERhdGEoV1RGOjptb3Zl
KG5vdGRlZkNoYXJTdHJpbmcpLCBudWxscHRyLCBtX3VuaXRzUGVyRW0sIG1fdW5pdHNQZXJFbSwg
RmxvYXRSZWN0KCksIFN0cmluZygpKSk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgYXBwZW5k
RW1wdHlHbHlwaChTdHJpbmcoKSk7CiAKICAgICBmb3IgKGF1dG8mIGdseXBoRWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0dseXBoRWxlbWVudD4obV9mb250RWxlbWVudCkpIHsKICAgICAgICAg
YXV0byYgdW5pY29kZUF0dHJpYnV0ZSA9IGdseXBoRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNW
R05hbWVzOjp1bmljb2RlQXR0cik7CkBAIC0xMDc0LDYgKzEyMTMsOCBAQCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihjb25zdCBTVkdGb250RWxlbWVudCYgZm9u
dEVsZW1lbnQpCiAgICAgICAgICAgICBwcm9jZXNzR2x5cGhFbGVtZW50KGdseXBoRWxlbWVudCwg
JmdseXBoRWxlbWVudCwgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBkZWZhdWx0VmVydGljYWxB
ZHZhbmNlLCB1bmljb2RlQXR0cmlidXRlLCBpbml0aWFsR2x5cGgpOwogICAgIH0KIAorICAgIGFw
cGVuZExpZ2F0dXJlR2x5cGhzKCk7CisKICAgICBpZiAobV9nbHlwaHMuc2l6ZSgpID4gc3RkOjpu
dW1lcmljX2xpbWl0czxHbHlwaD46Om1heCgpKSB7CiAgICAgICAgIG1fZ2x5cGhzLmNsZWFyKCk7
CiAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241332</attachid>
            <date>2014-11-10 22:06:02 -0800</date>
            <delta_ts>2014-12-16 17:12:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137094-20141110220605.patch</filename>
            <type>text/plain</type>
            <size>22598</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1ODEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMzMWNmYWZlYTU2ODIy
OWI5M2FlOWNmNWY3NTJmYTI3NzYyZTliNS4uZWM4YzcwZWMwNTE0M2QxYWZkMGRmOGExM2ViYTIw
ZTI4YmU2NzA0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDE0LTExLTEwICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBJbXBsZW1lbnQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlICJsaWdhIiBPcGVuVHlwZSBmZWF0dXJl
IHRvIGltcGxlbWVudCBsaWdhdHVyZXMgaW5zaWRlIHRoZSBHU1VCIHRhYmxlLgorCisgICAgICAg
IFRlc3RzOiBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDQtdC5zdmcKKyAgICAgICAgICAg
ICAgIHN2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC5zdmcKKyAgICAgICAgICAgICAgIHN2
Zy90ZXh0L2tlcm5pbmcuc3ZnCisgICAgICAgICAgICAgICBzdmcvdGV4dC9tdWx0aWNoYXItZ2x5
cGguc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROZXh0Q29kZXBvaW50KTogQ29udmVuaWVuY2UgZnVuY3Rpb24gYXJv
dW5kIFUxNl9ORVhUKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZENNQVBUYWJsZSk6IFVzZSBnZXROZXh0Q29kZXBvaW50KCkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZExpZ2F0dXJlU3VidGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRTY3JpcHRTdWJ0YWJs
ZSk6IFVzZWQgaW5zaWRlIGFwcGVuZEdTVUJUYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR1NVQlRhYmxlKTogVXBkYXRpbmcgZm9yIGxpZ2F0dXJl
cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvZGVwb2ludFRvU3RyaW5nKTogV3JhcHBlciBhcm91bmQg
VTE2X0FQUEVORCgpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjps
b29rdXBDb2RlcG9pbnQpOiBDYWxsIGNvZGVwb2ludFRvU3RyaW5nIGFuZCBsb29rIGluIGludGVy
bmFsIG1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29k
ZXBvaW50UmFuZ2VzKTogVXNlIGxvb2t1cENvZGVwb2ludCgpLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRFbXB0eUdseXBoKTogQ29tbW9uIGNvZGUgcHVs
bGVkIG91dCBpbnRvIGEgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZExpZ2F0dXJlR2x5cGhzKTogTGlnYXR1cmVzIGFyZSBpbXBsZW1lbnRl
ZCBhcyBtYXBwaW5nIGEgc2VxdWVuY2UKKyAgICAgICAgb2YgZ2x5cGhzIHRvIGFub3RoZXIgZ2x5
cGggaW5zaWRlIE9wZW5UeXBlLiBIb3dldmVyLCBTVkcgbW9kZWxzIGxpZ2F0dXJlcyBhcyBtYXBw
aW5nIGEgc2VxdWVuY2Ugb2YKKyAgICAgICAgY29kZXBvaW50cyB0byBhIGdseXBoLiBUaGlzIGZ1
bmN0aW9uIG1ha2VzIGR1bW15IGdseXBocyBmb3IgYWxsIHRoZSBjb2RlcG9pbnRzIHRoYXQgd2Ug
ZG9uJ3QgaGF2ZQorICAgICAgICBnbHlwaHMgZm9yIGFuZCBhcHBlbmRzIHRoZW0gdG8gbV9nbHlw
aHMuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmNvbXBhcmVDb2Rl
cG9pbnRzTGV4aWNvZ3JhcGhpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250
Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0ZXIpOiBVc2UgYXBwZW5kRW1wdHlHbHlwaCgp
IGFuZCBjYWxsCisgICAgICAgIGFwcGVuZExpZ2F0dXJlR2x5cGhzKCkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlw
aE5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kS0VSTlN1YnRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNGRkJ1
aWxkZXI6OnVwZGF0ZUZvckNvbnN0aXR1ZW50UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZGb250KTogRGVsZXRl
ZC4KKworMjAxNC0xMS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgorCiAgICAgICAgIFtPU1hdIFNvbWUgd29yZHMgYXJlIHBsYWNlZCBvbiB0b3Agb2YgZWFjaCBv
dGhlciBpbiBjb21wbGV4IHRleHQgbGF5b3V0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgzNDgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rv
T1RGRm9udENvbnZlcnNpb24uY3BwCmluZGV4IGVkN2U3Y2ZhNjQ3OTkyNjZiMzUwNGNlZmNjMGY0
YWFhODZkNWU5OTEuLjg0MWI0OGE0ZjRiYzc2YTUxMzg1Y2M0NDRmNjQyODEwYTI2ZjE2YTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAKQEAgLTE0
OCw2ICsxNDgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kQ0ZGVGFibGUoKTsKICAgICB2
b2lkIGFwcGVuZFZPUkdUYWJsZSgpOwogCisgICAgdm9pZCBhcHBlbmRFbXB0eUdseXBoKFN0cmlu
ZyBjb2RlcG9pbnRzKTsKKyAgICB2b2lkIGFwcGVuZExpZ2F0dXJlR2x5cGhzKCk7CiAgICAgc3Rh
dGljIGJvb2wgY29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25zdCBHbHlwaERh
dGEmLCBjb25zdCBHbHlwaERhdGEmKTsKIAogICAgIHZvaWQgYXBwZW5kVmFsaWRDRkZTdHJpbmco
Y29uc3QgU3RyaW5nJik7CkBAIC0xNjEsNyArMTYzLDExIEBAIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRL
ZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwog
ICAgIHNpemVfdCBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5pbmdEYXRh
PiwgdWludDE2X3QgY292ZXJhZ2UpOwogCisgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1YnRhYmxl
KHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKICAgICB2b2lkIGFwcGVuZEFyYWJpY1Jl
cGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24sIGNvbnN0IGNo
YXIgYXJhYmljRm9ybVtdKTsKKyAgICB2b2lkIGFwcGVuZFNjcmlwdFN1YnRhYmxlKHVuc2lnbmVk
IGZlYXR1cmVDb3VudCk7CisgICAgVmVjdG9yPEdseXBoLCAxPiBsb29rdXBDb2RlcG9pbnQoVUNo
YXIzMiBjb2RlcG9pbnQpIGNvbnN0OworICAgIEdseXBoIGZpcnN0R2x5cGgoVmVjdG9yPEdseXBo
LCAxPiwgVUNoYXIzMiBjb2RlcG9pbnQpIGNvbnN0OwogCiAgICAgVmVjdG9yPEdseXBoRGF0YT4g
bV9nbHlwaHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEdseXBoPiBtX2dseXBoTmFtZVRvSW5kZXhN
YXA7IC8vIFNWRyAxLjE6ICJJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGdseXBoIG5hbWVzIGJlIHVu
aXF1ZSB3aXRoaW4gYSBmb250LiIKQEAgLTE3Niw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgIGZs
b2F0IG1fYWR2YW5jZUhlaWdodE1heDsKICAgICBmbG9hdCBtX21pblJpZ2h0U2lkZUJlYXJpbmc7
CiAgICAgdW5zaWduZWQgbV91bml0c1BlckVtOworICAgIHVuc2lnbmVkIGZlYXR1cmVDb3VudEdT
VUI7CiAgICAgaW50IG1fdGFibGVzQXBwZW5kZWRDb3VudDsKICAgICBjaGFyIG1fd2VpZ2h0Owog
ICAgIGJvb2wgbV9pdGFsaWM7CkBAIC0yMjAsMTcgKzIyNywyMSBAQCB2b2lkIFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6YXBwZW5kQ01BUFRhYmxlKCkKICAgICBVQ2hhcjMyIHByZXZpb3VzQ29kZXBv
aW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxVQ2hhcjMyPjo6bWF4KCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBnbHlw
aCA9IG1fZ2x5cGhzW2ldOwotICAgICAgICB1bnNpZ25lZCBjb2RlcG9pbnRTaXplID0gMDsKICAg
ICAgICAgVUNoYXIzMiBjb2RlcG9pbnQ7Ci0gICAgICAgIGlmIChnbHlwaC5jb2RlcG9pbnRzLmlz
TnVsbCgpKQorICAgICAgICBhdXRvIGNvZGVQb2ludHMgPSBTdHJpbmdWaWV3KGdseXBoLmNvZGVw
b2ludHMpLmNvZGVQb2ludHMoKTsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IGNvZGVQb2ludHMu
YmVnaW4oKTsKKyAgICAgICAgYm9vbCBza2lwQ29kZXBvaW50ID0gZmFsc2U7CisgICAgICAgIGlm
IChpdGVyYXRvciA9PSBjb2RlUG9pbnRzLmVuZCgpKQogICAgICAgICAgICAgY29kZXBvaW50ID0g
MDsKLSAgICAgICAgZWxzZSBpZiAoZ2x5cGguY29kZXBvaW50cy5pczhCaXQoKSkKLSAgICAgICAg
ICAgIGNvZGVwb2ludCA9IGdseXBoLmNvZGVwb2ludHNbY29kZXBvaW50U2l6ZSsrXTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgVTE2X05FWFQoZ2x5cGguY29kZXBvaW50cy5jaGFyYWN0ZXJz
MTYoKSwgY29kZXBvaW50U2l6ZSwgZ2x5cGguY29kZXBvaW50cy5sZW5ndGgoKSwgY29kZXBvaW50
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb2RlcG9pbnQgPSAqaXRlcmF0b3I7Cisg
ICAgICAgICAgICArK2l0ZXJhdG9yOworICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGNvZGVQ
b2ludHMuZW5kKCkgfHwgY29kZXBvaW50ID09IHByZXZpb3VzQ29kZXBvaW50KQorICAgICAgICAg
ICAgICAgIHNraXBDb2RlcG9pbnQgPSB0cnVlOworICAgICAgICB9CiAKICAgICAgICAgLy8gRG9u
J3QgbWFwIGxpZ2F0dXJlcyBoZXJlLgotICAgICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5sZW5n
dGgoKSA+IGNvZGVwb2ludFNpemUgfHwgY29kZXBvaW50ID09IHByZXZpb3VzQ29kZXBvaW50KQor
ICAgICAgICBpZiAoc2tpcENvZGVwb2ludCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIGFwcGVuZDMyKGNvZGVwb2ludCk7IC8vIHN0YXJ0Q2hhckNvZGUKQEAgLTU2MSw2ICs1NzIs
MTA0IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDRkZUYWJsZSgpCiAgICAg
ICAgIG1fcmVzdWx0LmFwcGVuZFZlY3RvcihnbHlwaC5jaGFyU3RyaW5nKTsKIH0KIAorR2x5cGgg
U1ZHVG9PVEZGb250Q29udmVydGVyOjpmaXJzdEdseXBoKFZlY3RvcjxHbHlwaCwgMT4gdiwgVUNo
YXIzMiBjb2RlcG9pbnQpIGNvbnN0Cit7CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VE
X1BBUkFNKGNvZGVwb2ludCk7CisjZW5kaWYKKyAgICBBU1NFUlQodi5zaXplKCkpOworICAgIGlm
ICghdi5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICBhdXRvIGNvZGVQb2ludHMgPSBTdHJpbmdWaWV3KG1fZ2x5cGhzW3ZbMF1dLmNvZGVwb2ludHMp
LmNvZGVQb2ludHMoKTsKKyAgICBhdXRvIGNvZGVQb2ludHNJdGVyYXRvciA9IGNvZGVQb2ludHMu
YmVnaW4oKTsKKyAgICBBU1NFUlQoY29kZVBvaW50c0l0ZXJhdG9yICE9IGNvZGVQb2ludHMuZW5k
KCkpOworICAgIEFTU0VSVChjb2RlcG9pbnQgPSAqY29kZVBvaW50c0l0ZXJhdG9yKTsKKyNlbmRp
ZgorICAgIHJldHVybiB2WzBdOworfQorCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kTGlnYXR1cmVTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2NhdGlvbikKK3sKKyAg
ICB0eXBlZGVmIHN0ZDo6cGFpcjxWZWN0b3I8R2x5cGg+LCBHbHlwaD4gTGlnYXR1cmVQYWlyOwor
ICAgIFZlY3RvcjxMaWdhdHVyZVBhaXI+IGxpZ2F0dXJlUGFpcnM7CisgICAgZm9yIChHbHlwaCBn
bHlwaEluZGV4ID0gMDsgZ2x5cGhJbmRleCA8IG1fZ2x5cGhzLnNpemUoKTsgKytnbHlwaEluZGV4
KSB7CisgICAgICAgIFZlY3RvcjxHbHlwaD4gbGlnYXR1cmVHbHlwaHM7CisgICAgICAgIGF1dG8g
Y29kZVBvaW50cyA9IFN0cmluZ1ZpZXcobV9nbHlwaHNbZ2x5cGhJbmRleF0uY29kZXBvaW50cyku
Y29kZVBvaW50cygpOworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODU5MiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gY29kZXBvaW50
IHNwYWNlLCBub3QgZ2x5cGggc3BhY2UKKyAgICAgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IGNv
ZGVQb2ludHMpCisgICAgICAgICAgICBsaWdhdHVyZUdseXBocy5hcHBlbmQoZmlyc3RHbHlwaChs
b29rdXBDb2RlcG9pbnQoY29kZVBvaW50KSwgY29kZVBvaW50KSk7CisgICAgICAgIGlmIChsaWdh
dHVyZUdseXBocy5zaXplKCkgPCAyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxp
Z2F0dXJlUGFpcnMuYXBwZW5kKExpZ2F0dXJlUGFpcihXVEY6Om1vdmUobGlnYXR1cmVHbHlwaHMp
LCBnbHlwaEluZGV4KSk7CisgICAgfQorICAgIGlmIChsaWdhdHVyZVBhaXJzLnNpemUoKSA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgbGlnYXR1cmVQYWly
cy5jbGVhcigpOworICAgIHN0ZDo6c29ydChsaWdhdHVyZVBhaXJzLmJlZ2luKCksIGxpZ2F0dXJl
UGFpcnMuZW5kKCksIFtdKExpZ2F0dXJlUGFpciYgbGhzLCBMaWdhdHVyZVBhaXImIHJocykgewor
ICAgICAgICBBU1NFUlQobGhzLmZpcnN0LnNpemUoKSA+IDEgJiYgcmhzLmZpcnN0LnNpemUoKSA+
IDEpOworICAgICAgICByZXR1cm4gbGhzLmZpcnN0WzBdIDwgcmhzLmZpcnN0WzBdOworICAgIH0p
OworICAgIFZlY3RvcjxzaXplX3Q+IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhz
OworICAgIGlmIChsaWdhdHVyZVBhaXJzLnNpemUoKSkgeworICAgICAgICBHbHlwaCBwcmV2aW91
c0ZpcnN0R2x5cGggPSBsaWdhdHVyZVBhaXJzWzBdLmZpcnN0WzBdOworICAgICAgICBzaXplX3Qg
c2VnbWVudFN0YXJ0ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaWdhdHVy
ZVBhaXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBsaWdhdHVyZVBhaXIgPSBs
aWdhdHVyZVBhaXJzW2ldOworICAgICAgICAgICAgQVNTRVJUKGxpZ2F0dXJlUGFpci5maXJzdC5z
aXplKCkgPiAxKTsKKyAgICAgICAgICAgIGlmIChsaWdhdHVyZVBhaXIuZmlyc3RbMF0gIT0gcHJl
dmlvdXNGaXJzdEdseXBoKSB7CisgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmdGaXJzdEdseXBo
U2VnbWVudExlbmd0aHMuYXBwZW5kKGkgLSBzZWdtZW50U3RhcnQpOworICAgICAgICAgICAgICAg
IHNlZ21lbnRTdGFydCA9IGk7IC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBxdWl0ZSByaWdodCBmb3Ig
dGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG92ZXJsYXBw
aW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzLmFwcGVuZChsaWdhdHVyZVBhaXJzLnNpemUoKSAt
IHNlZ21lbnRTdGFydCk7CisgICAgfQorCisgICAgb3ZlcndyaXRlMTYoc3VidGFibGVSZWNvcmRM
b2NhdGlvbiArIDYsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pOwor
ICAgIGF1dG8gc3VidGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQx
NigxKTsgLy8gRm9ybWF0IDEKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9m
ZnNldCB0byBjb3ZlcmFnZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHN1YnN0aXR1
dGlvbiB0YWJsZQorICAgIGFwcGVuZDE2KGxpZ2F0dXJlUGFpcnMuc2l6ZSgpKTsgLy8gTnVtYmVy
IG9mIExpZ2F0dXJlU2V0IHRhYmxlcworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3Zlcmxh
cHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFwcGVu
ZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IHRvIExpZ2F0dXJlU2V0IHRhYmxlCisK
KyAgICBWZWN0b3I8c2l6ZV90PiBsaWdhdHVyZVNldFRhYmxlTG9jYXRpb25zOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgb3ZlcndyaXRlMTYoc3VidGFibGVMb2NhdGlvbiArIDYgKyAy
ICogaSwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVMb2NhdGlvbik7CisgICAgICAgIGxpZ2F0
dXJlU2V0VGFibGVMb2NhdGlvbnMuYXBwZW5kKG1fcmVzdWx0LnNpemUoKSk7CisgICAgICAgIGFw
cGVuZDE2KG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzW2ldKTsgLy8gTGlnYXR1
cmVDb3VudAorICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG92ZXJsYXBwaW5nRmlyc3RH
bHlwaFNlZ21lbnRMZW5ndGhzW2ldOyArK2opCisgICAgICAgICAgICBhcHBlbmQxNigwKTsgLy8g
UGxhY2Vob2xkZXIgZm9yIG9mZnNldCB0byBMaWdhdHVyZSB0YWJsZQorICAgIH0KKyAgICBBU1NF
UlQobGlnYXR1cmVTZXRUYWJsZUxvY2F0aW9ucy5zaXplKCkgPT0gb3ZlcmxhcHBpbmdGaXJzdEds
eXBoU2VnbWVudExlbmd0aHMuc2l6ZSgpKTsKKworICAgIHNpemVfdCBsaWdhdHVyZVBhaXJJbmRl
eCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0ZpcnN0R2x5cGhT
ZWdtZW50TGVuZ3Rocy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsg
aiA8IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzW2ldOyArK2opIHsKKyAgICAg
ICAgICAgIG92ZXJ3cml0ZTE2KGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnNbaV0gKyAyICsgMiAq
IGosIG1fcmVzdWx0LnNpemUoKSAtIGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnNbaV0pOworICAg
ICAgICAgICAgQVNTRVJUKGxpZ2F0dXJlUGFpckluZGV4IDwgbGlnYXR1cmVQYWlycy5zaXplKCkp
OworICAgICAgICAgICAgYXV0byYgbGlnYXR1cmVQYWlyID0gbGlnYXR1cmVQYWlyc1tsaWdhdHVy
ZVBhaXJJbmRleF07CisgICAgICAgICAgICBhcHBlbmQxNihsaWdhdHVyZVBhaXIuc2Vjb25kKTsK
KyAgICAgICAgICAgIGFwcGVuZDE2KGxpZ2F0dXJlUGFpci5maXJzdC5zaXplKCkpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgayA9IDE7IGsgPCBsaWdhdHVyZVBhaXIuZmlyc3Quc2l6ZSgpOyAr
K2spCisgICAgICAgICAgICAgICAgYXBwZW5kMTYobGlnYXR1cmVQYWlyLmZpcnN0W2tdKTsKKyAg
ICAgICAgICAgICsrbGlnYXR1cmVQYWlySW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNT
RVJUKGxpZ2F0dXJlUGFpckluZGV4ID09IGxpZ2F0dXJlUGFpcnMuc2l6ZSgpKTsKKworICAgIC8v
IENvdmVyYWdlIHRhYmxlCisgICAgb3ZlcndyaXRlMTYoc3VidGFibGVMb2NhdGlvbiArIDIsIG1f
cmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlTG9jYXRpb24pOworICAgIGFwcGVuZDE2KDEpOyAvLyBD
b3ZlcmFnZUZvcm1hdAorICAgIGFwcGVuZDE2KGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnMuc2l6
ZSgpKTsgLy8gR2x5cGhDb3VudAorICAgIGxpZ2F0dXJlUGFpckluZGV4ID0gMDsKKyAgICBmb3Ig
KGF1dG8gc2VnbWVudExlbmd0aCA6IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhz
KSB7CisgICAgICAgIGF1dG8mIGxpZ2F0dXJlUGFpciA9IGxpZ2F0dXJlUGFpcnNbbGlnYXR1cmVQ
YWlySW5kZXhdOworICAgICAgICBBU1NFUlQobGlnYXR1cmVQYWlyLmZpcnN0LnNpemUoKSA+IDEp
OworICAgICAgICBhcHBlbmQxNihsaWdhdHVyZVBhaXIuZmlyc3RbMF0pOworICAgICAgICBsaWdh
dHVyZVBhaXJJbmRleCArPSBzZWdtZW50TGVuZ3RoOworICAgIH0KK30KKwogdm9pZCBTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1
YnRhYmxlUmVjb3JkTG9jYXRpb24sIGNvbnN0IGNoYXIgYXJhYmljRm9ybVtdKQogewogICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8R2x5cGgsIEdseXBoPj4gYXJhYmljRmluYWxSZXBsYWNlbWVudHM7CkBA
IC01ODksNiArNjk4LDIyIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRBcmFi
aWNSZXBsYWNlbWVudFN1YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yCiAgICAgICAgIGFwcGVu
ZDE2KHBhaXIuZmlyc3QpOwogfQogCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
U2NyaXB0U3VidGFibGUodW5zaWduZWQgZmVhdHVyZUNvdW50KQoreworICAgIGF1dG8gZGZsdFNj
cmlwdFRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7CisgICAgYXBwZW5kMTYoMCk7IC8v
IFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgb2YgZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0gdGFibGUs
IHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHQgdGFibGUKKyAgICBhcHBlbmQxNigwKTsg
Ly8gTnVtYmVyIG9mIGZvbGxvd2luZyBsYW5ndWFnZSBzeXN0ZW0gdGFibGVzCisKKyAgICAvLyBM
YW5nU3lzIHRhYmxlCisgICAgb3ZlcndyaXRlMTYoZGZsdFNjcmlwdFRhYmxlTG9jYXRpb24sIG1f
cmVzdWx0LnNpemUoKSAtIGRmbHRTY3JpcHRUYWJsZUxvY2F0aW9uKTsKKyAgICBhcHBlbmQxNigw
KTsgLy8gTG9va3VwT3JkZXIgIj0gTlVMTCAuLi4gcmVzZXJ2ZWQiCisgICAgYXBwZW5kMTYoMHhG
RkZGKTsgLy8gTm8gZmVhdHVyZXMgYXJlIHJlcXVpcmVkCisgICAgYXBwZW5kMTYoZmVhdHVyZUNv
dW50KTsgLy8gTnVtYmVyIG9mIEZlYXR1cmVJbmRleCB2YWx1ZXMKKyAgICBmb3IgKHVpbnQxNl90
IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZDE2KGZlYXR1cmVD
b3VudEdTVUIgKyBpKTsgLy8gRmVhdHVyZXMgaW5kaWNlcworICAgIGZlYXR1cmVDb3VudEdTVUIg
Kz0gZmVhdHVyZUNvdW50OworfQorCiB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
R1NVQlRhYmxlKCkKIHsKICAgICBhdXRvIHRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7
CkBAIC02MDQsMjIgKzcyOSwxOCBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
R1NVQlRhYmxlKCkKIAogICAgIC8vIFNjcmlwdExpc3QKICAgICBhdXRvIHNjcmlwdExpc3RMb2Nh
dGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKLSAgICBhcHBlbmQxNigxKTsgLy8gTnVtYmVyIG9mIFNj
cmlwdFJlY29yZHMKKyAgICBhcHBlbmQxNigyKTsgLy8gTnVtYmVyIG9mIFNjcmlwdFJlY29yZHMK
KyAgICBhcHBlbmQzMkJpdENvZGUoIkRGTFQiKTsKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vo
b2xkZXIgZm9yIG9mZnNldCBvZiBTY3JpcHQgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBv
ZiBTY3JpcHRMaXN0CiAgICAgYXBwZW5kMzJCaXRDb2RlKCJhcmFiIik7Ci0gICAgYXBwZW5kMTYo
bV9yZXN1bHQuc2l6ZSgpICsgMiAtIHNjcmlwdExpc3RMb2NhdGlvbik7IC8vIE9mZnNldCBvZiBT
Y3JpcHQgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHRMaXN0CisgICAgYXBw
ZW5kMTYoMCk7IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgb2YgU2NyaXB0IHRhYmxlLCByZWxh
dGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0TGlzdAogCi0gICAgYXV0byBzY3JpcHRUYWJsZUxv
Y2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOwotICAgIGF1dG8gc2l6ZU9mRW1wdHlTY3JpcHRUYWJs
ZSA9IDQ7Ci0gICAgYXBwZW5kMTYoc2l6ZU9mRW1wdHlTY3JpcHRUYWJsZSk7IC8vIE9mZnNldCBv
ZiBkZWZhdWx0IGxhbmd1YWdlIHN5c3RlbSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9m
IFNjcmlwdCB0YWJsZQotICAgIGFwcGVuZDE2KDApOyAvLyBOdW1iZXIgb2YgZm9sbG93aW5nIGxh
bmd1YWdlIHN5c3RlbSB0YWJsZXMKLSAgICBBU1NFUlRfVU5VU0VEKHNjcmlwdFRhYmxlTG9jYXRp
b24sIHNjcmlwdFRhYmxlTG9jYXRpb24gKyBzaXplT2ZFbXB0eVNjcmlwdFRhYmxlID09IG1fcmVz
dWx0LnNpemUoKSk7CisgICAgb3ZlcndyaXRlMTYoc2NyaXB0TGlzdExvY2F0aW9uICsgNiwgbV9y
ZXN1bHQuc2l6ZSgpIC0gc2NyaXB0TGlzdExvY2F0aW9uKTsKKyAgICBhcHBlbmRTY3JpcHRTdWJ0
YWJsZSgxKTsKKyAgICBvdmVyd3JpdGUxNihzY3JpcHRMaXN0TG9jYXRpb24gKyAxMiwgbV9yZXN1
bHQuc2l6ZSgpIC0gc2NyaXB0TGlzdExvY2F0aW9uKTsKKyAgICBhcHBlbmRTY3JpcHRTdWJ0YWJs
ZSg0KTsKIAotICAgIGFwcGVuZDE2KDApOyAvLyBMb29rdXBPcmRlciAiPSBOVUxMIC4uLiByZXNl
cnZlZCIKLSAgICBhcHBlbmQxNigwKTsgLy8gRmlyc3QgZmVhdHVyZSBpcyByZXF1aXJlZAotICAg
IHVpbnQxNl90IGZlYXR1cmVDb3VudCA9IDQ7Ci0gICAgYXBwZW5kMTYoNCk7IC8vIEZlYXR1cmVD
b3VudAotICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkKLSAg
ICAgICAgYXBwZW5kMTYoaSk7IC8vIEluZGV4IG9mIG91ciBmZWF0dXJlIGludG8gdGhlIEZlYXR1
cmVMaXN0CisgICAgdW5zaWduZWQgZmVhdHVyZUNvdW50ID0gNTsKIAogICAgIC8vIEZlYXR1cmVM
aXN0CiAgICAgb3ZlcndyaXRlMTYoZmVhdHVyZUxpc3RPZmZzZXRMb2NhdGlvbiwgbV9yZXN1bHQu
c2l6ZSgpIC0gdGFibGVMb2NhdGlvbik7CkBAIC02MjcsMTQgKzc0OCwxNiBAQCB2b2lkIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR1NVQlRhYmxlKCkKICAgICBzaXplX3QgZmVhdHVyZUxp
c3RTaXplID0gMiArIDYgKiBmZWF0dXJlQ291bnQ7CiAgICAgc2l6ZV90IGZlYXR1cmVUYWJsZVNp
emUgPSA2OwogICAgIGFwcGVuZDE2KGZlYXR1cmVDb3VudCk7IC8vIEZlYXR1cmVDb3VudAotICAg
IGFwcGVuZDMyQml0Q29kZSgiZmluYSIpOworICAgIGFwcGVuZDMyQml0Q29kZSgibGlnYSIpOwog
ICAgIGFwcGVuZDE2KGZlYXR1cmVMaXN0U2l6ZSArIGZlYXR1cmVUYWJsZVNpemUgKiAwKTsgLy8g
T2Zmc2V0IG9mIGZlYXR1cmUgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBGZWF0dXJl
TGlzdCB0YWJsZQotICAgIGFwcGVuZDMyQml0Q29kZSgibWVkaSIpOworICAgIGFwcGVuZDMyQml0
Q29kZSgiZmluYSIpOwogICAgIGFwcGVuZDE2KGZlYXR1cmVMaXN0U2l6ZSArIGZlYXR1cmVUYWJs
ZVNpemUgKiAxKTsgLy8gT2Zmc2V0IG9mIGZlYXR1cmUgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lu
bmluZyBvZiBGZWF0dXJlTGlzdCB0YWJsZQotICAgIGFwcGVuZDMyQml0Q29kZSgiaW5pdCIpOwor
ICAgIGFwcGVuZDMyQml0Q29kZSgibWVkaSIpOwogICAgIGFwcGVuZDE2KGZlYXR1cmVMaXN0U2l6
ZSArIGZlYXR1cmVUYWJsZVNpemUgKiAyKTsgLy8gT2Zmc2V0IG9mIGZlYXR1cmUgdGFibGUsIHJl
bGF0aXZlIHRvIGJlZ2lubmluZyBvZiBGZWF0dXJlTGlzdCB0YWJsZQotICAgIGFwcGVuZDMyQml0
Q29kZSgicmxpZyIpOworICAgIGFwcGVuZDMyQml0Q29kZSgiaW5pdCIpOwogICAgIGFwcGVuZDE2
KGZlYXR1cmVMaXN0U2l6ZSArIGZlYXR1cmVUYWJsZVNpemUgKiAzKTsgLy8gT2Zmc2V0IG9mIGZl
YXR1cmUgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBGZWF0dXJlTGlzdCB0YWJsZQor
ICAgIGFwcGVuZDMyQml0Q29kZSgicmxpZyIpOworICAgIGFwcGVuZDE2KGZlYXR1cmVMaXN0U2l6
ZSArIGZlYXR1cmVUYWJsZVNpemUgKiA0KTsgLy8gT2Zmc2V0IG9mIGZlYXR1cmUgdGFibGUsIHJl
bGF0aXZlIHRvIGJlZ2lubmluZyBvZiBGZWF0dXJlTGlzdCB0YWJsZQogICAgIEFTU0VSVF9VTlVT
RUQoZmVhdHVyZUxpc3RMb2NhdGlvbiwgZmVhdHVyZUxpc3RMb2NhdGlvbiArIGZlYXR1cmVMaXN0
U2l6ZSA9PSBtX3Jlc3VsdC5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZlYXR1cmVDb3VudDsgKytpKSB7CkBAIC02NTUsMTggKzc3OCwyOSBAQCB2b2lkIFNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6YXBwZW5kR1NVQlRhYmxlKCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKICAgICAgICAgc3VidGFibGVSZWNvcmRMb2NhdGlv
bnNbaV0gPSBtX3Jlc3VsdC5zaXplKCk7CiAgICAgICAgIG92ZXJ3cml0ZTE2KGxvb2t1cExpc3RM
b2NhdGlvbiArIDIgKyAyICogaSwgbV9yZXN1bHQuc2l6ZSgpIC0gbG9va3VwTGlzdExvY2F0aW9u
KTsKLSAgICAgICAgYXBwZW5kMTYoaSA9PSAzID8gMyA6IDEpOyAvLyBUeXBlIDE6ICJSZXBsYWNl
IG9uZSBnbHlwaCB3aXRoIG9uZSBnbHlwaCIgLyBUeXBlIDM6ICJSZXBsYWNlIG9uZSBnbHlwaCB3
aXRoIG9uZSBvZiBtYW55IGdseXBocyIKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgIGFwcGVuZDE2KDMpOyAvLyBUeXBlIDM6ICJSZXBsYWNlIG9uZSBn
bHlwaCB3aXRoIG9uZSBvZiBtYW55IGdseXBocyIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDA6CisgICAgICAgICAgICBhcHBlbmQxNig0KTsgLy8gVHlwZSA0OiAiUmVwbGFjZSBt
dWx0aXBsZSBnbHlwaHMgd2l0aCBvbmUgZ2x5cGgiCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFwcGVuZDE2KDEpOyAvLyBUeXBlIDE6ICJSZXBsYWNl
IG9uZSBnbHlwaCB3aXRoIG9uZSBnbHlwaCIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGFwcGVuZDE2KDApOyAvLyBMb29rdXBGbGFnCiAgICAgICAgIGFwcGVuZDE2KDEp
OyAvLyBTdWJUYWJsZUNvdW50CiAgICAgICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBm
b3Igb2Zmc2V0IHRvIHN1YnRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgTG9va3VwIHRh
YmxlCiAgICAgfQogCi0gICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShzdWJ0YWJs
ZVJlY29yZExvY2F0aW9uc1swXSwgInRlcm1pbmFsIik7Ci0gICAgYXBwZW5kQXJhYmljUmVwbGFj
ZW1lbnRTdWJ0YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1sxXSwgIm1lZGlhbCIpOwotICAg
IGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNb
Ml0sICJpbml0aWFsIik7CisgICAgYXBwZW5kTGlnYXR1cmVTdWJ0YWJsZShzdWJ0YWJsZVJlY29y
ZExvY2F0aW9uc1swXSk7CisgICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShzdWJ0
YWJsZVJlY29yZExvY2F0aW9uc1sxXSwgInRlcm1pbmFsIik7CisgICAgYXBwZW5kQXJhYmljUmVw
bGFjZW1lbnRTdWJ0YWJsZShzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1syXSwgIm1lZGlhbCIpOwor
ICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlv
bnNbM10sICJpbml0aWFsIik7CiAKICAgICAvLyBNYW51YWxseSBhcHBlbmQgZW1wdHkgInJsaWci
IHN1YnRhYmxlCi0gICAgb3ZlcndyaXRlMTYoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbM10gKyA2
LCBtX3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1szXSk7CisgICAgb3Zl
cndyaXRlMTYoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbNF0gKyA2LCBtX3Jlc3VsdC5zaXplKCkg
LSBzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1s0XSk7CiAgICAgYXBwZW5kMTYoMSk7IC8vIEZvcm1h
dCAxCiAgICAgYXBwZW5kMTYoNik7IC8vIG9mZnNldCB0byBjb3ZlcmFnZSB0YWJsZSwgcmVsYXRp
dmUgdG8gYmVnaW5uaW5nIG9mIHN1YnN0aXR1dGlvbiB0YWJsZQogICAgIGFwcGVuZDE2KDApOyAv
LyBBbHRlcm5hdGVTZXRDb3VudApAQCAtNzI3LDE4ICs4NjEsMjYgQEAgdm9pZCBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZFZNVFhUYWJsZSgpCiAgICAgfQogfQogCitzdGF0aWMgU3RyaW5n
IGNvZGVwb2ludFRvU3RyaW5nKFVDaGFyMzIgY29kZXBvaW50KQoreworICAgIFVDaGFyIGJ1ZmZl
clsyXTsKKyAgICB1aW50OF90IGxlbmd0aCA9IDA7CisgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsK
KyAgICBVMTZfQVBQRU5EKGJ1ZmZlciwgbGVuZ3RoLCAyLCBjb2RlcG9pbnQsIGVycm9yKTsKKyAg
ICByZXR1cm4gZXJyb3IgPyBTdHJpbmcoKSA6IFN0cmluZyhidWZmZXIsIGxlbmd0aCk7Cit9CisK
K1ZlY3RvcjxHbHlwaCwgMT4gU1ZHVG9PVEZGb250Q29udmVydGVyOjpsb29rdXBDb2RlcG9pbnQo
VUNoYXIzMiBjb2RlcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29kZXBvaW50c1RvSW5k
aWNlc01hcC5nZXQoY29kZXBvaW50VG9TdHJpbmcoY29kZXBvaW50KSk7Cit9CisKIHZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5pY29kZVJhbmdl
cyYgdW5pY29kZVJhbmdlcywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdAogewogICAg
IGZvciAoYXV0byYgdW5pY29kZVJhbmdlIDogdW5pY29kZVJhbmdlcykgewogICAgICAgICBmb3Ig
KGF1dG8gY29kZXBvaW50ID0gdW5pY29kZVJhbmdlLmZpcnN0OyBjb2RlcG9pbnQgPD0gdW5pY29k
ZVJhbmdlLnNlY29uZDsgKytjb2RlcG9pbnQpIHsKLSAgICAgICAgICAgIFVDaGFyIGJ1ZmZlclsy
XTsKLSAgICAgICAgICAgIHVpbnQ4X3QgbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIFVCb29sIGVy
cm9yID0gZmFsc2U7Ci0gICAgICAgICAgICBVMTZfQVBQRU5EKGJ1ZmZlciwgbGVuZ3RoLCAyLCBj
b2RlcG9pbnQsIGVycm9yKTsKLSAgICAgICAgICAgIGlmICghZXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8gaW5kZXggOiBtX2NvZGVwb2ludHNUb0luZGljZXNNYXAuZ2V0KFN0cmlu
ZyhidWZmZXIsIGxlbmd0aCkpKQotICAgICAgICAgICAgICAgICAgICBnbHlwaFNldC5hZGQoaW5k
ZXgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChhdXRvIGluZGV4IDogbG9va3Vw
Q29kZXBvaW50KGNvZGVwb2ludCkpCisgICAgICAgICAgICAgICAgZ2x5cGhTZXQuYWRkKGluZGV4
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTk0Niw3ICsxMDg4LDcgQEAgVmVjdG9yPGNoYXI+
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6dHJhbnNjb2RlR2x5cGhQYXRocyhmbG9hdCB3aWR0aCwg
Y29uc3QgU1ZHRWwKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogCiAgICAgYXV0byYgZEF0dHJp
YnV0ZSA9IGdseXBoT3JNaXNzaW5nR2x5cGhFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmRBdHRyKTsKLSAgICBpZiAoZEF0dHJpYnV0ZS5pc051bGwoKSkgeworICAgIGlmIChkQXR0
cmlidXRlLmlzRW1wdHkoKSkgewogICAgICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIocmVzdWx0
LCB3aWR0aCk7CiAgICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihyZXN1bHQsIDApOwogICAg
ICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIocmVzdWx0LCAwKTsKQEAgLTEwMDcsMjggKzExNDks
NjYgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQoY29u
c3QgU1ZHRWxlbWVudCYgZ2x5cGhPck1pc3NpbmcKICAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhE
YXRhKFdURjo6bW92ZShwYXRoKSwgZ2x5cGhFbGVtZW50LCBob3Jpem9udGFsQWR2YW5jZSwgdmVy
dGljYWxBZHZhbmNlLCBtX2JvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAKK3ZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRFbXB0eUdseXBoKFN0cmluZyBjb2RlcG9pbnRzKQor
eworICAgIFZlY3RvcjxjaGFyPiBjaGFyU3RyaW5nOworICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJl
cihjaGFyU3RyaW5nLCBtX3VuaXRzUGVyRW0pOworICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihj
aGFyU3RyaW5nLCAwKTsKKyAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIoY2hhclN0cmluZywgMCk7
CisgICAgY2hhclN0cmluZy5hcHBlbmQock1vdmVUbyk7CisgICAgY2hhclN0cmluZy5hcHBlbmQo
ZW5kQ2hhcik7CisgICAgbV9nbHlwaHMuYXBwZW5kKEdseXBoRGF0YShXVEY6Om1vdmUoY2hhclN0
cmluZyksIG51bGxwdHIsIG1fdW5pdHNQZXJFbSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwg
Y29kZXBvaW50cykpOworfQorCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTGln
YXR1cmVHbHlwaHMoKQoreworICAgIEhhc2hTZXQ8VUNoYXIzMj4gbGlnYXR1cmVDb2RlcG9pbnRz
OworICAgIEhhc2hTZXQ8VUNoYXIzMj4gbm9uTGlnYXR1cmVDb2RlcG9pbnRzOworICAgIGZvciAo
YXV0byYgZ2x5cGggOiBtX2dseXBocykgeworICAgICAgICBhdXRvIGNvZGVQb2ludHMgPSBTdHJp
bmdWaWV3KGdseXBoLmNvZGVwb2ludHMpLmNvZGVQb2ludHMoKTsKKyAgICAgICAgYXV0byBjb2Rl
UG9pbnRzSXRlcmF0b3IgPSBjb2RlUG9pbnRzLmJlZ2luKCk7CisgICAgICAgIGlmIChjb2RlUG9p
bnRzSXRlcmF0b3IgPT0gY29kZVBvaW50cy5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludCA9ICpjb2RlUG9pbnRzSXRlcmF0b3I7CisgICAgICAg
ICsrY29kZVBvaW50c0l0ZXJhdG9yOworICAgICAgICBpZiAoY29kZVBvaW50c0l0ZXJhdG9yID09
IGNvZGVQb2ludHMuZW5kKCkpCisgICAgICAgICAgICBub25MaWdhdHVyZUNvZGVwb2ludHMuYWRk
KGNvZGVwb2ludCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGlnYXR1cmVDb2RlcG9p
bnRzLmFkZChjb2RlcG9pbnQpOworICAgICAgICAgICAgZm9yICg7IGNvZGVQb2ludHNJdGVyYXRv
ciAhPSBjb2RlUG9pbnRzLmVuZCgpOyArK2NvZGVQb2ludHNJdGVyYXRvcikKKyAgICAgICAgICAg
ICAgICBsaWdhdHVyZUNvZGVwb2ludHMuYWRkKCpjb2RlUG9pbnRzSXRlcmF0b3IpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGNvZGVwb2ludCA6IG5vbkxpZ2F0dXJlQ29kZXBv
aW50cykKKyAgICAgICAgbGlnYXR1cmVDb2RlcG9pbnRzLnJlbW92ZShjb2RlcG9pbnQpOworICAg
IGZvciAoYXV0byBjb2RlcG9pbnQgOiBsaWdhdHVyZUNvZGVwb2ludHMpIHsKKyAgICAgICAgYXV0
byBjb2RlcG9pbnRzID0gY29kZXBvaW50VG9TdHJpbmcoY29kZXBvaW50KTsKKyAgICAgICAgaWYg
KCFjb2RlcG9pbnRzLmlzTnVsbCgpKQorICAgICAgICAgICAgYXBwZW5kRW1wdHlHbHlwaChjb2Rl
cG9pbnRzKTsKKyAgICB9Cit9CisKIGJvb2wgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJl
Q29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5KGNvbnN0IEdseXBoRGF0YSYgZGF0YTEsIGNvbnN0
IEdseXBoRGF0YSYgZGF0YTIpCiB7Ci0gICAgdW5zaWduZWQgaTEgPSAwOwotICAgIHVuc2lnbmVk
IGkyID0gMDsKKyAgICBhdXRvIGNvZGVQb2ludHMxID0gU3RyaW5nVmlldyhkYXRhMS5jb2RlcG9p
bnRzKS5jb2RlUG9pbnRzKCk7CisgICAgYXV0byBjb2RlUG9pbnRzMiA9IFN0cmluZ1ZpZXcoZGF0
YTIuY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgIGF1dG8gaXRlcmF0b3IxID0gY29kZVBv
aW50czEuYmVnaW4oKTsKKyAgICBhdXRvIGl0ZXJhdG9yMiA9IGNvZGVQb2ludHMyLmJlZ2luKCk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IGRhdGExLmNvZGVwb2ludHMubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoMiA9IGRhdGEyLmNvZGVwb2ludHMubGVuZ3RoKCk7Ci0gICAgd2hpbGUg
KGkxIDwgbGVuZ3RoMSAmJiBpMiA8IGxlbmd0aDIpIHsKKyAgICB3aGlsZSAoaXRlcmF0b3IxICE9
IGNvZGVQb2ludHMxLmVuZCgpICYmIGl0ZXJhdG9yMiAhPSBjb2RlUG9pbnRzMi5lbmQoKSkgewog
ICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludDEsIGNvZGVwb2ludDI7Ci0gICAgICAgIGlmIChkYXRh
MS5jb2RlcG9pbnRzLmlzOEJpdCgpKQotICAgICAgICAgICAgY29kZXBvaW50MSA9IGRhdGExLmNv
ZGVwb2ludHNbaTErK107Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFUxNl9ORVhUKGRhdGEx
LmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGkxLCBsZW5ndGgxLCBjb2RlcG9pbnQxKTsKLQot
ICAgICAgICBpZiAoZGF0YTIuY29kZXBvaW50cy5pczhCaXQoKSkKLSAgICAgICAgICAgIGNvZGVw
b2ludDIgPSBkYXRhMi5jb2RlcG9pbnRzW2kyKytdOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBVMTZfTkVYVChkYXRhMi5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBpMiwgbGVuZ3RoMiwg
Y29kZXBvaW50Mik7CisgICAgICAgIGNvZGVwb2ludDEgPSAqaXRlcmF0b3IxOworICAgICAgICBj
b2RlcG9pbnQyID0gKml0ZXJhdG9yMjsKIAogICAgICAgICBpZiAoY29kZXBvaW50MSA8IGNvZGVw
b2ludDIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGNvZGVwb2ludDEg
PiBjb2RlcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICsraXRl
cmF0b3IxOworICAgICAgICArK2l0ZXJhdG9yMjsKICAgICB9CiAKICAgICBpZiAobGVuZ3RoMSA9
PSBsZW5ndGgyICYmIGRhdGExLmdseXBoRWxlbWVudApAQCAtMTA0NSw2ICsxMjI1LDcgQEAgU1ZH
VG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVs
ZW1lbnQmIGZvbnRFbGVtZW50KQogICAgICwgbV9hZHZhbmNlSGVpZ2h0TWF4KDApCiAgICAgLCBt
X21pblJpZ2h0U2lkZUJlYXJpbmcoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQog
ICAgICwgbV91bml0c1BlckVtKDApCisgICAgLCBmZWF0dXJlQ291bnRHU1VCKDApCiAgICAgLCBt
X3RhYmxlc0FwcGVuZGVkQ291bnQoMCkKICAgICAsIG1fd2VpZ2h0KDUpCiAgICAgLCBtX2l0YWxp
YyhmYWxzZSkKQEAgLTEwNTgsMTUgKzEyMzksOCBAQCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNW
R1RvT1RGRm9udENvbnZlcnRlcihjb25zdCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQpCiAK
ICAgICBpZiAobV9taXNzaW5nR2x5cGhFbGVtZW50KQogICAgICAgICBwcm9jZXNzR2x5cGhFbGVt
ZW50KCptX21pc3NpbmdHbHlwaEVsZW1lbnQsIG51bGxwdHIsIGRlZmF1bHRIb3Jpem9udGFsQWR2
YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgU3RyaW5nKCksIGluaXRpYWxHbHlwaCk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBub3RkZWZDaGFyU3RyaW5nOwotICAgICAg
ICB3cml0ZUNGRkVuY29kZWROdW1iZXIobm90ZGVmQ2hhclN0cmluZywgbV91bml0c1BlckVtKTsK
LSAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcsIDApOwotICAg
ICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIobm90ZGVmQ2hhclN0cmluZywgMCk7Ci0gICAgICAg
IG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKHJNb3ZlVG8pOwotICAgICAgICBub3RkZWZDaGFyU3Ry
aW5nLmFwcGVuZChlbmRDaGFyKTsKLSAgICAgICAgbV9nbHlwaHMuYXBwZW5kKEdseXBoRGF0YShX
VEY6Om1vdmUobm90ZGVmQ2hhclN0cmluZyksIG51bGxwdHIsIG1fdW5pdHNQZXJFbSwgbV91bml0
c1BlckVtLCBGbG9hdFJlY3QoKSwgU3RyaW5nKCkpKTsKLSAgICB9CisgICAgZWxzZQorICAgICAg
ICBhcHBlbmRFbXB0eUdseXBoKFN0cmluZygpKTsKIAogICAgIGZvciAoYXV0byYgZ2x5cGhFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHR2x5cGhFbGVtZW50PihtX2ZvbnRFbGVtZW50KSkgewog
ICAgICAgICBhdXRvJiB1bmljb2RlQXR0cmlidXRlID0gZ2x5cGhFbGVtZW50LmZhc3RHZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnVuaWNvZGVBdHRyKTsKQEAgLTEwNzQsNiArMTI0OCw4IEBAIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVt
ZW50JiBmb250RWxlbWVudCkKICAgICAgICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoZ2x5cGhF
bGVtZW50LCAmZ2x5cGhFbGVtZW50LCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRW
ZXJ0aWNhbEFkdmFuY2UsIHVuaWNvZGVBdHRyaWJ1dGUsIGluaXRpYWxHbHlwaCk7CiAgICAgfQog
CisgICAgYXBwZW5kTGlnYXR1cmVHbHlwaHMoKTsKKwogICAgIGlmIChtX2dseXBocy5zaXplKCkg
PiBzdGQ6Om51bWVyaWNfbGltaXRzPEdseXBoPjo6bWF4KCkpIHsKICAgICAgICAgbV9nbHlwaHMu
Y2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243406</attachid>
            <date>2014-12-16 17:13:10 -0800</date>
            <delta_ts>2014-12-16 17:39:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137094-20141216171400.patch</filename>
            <type>text/plain</type>
            <size>21927</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY5MzI0ZTBkZTQ5N2Q1
YWRiNTZmMDJkMTUzZWRhZTk5MGRkMDJlMC4uNDczMTEwYmE5N2MyYmUzODE5NDk0YjU3Njc0NTIw
OTk4YjMzYzQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQyIEBACiAyMDE0LTEyLTE2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBJbXBsZW1lbnQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlICJsaWdhIiBPcGVuVHlwZSBmZWF0dXJl
IHRvIGltcGxlbWVudCBsaWdhdHVyZXMgaW5zaWRlIHRoZSBHU1VCIHRhYmxlLgorCisgICAgICAg
IFRlc3RzOiBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDQtdC5zdmcKKyAgICAgICAgICAg
ICAgIHN2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC5zdmcKKyAgICAgICAgICAgICAgIHN2
Zy90ZXh0L2tlcm5pbmcuc3ZnCisgICAgICAgICAgICAgICBzdmcvdGV4dC9tdWx0aWNoYXItZ2x5
cGguc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6Omdyb3dCeUxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSk6IFVz
ZSBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmZpcnN0R2x5cGgpOiBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRo
ZSBpbnB1dAorICAgICAgICB2ZWN0b3IsIGFsb25nIHdpdGggc29tZSBBU1NFUlRzLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRMaWdhdHVyZVN1YnRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kU2NyaXB0
U3VidGFibGUpOiBVc2VkIGluc2lkZSBhcHBlbmRHU1VCVGFibGUuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSk6IFVwZGF0aW5nIGZvciBs
aWdhdHVyZXMuCisgICAgICAgIChXZWJDb3JlOjpjb2RlcG9pbnRUb1N0cmluZyk6IFdyYXBwZXIg
YXJvdW5kIFUxNl9BUFBFTkQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6Z2x5cGhzRm9yQ29kZXBvaW50KTogQ2FsbCBjb2RlcG9pbnRUb1N0cmluZyBhbmQgbG9v
aworICAgICAgICBpbiBpbnRlcm5hbCBtYXAuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6IFVzZSBnbHlwaHNGb3JDb2RlcG9pbnQo
KS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kRW1wdHlH
bHlwaCk6IENvbW1vbiBjb2RlIHB1bGxlZCBvdXQgaW50byBhCisgICAgICAgIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRMaWdhdHVyZUds
eXBocyk6IExpZ2F0dXJlcyBhcmUgaW1wbGVtZW50ZWQgYXMKKyAgICAgICAgbWFwcGluZyBhIHNl
cXVlbmNlIG9mIGdseXBocyB0byBhbm90aGVyIGdseXBoIGluc2lkZSBPcGVuVHlwZS4gSG93ZXZl
ciwgU1ZHIG1vZGVscworICAgICAgICBsaWdhdHVyZXMgYXMgbWFwcGluZyBhIHNlcXVlbmNlIG9m
IGNvZGVwb2ludHMgdG8gYSBnbHlwaC4gVGhpcyBmdW5jdGlvbiBtYWtlcyBkdW1teQorICAgICAg
ICBnbHlwaHMgZm9yIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IHdlIGRvbid0IGhhdmUgZ2x5cGhz
IGZvciBhbmQgYXBwZW5kcyB0aGVtIHRvCisgICAgICAgIG1fZ2x5cGhzLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBo
aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9P
VEZGb250Q29udmVydGVyKTogVXNlIGFwcGVuZEVtcHR5R2x5cGgoKSBhbmQKKyAgICAgICAgY2Fs
bCBhcHBlbmRMaWdhdHVyZUdseXBocygpLgorCisyMDE0LTEyLTE2ICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKICAgICAgICAgUnVieSBvdmVyaGFuZyB1c2VzIGlu
dHMgaW5zdGVhZCBvZiBmbG9hdHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzOTYyNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VG9PVEZGb250Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250
Q29udmVyc2lvbi5jcHAKaW5kZXggZWQ3ZTdjZmE2NDc5OTI2NmIzNTA0Y2VmY2MwZjRhYWE4NmQ1
ZTk5MS4uYzYyNzRhMGQwMmY0OGE3MmE5NGE4ZWQ1ZTBhZTA1ZmQ0NjI4NWYzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcApAQCAtMTA4LDYgKzEw
OCwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3Jlc3VsdC5hcHBlbmQodmFsdWUpOwogICAgIH0K
IAorICAgIHZvaWQgZ3Jvd0J5TGVuZ3RoKHNpemVfdCBudW1iZXJPZkJ5dGVzKQorICAgIHsKKyAg
ICAgICAgbV9yZXN1bHQuZ3JvdyhtX3Jlc3VsdC5zaXplKCkgKyBudW1iZXJPZkJ5dGVzKTsKKyAg
ICB9CisKICAgICB2b2lkIG92ZXJ3cml0ZTMyKHVuc2lnbmVkIGxvY2F0aW9uLCB1aW50MzJfdCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPj0gbG9jYXRpb24g
KyA0KTsKQEAgLTE0OCw2ICsxNTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kQ0ZGVGFi
bGUoKTsKICAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZSgpOwogCisgICAgdm9pZCBhcHBlbmRFbXB0
eUdseXBoKFN0cmluZyBjb2RlcG9pbnRzKTsKKyAgICB2b2lkIGFwcGVuZExpZ2F0dXJlR2x5cGhz
KCk7CiAgICAgc3RhdGljIGJvb2wgY29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShj
b25zdCBHbHlwaERhdGEmLCBjb25zdCBHbHlwaERhdGEmKTsKIAogICAgIHZvaWQgYXBwZW5kVmFs
aWRDRkZTdHJpbmcoY29uc3QgU3RyaW5nJik7CkBAIC0xNjEsNyArMTY4LDExIEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29s
IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3Qg
Y292ZXJhZ2UpOwogICAgIHNpemVfdCBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9y
PEtlcm5pbmdEYXRhPiwgdWludDE2X3QgY292ZXJhZ2UpOwogCisgICAgdm9pZCBhcHBlbmRMaWdh
dHVyZVN1YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKICAgICB2b2lkIGFw
cGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRp
b24sIGNvbnN0IGNoYXIgYXJhYmljRm9ybVtdKTsKKyAgICB2b2lkIGFwcGVuZFNjcmlwdFN1YnRh
YmxlKHVuc2lnbmVkIGZlYXR1cmVDb3VudCk7CisgICAgVmVjdG9yPEdseXBoLCAxPiBnbHlwaHNG
b3JDb2RlcG9pbnQoVUNoYXIzMiBjb2RlcG9pbnQpIGNvbnN0OworICAgIEdseXBoIGZpcnN0R2x5
cGgoVmVjdG9yPEdseXBoLCAxPiwgVUNoYXIzMiBjb2RlcG9pbnQpIGNvbnN0OwogCiAgICAgVmVj
dG9yPEdseXBoRGF0YT4gbV9nbHlwaHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEdseXBoPiBtX2ds
eXBoTmFtZVRvSW5kZXhNYXA7IC8vIFNWRyAxLjE6ICJJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGds
eXBoIG5hbWVzIGJlIHVuaXF1ZSB3aXRoaW4gYSBmb250LiIKQEAgLTE3Niw2ICsxODcsNyBAQCBw
cml2YXRlOgogICAgIGZsb2F0IG1fYWR2YW5jZUhlaWdodE1heDsKICAgICBmbG9hdCBtX21pblJp
Z2h0U2lkZUJlYXJpbmc7CiAgICAgdW5zaWduZWQgbV91bml0c1BlckVtOworICAgIHVuc2lnbmVk
IG1fZmVhdHVyZUNvdW50R1NVQjsKICAgICBpbnQgbV90YWJsZXNBcHBlbmRlZENvdW50OwogICAg
IGNoYXIgbV93ZWlnaHQ7CiAgICAgYm9vbCBtX2l0YWxpYzsKQEAgLTIyMCwxOCArMjMyLDE4IEBA
IHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUoKQogICAgIFVDaGFy
MzIgcHJldmlvdXNDb2RlcG9pbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFVDaGFyMzI+OjptYXgo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIGF1dG8mIGdseXBoID0gbV9nbHlwaHNbaV07Ci0gICAgICAgIHVuc2lnbmVkIGNvZGVw
b2ludFNpemUgPSAwOwogICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludDsKLSAgICAgICAgaWYgKGds
eXBoLmNvZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgIGF1dG8gY29kZVBvaW50cyA9IFN0cmlu
Z1ZpZXcoZ2x5cGguY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgICAgICBhdXRvIGl0ZXJh
dG9yID0gY29kZVBvaW50cy5iZWdpbigpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gY29kZVBv
aW50cy5lbmQoKSkKICAgICAgICAgICAgIGNvZGVwb2ludCA9IDA7Ci0gICAgICAgIGVsc2UgaWYg
KGdseXBoLmNvZGVwb2ludHMuaXM4Qml0KCkpCi0gICAgICAgICAgICBjb2RlcG9pbnQgPSBnbHlw
aC5jb2RlcG9pbnRzW2NvZGVwb2ludFNpemUrK107Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IFUxNl9ORVhUKGdseXBoLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGNvZGVwb2ludFNpemUs
IGdseXBoLmNvZGVwb2ludHMubGVuZ3RoKCksIGNvZGVwb2ludCk7Ci0KLSAgICAgICAgLy8gRG9u
J3QgbWFwIGxpZ2F0dXJlcyBoZXJlLgotICAgICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5sZW5n
dGgoKSA+IGNvZGVwb2ludFNpemUgfHwgY29kZXBvaW50ID09IHByZXZpb3VzQ29kZXBvaW50KQot
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29kZXBv
aW50ID0gKml0ZXJhdG9yOworICAgICAgICAgICAgKytpdGVyYXRvcjsKKyAgICAgICAgICAgIC8v
IERvbid0IG1hcCBsaWdhdHVyZXMgaGVyZS4KKyAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBj
b2RlUG9pbnRzLmVuZCgpIHx8IGNvZGVwb2ludCA9PSBwcmV2aW91c0NvZGVwb2ludCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGFwcGVuZDMyKGNvZGVw
b2ludCk7IC8vIHN0YXJ0Q2hhckNvZGUKICAgICAgICAgYXBwZW5kMzIoY29kZXBvaW50KTsgLy8g
ZW5kQ2hhckNvZGUKQEAgLTU2MSw2ICs1NzMsOTkgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZENGRlRhYmxlKCkKICAgICAgICAgbV9yZXN1bHQuYXBwZW5kVmVjdG9yKGdseXBo
LmNoYXJTdHJpbmcpOwogfQogCitHbHlwaCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmZpcnN0R2x5
cGgoVmVjdG9yPEdseXBoLCAxPiB2LCBVQ2hhcjMyIGNvZGVwb2ludCkgY29uc3QKK3sKKyNpZiBB
U1NFUlRfRElTQUJMRUQKKyAgICBVTlVTRURfUEFSQU0oY29kZXBvaW50KTsKKyNlbmRpZgorICAg
IEFTU0VSVCh2LnNpemUoKSk7CisgICAgaWYgKCF2LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGF1dG8gY29kZVBvaW50cyA9IFN0cmluZ1ZpZXco
bV9nbHlwaHNbdlswXV0uY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgIGF1dG8gY29kZVBv
aW50c0l0ZXJhdG9yID0gY29kZVBvaW50cy5iZWdpbigpOworICAgIEFTU0VSVChjb2RlUG9pbnRz
SXRlcmF0b3IgIT0gY29kZVBvaW50cy5lbmQoKSk7CisgICAgQVNTRVJUKGNvZGVwb2ludCA9ICpj
b2RlUG9pbnRzSXRlcmF0b3IpOworI2VuZGlmCisgICAgcmV0dXJuIHZbMF07Cit9CisKK3ZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRMaWdhdHVyZVN1YnRhYmxlKHNpemVfdCBzdWJ0
YWJsZVJlY29yZExvY2F0aW9uKQoreworICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZlY3RvcjxHbHlw
aD4sIEdseXBoPiBMaWdhdHVyZVBhaXI7CisgICAgVmVjdG9yPExpZ2F0dXJlUGFpcj4gbGlnYXR1
cmVQYWlyczsKKyAgICBmb3IgKEdseXBoIGdseXBoSW5kZXggPSAwOyBnbHlwaEluZGV4IDwgbV9n
bHlwaHMuc2l6ZSgpOyArK2dseXBoSW5kZXgpIHsKKyAgICAgICAgVmVjdG9yPEdseXBoPiBsaWdh
dHVyZUdseXBoczsKKyAgICAgICAgYXV0byBjb2RlUG9pbnRzID0gU3RyaW5nVmlldyhtX2dseXBo
c1tnbHlwaEluZGV4XS5jb2RlcG9pbnRzKS5jb2RlUG9pbnRzKCk7CisgICAgICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NTkyIFRoaXMgbmVl
ZHMgdG8gYmUgZG9uZSBpbiBjb2RlcG9pbnQgc3BhY2UsIG5vdCBnbHlwaCBzcGFjZQorICAgICAg
ICBmb3IgKGF1dG8gY29kZVBvaW50IDogY29kZVBvaW50cykKKyAgICAgICAgICAgIGxpZ2F0dXJl
R2x5cGhzLmFwcGVuZChmaXJzdEdseXBoKGdseXBoc0ZvckNvZGVwb2ludChjb2RlUG9pbnQpLCBj
b2RlUG9pbnQpKTsKKyAgICAgICAgaWYgKGxpZ2F0dXJlR2x5cGhzLnNpemUoKSA8IDIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbGlnYXR1cmVQYWlycy5hcHBlbmQoTGlnYXR1cmVQ
YWlyKFdURjo6bW92ZShsaWdhdHVyZUdseXBocyksIGdseXBoSW5kZXgpKTsKKyAgICB9CisgICAg
aWYgKGxpZ2F0dXJlUGFpcnMuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46
Om1heCgpKQorICAgICAgICBsaWdhdHVyZVBhaXJzLmNsZWFyKCk7CisgICAgc3RkOjpzb3J0KGxp
Z2F0dXJlUGFpcnMuYmVnaW4oKSwgbGlnYXR1cmVQYWlycy5lbmQoKSwgW10oTGlnYXR1cmVQYWly
JiBsaHMsIExpZ2F0dXJlUGFpciYgcmhzKSB7CisgICAgICAgIHJldHVybiBsaHMuZmlyc3RbMF0g
PCByaHMuZmlyc3RbMF07CisgICAgfSk7CisgICAgVmVjdG9yPHNpemVfdD4gb3ZlcmxhcHBpbmdG
aXJzdEdseXBoU2VnbWVudExlbmd0aHM7CisgICAgaWYgKGxpZ2F0dXJlUGFpcnMuc2l6ZSgpKSB7
CisgICAgICAgIEdseXBoIHByZXZpb3VzRmlyc3RHbHlwaCA9IGxpZ2F0dXJlUGFpcnNbMF0uZmly
c3RbMF07CisgICAgICAgIHNpemVfdCBzZWdtZW50U3RhcnQgPSAwOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpZ2F0dXJlUGFpcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8mIGxpZ2F0dXJlUGFpciA9IGxpZ2F0dXJlUGFpcnNbaV07CisgICAgICAgICAgICBpZiAo
bGlnYXR1cmVQYWlyLmZpcnN0WzBdICE9IHByZXZpb3VzRmlyc3RHbHlwaCkgeworICAgICAgICAg
ICAgICAgIG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzLmFwcGVuZChpIC0gc2Vn
bWVudFN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzZWdtZW50U3RhcnQgPSBpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5n
dGhzLmFwcGVuZChsaWdhdHVyZVBhaXJzLnNpemUoKSAtIHNlZ21lbnRTdGFydCk7CisgICAgfQor
CisgICAgb3ZlcndyaXRlMTYoc3VidGFibGVSZWNvcmRMb2NhdGlvbiArIDYsIG1fcmVzdWx0LnNp
emUoKSAtIHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pOworICAgIGF1dG8gc3VidGFibGVMb2NhdGlv
biA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQxNigxKTsgLy8gRm9ybWF0IDEKKyAgICBh
cHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCB0byBjb3ZlcmFnZSB0YWJsZSwg
cmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHN1YnN0aXR1dGlvbiB0YWJsZQorICAgIGFwcGVuZDE2
KGxpZ2F0dXJlUGFpcnMuc2l6ZSgpKTsgLy8gTnVtYmVyIG9mIExpZ2F0dXJlU2V0IHRhYmxlcwor
ICAgIGdyb3dCeUxlbmd0aChvdmVybGFwcGluZ0ZpcnN0R2x5cGhTZWdtZW50TGVuZ3Rocy5zaXpl
KCkgKiAyKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCB0byBMaWdhdHVyZVNldCB0YWJsZQor
CisgICAgVmVjdG9yPHNpemVfdD4gbGlnYXR1cmVTZXRUYWJsZUxvY2F0aW9uczsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxlTG9jYXRpb24gKyA2ICsg
MiAqIGksIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlTG9jYXRpb24pOworICAgICAgICBsaWdh
dHVyZVNldFRhYmxlTG9jYXRpb25zLmFwcGVuZChtX3Jlc3VsdC5zaXplKCkpOworICAgICAgICBh
cHBlbmQxNihvdmVybGFwcGluZ0ZpcnN0R2x5cGhTZWdtZW50TGVuZ3Roc1tpXSk7IC8vIExpZ2F0
dXJlQ291bnQKKyAgICAgICAgZ3Jvd0J5TGVuZ3RoKG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21l
bnRMZW5ndGhzW2ldICogMik7IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgdG8gTGlnYXR1cmUg
dGFibGUKKyAgICB9CisgICAgQVNTRVJUKGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnMuc2l6ZSgp
ID09IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzLnNpemUoKSk7CisKKyAgICBz
aXplX3QgbGlnYXR1cmVQYWlySW5kZXggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBvdmVybGFwcGluZ0ZpcnN0R2x5cGhTZWdtZW50TGVu
Z3Roc1tpXTsgKytqKSB7CisgICAgICAgICAgICBvdmVyd3JpdGUxNihsaWdhdHVyZVNldFRhYmxl
TG9jYXRpb25zW2ldICsgMiArIDIgKiBqLCBtX3Jlc3VsdC5zaXplKCkgLSBsaWdhdHVyZVNldFRh
YmxlTG9jYXRpb25zW2ldKTsKKyAgICAgICAgICAgIGF1dG8mIGxpZ2F0dXJlUGFpciA9IGxpZ2F0
dXJlUGFpcnNbbGlnYXR1cmVQYWlySW5kZXhdOworICAgICAgICAgICAgYXBwZW5kMTYobGlnYXR1
cmVQYWlyLnNlY29uZCk7CisgICAgICAgICAgICBhcHBlbmQxNihsaWdhdHVyZVBhaXIuZmlyc3Qu
c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAxOyBrIDwgbGlnYXR1cmVQYWly
LmZpcnN0LnNpemUoKTsgKytrKQorICAgICAgICAgICAgICAgIGFwcGVuZDE2KGxpZ2F0dXJlUGFp
ci5maXJzdFtrXSk7CisgICAgICAgICAgICArK2xpZ2F0dXJlUGFpckluZGV4OworICAgICAgICB9
CisgICAgfQorICAgIEFTU0VSVChsaWdhdHVyZVBhaXJJbmRleCA9PSBsaWdhdHVyZVBhaXJzLnNp
emUoKSk7CisKKyAgICAvLyBDb3ZlcmFnZSB0YWJsZQorICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxl
TG9jYXRpb24gKyAyLCBtX3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJsZUxvY2F0aW9uKTsKKyAgICBh
cHBlbmQxNigxKTsgLy8gQ292ZXJhZ2VGb3JtYXQKKyAgICBhcHBlbmQxNihsaWdhdHVyZVNldFRh
YmxlTG9jYXRpb25zLnNpemUoKSk7IC8vIEdseXBoQ291bnQKKyAgICBsaWdhdHVyZVBhaXJJbmRl
eCA9IDA7CisgICAgZm9yIChhdXRvIHNlZ21lbnRMZW5ndGggOiBvdmVybGFwcGluZ0ZpcnN0R2x5
cGhTZWdtZW50TGVuZ3RocykgeworICAgICAgICBhdXRvJiBsaWdhdHVyZVBhaXIgPSBsaWdhdHVy
ZVBhaXJzW2xpZ2F0dXJlUGFpckluZGV4XTsKKyAgICAgICAgQVNTRVJUKGxpZ2F0dXJlUGFpci5m
aXJzdC5zaXplKCkgPiAxKTsKKyAgICAgICAgYXBwZW5kMTYobGlnYXR1cmVQYWlyLmZpcnN0WzBd
KTsKKyAgICAgICAgbGlnYXR1cmVQYWlySW5kZXggKz0gc2VnbWVudExlbmd0aDsKKyAgICB9Cit9
CisKIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1
YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uLCBjb25zdCBjaGFyIGFyYWJpY0Zv
cm1bXSkKIHsKICAgICBWZWN0b3I8c3RkOjpwYWlyPEdseXBoLCBHbHlwaD4+IGFyYWJpY0ZpbmFs
UmVwbGFjZW1lbnRzOwpAQCAtNTg5LDYgKzY5NCwyMiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNv
cgogICAgICAgICBhcHBlbmQxNihwYWlyLmZpcnN0KTsKIH0KIAordm9pZCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZFNjcmlwdFN1YnRhYmxlKHVuc2lnbmVkIGZlYXR1cmVDb3VudCkKK3sK
KyAgICBhdXRvIGRmbHRTY3JpcHRUYWJsZUxvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAg
IGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIGRlZmF1bHQgbGFuZ3Vh
Z2Ugc3lzdGVtIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0IHRhYmxlCisg
ICAgYXBwZW5kMTYoMCk7IC8vIE51bWJlciBvZiBmb2xsb3dpbmcgbGFuZ3VhZ2Ugc3lzdGVtIHRh
YmxlcworCisgICAgLy8gTGFuZ1N5cyB0YWJsZQorICAgIG92ZXJ3cml0ZTE2KGRmbHRTY3JpcHRU
YWJsZUxvY2F0aW9uLCBtX3Jlc3VsdC5zaXplKCkgLSBkZmx0U2NyaXB0VGFibGVMb2NhdGlvbik7
CisgICAgYXBwZW5kMTYoMCk7IC8vIExvb2t1cE9yZGVyICI9IE5VTEwgLi4uIHJlc2VydmVkIgor
ICAgIGFwcGVuZDE2KDB4RkZGRik7IC8vIE5vIGZlYXR1cmVzIGFyZSByZXF1aXJlZAorICAgIGFw
cGVuZDE2KGZlYXR1cmVDb3VudCk7IC8vIE51bWJlciBvZiBGZWF0dXJlSW5kZXggdmFsdWVzCisg
ICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytpKQorICAgICAgICBh
cHBlbmQxNihtX2ZlYXR1cmVDb3VudEdTVUIgKyBpKTsgLy8gRmVhdHVyZXMgaW5kaWNlcworICAg
IG1fZmVhdHVyZUNvdW50R1NVQiArPSBmZWF0dXJlQ291bnQ7Cit9CisKIHZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUoKQogewogICAgIGF1dG8gdGFibGVMb2NhdGlv
biA9IG1fcmVzdWx0LnNpemUoKTsKQEAgLTYwNCwyMiArNzI1LDE4IEBAIHZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUoKQogCiAgICAgLy8gU2NyaXB0TGlzdAogICAg
IGF1dG8gc2NyaXB0TGlzdExvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOwotICAgIGFwcGVuZDE2
KDEpOyAvLyBOdW1iZXIgb2YgU2NyaXB0UmVjb3JkcworICAgIGFwcGVuZDE2KDIpOyAvLyBOdW1i
ZXIgb2YgU2NyaXB0UmVjb3JkcworICAgIGFwcGVuZDMyQml0Q29kZSgiREZMVCIpOworICAgIGFw
cGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIFNjcmlwdCB0YWJsZSwgcmVs
YXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlwdExpc3QKICAgICBhcHBlbmQzMkJpdENvZGUoImFy
YWIiKTsKLSAgICBhcHBlbmQxNihtX3Jlc3VsdC5zaXplKCkgKyAyIC0gc2NyaXB0TGlzdExvY2F0
aW9uKTsgLy8gT2Zmc2V0IG9mIFNjcmlwdCB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9m
IFNjcmlwdExpc3QKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCBv
ZiBTY3JpcHQgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHRMaXN0CiAKLSAg
ICBhdXRvIHNjcmlwdFRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7Ci0gICAgYXV0byBz
aXplT2ZFbXB0eVNjcmlwdFRhYmxlID0gNDsKLSAgICBhcHBlbmQxNihzaXplT2ZFbXB0eVNjcmlw
dFRhYmxlKTsgLy8gT2Zmc2V0IG9mIGRlZmF1bHQgbGFuZ3VhZ2Ugc3lzdGVtIHRhYmxlLCByZWxh
dGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0IHRhYmxlCi0gICAgYXBwZW5kMTYoMCk7IC8vIE51
bWJlciBvZiBmb2xsb3dpbmcgbGFuZ3VhZ2Ugc3lzdGVtIHRhYmxlcwotICAgIEFTU0VSVF9VTlVT
RUQoc2NyaXB0VGFibGVMb2NhdGlvbiwgc2NyaXB0VGFibGVMb2NhdGlvbiArIHNpemVPZkVtcHR5
U2NyaXB0VGFibGUgPT0gbV9yZXN1bHQuc2l6ZSgpKTsKKyAgICBvdmVyd3JpdGUxNihzY3JpcHRM
aXN0TG9jYXRpb24gKyA2LCBtX3Jlc3VsdC5zaXplKCkgLSBzY3JpcHRMaXN0TG9jYXRpb24pOwor
ICAgIGFwcGVuZFNjcmlwdFN1YnRhYmxlKDEpOworICAgIG92ZXJ3cml0ZTE2KHNjcmlwdExpc3RM
b2NhdGlvbiArIDEyLCBtX3Jlc3VsdC5zaXplKCkgLSBzY3JpcHRMaXN0TG9jYXRpb24pOworICAg
IGFwcGVuZFNjcmlwdFN1YnRhYmxlKDQpOwogCi0gICAgYXBwZW5kMTYoMCk7IC8vIExvb2t1cE9y
ZGVyICI9IE5VTEwgLi4uIHJlc2VydmVkIgotICAgIGFwcGVuZDE2KDApOyAvLyBGaXJzdCBmZWF0
dXJlIGlzIHJlcXVpcmVkCi0gICAgdWludDE2X3QgZmVhdHVyZUNvdW50ID0gNDsKLSAgICBhcHBl
bmQxNig0KTsgLy8gRmVhdHVyZUNvdW50Ci0gICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGZl
YXR1cmVDb3VudDsgKytpKQotICAgICAgICBhcHBlbmQxNihpKTsgLy8gSW5kZXggb2Ygb3VyIGZl
YXR1cmUgaW50byB0aGUgRmVhdHVyZUxpc3QKKyAgICB1bnNpZ25lZCBmZWF0dXJlQ291bnQgPSA1
OwogCiAgICAgLy8gRmVhdHVyZUxpc3QKICAgICBvdmVyd3JpdGUxNihmZWF0dXJlTGlzdE9mZnNl
dExvY2F0aW9uLCBtX3Jlc3VsdC5zaXplKCkgLSB0YWJsZUxvY2F0aW9uKTsKQEAgLTYyNywxNCAr
NzQ0LDE2IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUoKQog
ICAgIHNpemVfdCBmZWF0dXJlTGlzdFNpemUgPSAyICsgNiAqIGZlYXR1cmVDb3VudDsKICAgICBz
aXplX3QgZmVhdHVyZVRhYmxlU2l6ZSA9IDY7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUNvdW50KTsg
Ly8gRmVhdHVyZUNvdW50Ci0gICAgYXBwZW5kMzJCaXRDb2RlKCJmaW5hIik7CisgICAgYXBwZW5k
MzJCaXRDb2RlKCJsaWdhIik7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVy
ZVRhYmxlU2l6ZSAqIDApOyAvLyBPZmZzZXQgb2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8g
YmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRhYmxlCi0gICAgYXBwZW5kMzJCaXRDb2RlKCJtZWRp
Iik7CisgICAgYXBwZW5kMzJCaXRDb2RlKCJmaW5hIik7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUxp
c3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIDEpOyAvLyBPZmZzZXQgb2YgZmVhdHVyZSB0YWJs
ZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRhYmxlCi0gICAgYXBwZW5k
MzJCaXRDb2RlKCJpbml0Iik7CisgICAgYXBwZW5kMzJCaXRDb2RlKCJtZWRpIik7CiAgICAgYXBw
ZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIDIpOyAvLyBPZmZzZXQg
b2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRh
YmxlCi0gICAgYXBwZW5kMzJCaXRDb2RlKCJybGlnIik7CisgICAgYXBwZW5kMzJCaXRDb2RlKCJp
bml0Iik7CiAgICAgYXBwZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAq
IDMpOyAvLyBPZmZzZXQgb2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9m
IEZlYXR1cmVMaXN0IHRhYmxlCisgICAgYXBwZW5kMzJCaXRDb2RlKCJybGlnIik7CisgICAgYXBw
ZW5kMTYoZmVhdHVyZUxpc3RTaXplICsgZmVhdHVyZVRhYmxlU2l6ZSAqIDQpOyAvLyBPZmZzZXQg
b2YgZmVhdHVyZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIEZlYXR1cmVMaXN0IHRh
YmxlCiAgICAgQVNTRVJUX1VOVVNFRChmZWF0dXJlTGlzdExvY2F0aW9uLCBmZWF0dXJlTGlzdExv
Y2F0aW9uICsgZmVhdHVyZUxpc3RTaXplID09IG1fcmVzdWx0LnNpemUoKSk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKQEAgLTY1NSwxOCArNzc0
LDI5IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUoKQogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewogICAgICAgICBz
dWJ0YWJsZVJlY29yZExvY2F0aW9uc1tpXSA9IG1fcmVzdWx0LnNpemUoKTsKICAgICAgICAgb3Zl
cndyaXRlMTYobG9va3VwTGlzdExvY2F0aW9uICsgMiArIDIgKiBpLCBtX3Jlc3VsdC5zaXplKCkg
LSBsb29rdXBMaXN0TG9jYXRpb24pOwotICAgICAgICBhcHBlbmQxNihpID09IDMgPyAzIDogMSk7
IC8vIFR5cGUgMTogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIGdseXBoIiAvIFR5cGUgMzog
IlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIG9mIG1hbnkgZ2x5cGhzIgorICAgICAgICBzd2l0
Y2ggKGkpIHsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgYXBwZW5kMTYoMyk7IC8vIFR5
cGUgMzogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIG9mIG1hbnkgZ2x5cGhzIgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGFwcGVuZDE2KDQpOyAv
LyBUeXBlIDQ6ICJSZXBsYWNlIG11bHRpcGxlIGdseXBocyB3aXRoIG9uZSBnbHlwaCIKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXBwZW5kMTYoMSk7
IC8vIFR5cGUgMTogIlJlcGxhY2Ugb25lIGdseXBoIHdpdGggb25lIGdseXBoIgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYXBwZW5kMTYoMCk7IC8vIExvb2t1cEZsYWcK
ICAgICAgICAgYXBwZW5kMTYoMSk7IC8vIFN1YlRhYmxlQ291bnQKICAgICAgICAgYXBwZW5kMTYo
MCk7IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgdG8gc3VidGFibGUsIHJlbGF0aXZlIHRvIGJl
Z2lubmluZyBvZiBMb29rdXAgdGFibGUKICAgICB9CiAKLSAgICBhcHBlbmRBcmFiaWNSZXBsYWNl
bWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzBdLCAidGVybWluYWwiKTsKLSAg
ICBhcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25z
WzFdLCAibWVkaWFsIik7Ci0gICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShzdWJ0
YWJsZVJlY29yZExvY2F0aW9uc1syXSwgImluaXRpYWwiKTsKKyAgICBhcHBlbmRMaWdhdHVyZVN1
YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzBdKTsKKyAgICBhcHBlbmRBcmFiaWNSZXBs
YWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzFdLCAidGVybWluYWwiKTsK
KyAgICBhcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRp
b25zWzJdLCAibWVkaWFsIik7CisgICAgYXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShz
dWJ0YWJsZVJlY29yZExvY2F0aW9uc1szXSwgImluaXRpYWwiKTsKIAogICAgIC8vIE1hbnVhbGx5
IGFwcGVuZCBlbXB0eSAicmxpZyIgc3VidGFibGUKLSAgICBvdmVyd3JpdGUxNihzdWJ0YWJsZVJl
Y29yZExvY2F0aW9uc1szXSArIDYsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlUmVjb3JkTG9j
YXRpb25zWzNdKTsKKyAgICBvdmVyd3JpdGUxNihzdWJ0YWJsZVJlY29yZExvY2F0aW9uc1s0XSAr
IDYsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzRdKTsKICAgICBh
cHBlbmQxNigxKTsgLy8gRm9ybWF0IDEKICAgICBhcHBlbmQxNig2KTsgLy8gb2Zmc2V0IHRvIGNv
dmVyYWdlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3Vic3RpdHV0aW9uIHRhYmxl
CiAgICAgYXBwZW5kMTYoMCk7IC8vIEFsdGVybmF0ZVNldENvdW50CkBAIC03MjcsMTggKzg1Nywy
NiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk1UWFRhYmxlKCkKICAgICB9
CiB9CiAKK3N0YXRpYyBTdHJpbmcgY29kZXBvaW50VG9TdHJpbmcoVUNoYXIzMiBjb2RlcG9pbnQp
Cit7CisgICAgVUNoYXIgYnVmZmVyWzJdOworICAgIHVpbnQ4X3QgbGVuZ3RoID0gMDsKKyAgICBV
Qm9vbCBlcnJvciA9IGZhbHNlOworICAgIFUxNl9BUFBFTkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNv
ZGVwb2ludCwgZXJyb3IpOworICAgIHJldHVybiBlcnJvciA/IFN0cmluZygpIDogU3RyaW5nKGJ1
ZmZlciwgbGVuZ3RoKTsKK30KKworVmVjdG9yPEdseXBoLCAxPiBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmdseXBoc0ZvckNvZGVwb2ludChVQ2hhcjMyIGNvZGVwb2ludCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFwLmdldChjb2RlcG9pbnRUb1N0cmluZyhjb2Rl
cG9pbnQpKTsKK30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludFJh
bmdlcyhjb25zdCBVbmljb2RlUmFuZ2VzJiB1bmljb2RlUmFuZ2VzLCBIYXNoU2V0PEdseXBoPiYg
Z2x5cGhTZXQpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiB1bmljb2RlUmFuZ2UgOiB1bmljb2Rl
UmFuZ2VzKSB7CiAgICAgICAgIGZvciAoYXV0byBjb2RlcG9pbnQgPSB1bmljb2RlUmFuZ2UuZmly
c3Q7IGNvZGVwb2ludCA8PSB1bmljb2RlUmFuZ2Uuc2Vjb25kOyArK2NvZGVwb2ludCkgewotICAg
ICAgICAgICAgVUNoYXIgYnVmZmVyWzJdOwotICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSAw
OwotICAgICAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsKLSAgICAgICAgICAgIFUxNl9BUFBF
TkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNvZGVwb2ludCwgZXJyb3IpOwotICAgICAgICAgICAgaWYg
KCFlcnJvcikgewotICAgICAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBvaW50
c1RvSW5kaWNlc01hcC5nZXQoU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpCi0gICAgICAgICAgICAg
ICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKGF1dG8gaW5kZXggOiBnbHlwaHNGb3JDb2RlcG9pbnQoY29kZXBvaW50KSkKKyAgICAgICAg
ICAgICAgICBnbHlwaFNldC5hZGQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTAw
NywyOCArMTE0NSw2NiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vzc0dseXBo
RWxlbWVudChjb25zdCBTVkdFbGVtZW50JiBnbHlwaE9yTWlzc2luZwogICAgIG1fZ2x5cGhzLmFw
cGVuZChHbHlwaERhdGEoV1RGOjptb3ZlKHBhdGgpLCBnbHlwaEVsZW1lbnQsIGhvcml6b250YWxB
ZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIG1fYm91bmRpbmdCb3gsIGNvZGVwb2ludHMpKTsKIH0K
IAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEVtcHR5R2x5cGgoU3RyaW5nIGNv
ZGVwb2ludHMpCit7CisgICAgVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmc7CisgICAgd3JpdGVDRkZF
bmNvZGVkTnVtYmVyKGNoYXJTdHJpbmcsIG1fdW5pdHNQZXJFbSk7CisgICAgd3JpdGVDRkZFbmNv
ZGVkTnVtYmVyKGNoYXJTdHJpbmcsIDApOworICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihjaGFy
U3RyaW5nLCAwKTsKKyAgICBjaGFyU3RyaW5nLmFwcGVuZChyTW92ZVRvKTsKKyAgICBjaGFyU3Ry
aW5nLmFwcGVuZChlbmRDaGFyKTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKFdURjo6
bW92ZShjaGFyU3RyaW5nKSwgbnVsbHB0ciwgbV91bml0c1BlckVtLCBtX3VuaXRzUGVyRW0sIEZs
b2F0UmVjdCgpLCBjb2RlcG9pbnRzKSk7Cit9CisKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRMaWdhdHVyZUdseXBocygpCit7CisgICAgSGFzaFNldDxVQ2hhcjMyPiBsaWdhdHVy
ZUNvZGVwb2ludHM7CisgICAgSGFzaFNldDxVQ2hhcjMyPiBub25MaWdhdHVyZUNvZGVwb2ludHM7
CisgICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhzKSB7CisgICAgICAgIGF1dG8gY29kZVBv
aW50cyA9IFN0cmluZ1ZpZXcoZ2x5cGguY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgICAg
ICBhdXRvIGNvZGVQb2ludHNJdGVyYXRvciA9IGNvZGVQb2ludHMuYmVnaW4oKTsKKyAgICAgICAg
aWYgKGNvZGVQb2ludHNJdGVyYXRvciA9PSBjb2RlUG9pbnRzLmVuZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIFVDaGFyMzIgY29kZXBvaW50ID0gKmNvZGVQb2ludHNJdGVyYXRv
cjsKKyAgICAgICAgKytjb2RlUG9pbnRzSXRlcmF0b3I7CisgICAgICAgIGlmIChjb2RlUG9pbnRz
SXRlcmF0b3IgPT0gY29kZVBvaW50cy5lbmQoKSkKKyAgICAgICAgICAgIG5vbkxpZ2F0dXJlQ29k
ZXBvaW50cy5hZGQoY29kZXBvaW50KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaWdh
dHVyZUNvZGVwb2ludHMuYWRkKGNvZGVwb2ludCk7CisgICAgICAgICAgICBmb3IgKDsgY29kZVBv
aW50c0l0ZXJhdG9yICE9IGNvZGVQb2ludHMuZW5kKCk7ICsrY29kZVBvaW50c0l0ZXJhdG9yKQor
ICAgICAgICAgICAgICAgIGxpZ2F0dXJlQ29kZXBvaW50cy5hZGQoKmNvZGVQb2ludHNJdGVyYXRv
cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDogbm9uTGln
YXR1cmVDb2RlcG9pbnRzKQorICAgICAgICBsaWdhdHVyZUNvZGVwb2ludHMucmVtb3ZlKGNvZGVw
b2ludCk7CisgICAgZm9yIChhdXRvIGNvZGVwb2ludCA6IGxpZ2F0dXJlQ29kZXBvaW50cykgewor
ICAgICAgICBhdXRvIGNvZGVwb2ludHMgPSBjb2RlcG9pbnRUb1N0cmluZyhjb2RlcG9pbnQpOwor
ICAgICAgICBpZiAoIWNvZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgICAgICBhcHBlbmRFbXB0
eUdseXBoKGNvZGVwb2ludHMpOworICAgIH0KK30KKwogYm9vbCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmNvbXBhcmVDb2RlcG9pbnRzTGV4aWNvZ3JhcGhpY2FsbHkoY29uc3QgR2x5cGhEYXRhJiBk
YXRhMSwgY29uc3QgR2x5cGhEYXRhJiBkYXRhMikKIHsKLSAgICB1bnNpZ25lZCBpMSA9IDA7Ci0g
ICAgdW5zaWduZWQgaTIgPSAwOworICAgIGF1dG8gY29kZVBvaW50czEgPSBTdHJpbmdWaWV3KGRh
dGExLmNvZGVwb2ludHMpLmNvZGVQb2ludHMoKTsKKyAgICBhdXRvIGNvZGVQb2ludHMyID0gU3Ry
aW5nVmlldyhkYXRhMi5jb2RlcG9pbnRzKS5jb2RlUG9pbnRzKCk7CisgICAgYXV0byBpdGVyYXRv
cjEgPSBjb2RlUG9pbnRzMS5iZWdpbigpOworICAgIGF1dG8gaXRlcmF0b3IyID0gY29kZVBvaW50
czIuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gZGF0YTEuY29kZXBvaW50cy5sZW5n
dGgoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgyID0gZGF0YTIuY29kZXBvaW50cy5sZW5ndGgoKTsK
LSAgICB3aGlsZSAoaTEgPCBsZW5ndGgxICYmIGkyIDwgbGVuZ3RoMikgeworICAgIHdoaWxlIChp
dGVyYXRvcjEgIT0gY29kZVBvaW50czEuZW5kKCkgJiYgaXRlcmF0b3IyICE9IGNvZGVQb2ludHMy
LmVuZCgpKSB7CiAgICAgICAgIFVDaGFyMzIgY29kZXBvaW50MSwgY29kZXBvaW50MjsKLSAgICAg
ICAgaWYgKGRhdGExLmNvZGVwb2ludHMuaXM4Qml0KCkpCi0gICAgICAgICAgICBjb2RlcG9pbnQx
ID0gZGF0YTEuY29kZXBvaW50c1tpMSsrXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgVTE2
X05FWFQoZGF0YTEuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgaTEsIGxlbmd0aDEsIGNvZGVw
b2ludDEpOwotCi0gICAgICAgIGlmIChkYXRhMi5jb2RlcG9pbnRzLmlzOEJpdCgpKQotICAgICAg
ICAgICAgY29kZXBvaW50MiA9IGRhdGEyLmNvZGVwb2ludHNbaTIrK107Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIFUxNl9ORVhUKGRhdGEyLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGky
LCBsZW5ndGgyLCBjb2RlcG9pbnQyKTsKKyAgICAgICAgY29kZXBvaW50MSA9ICppdGVyYXRvcjE7
CisgICAgICAgIGNvZGVwb2ludDIgPSAqaXRlcmF0b3IyOwogCiAgICAgICAgIGlmIChjb2RlcG9p
bnQxIDwgY29kZXBvaW50MikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAo
Y29kZXBvaW50MSA+IGNvZGVwb2ludDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgKytpdGVyYXRvcjE7CisgICAgICAgICsraXRlcmF0b3IyOwogICAgIH0KIAogICAgIGlm
IChsZW5ndGgxID09IGxlbmd0aDIgJiYgZGF0YTEuZ2x5cGhFbGVtZW50CkBAIC0xMDQ1LDYgKzEy
MjEsNyBAQCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihjb25z
dCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQpCiAgICAgLCBtX2FkdmFuY2VIZWlnaHRNYXgo
MCkKICAgICAsIG1fbWluUmlnaHRTaWRlQmVhcmluZyhzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6bWF4KCkpCiAgICAgLCBtX3VuaXRzUGVyRW0oMCkKKyAgICAsIG1fZmVhdHVyZUNvdW50R1NV
QigwKQogICAgICwgbV90YWJsZXNBcHBlbmRlZENvdW50KDApCiAgICAgLCBtX3dlaWdodCg1KQog
ICAgICwgbV9pdGFsaWMoZmFsc2UpCkBAIC0xMDU4LDE1ICsxMjM1LDggQEAgU1ZHVG9PVEZGb250
Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZv
bnRFbGVtZW50KQogCiAgICAgaWYgKG1fbWlzc2luZ0dseXBoRWxlbWVudCkKICAgICAgICAgcHJv
Y2Vzc0dseXBoRWxlbWVudCgqbV9taXNzaW5nR2x5cGhFbGVtZW50LCBudWxscHRyLCBkZWZhdWx0
SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIFN0cmluZygpLCBpbml0
aWFsR2x5cGgpOwotICAgIGVsc2UgewotICAgICAgICBWZWN0b3I8Y2hhcj4gbm90ZGVmQ2hhclN0
cmluZzsKLSAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcsIG1f
dW5pdHNQZXJFbSk7Ci0gICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihub3RkZWZDaGFyU3Ry
aW5nLCAwKTsKLSAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcs
IDApOwotICAgICAgICBub3RkZWZDaGFyU3RyaW5nLmFwcGVuZChyTW92ZVRvKTsKLSAgICAgICAg
bm90ZGVmQ2hhclN0cmluZy5hcHBlbmQoZW5kQ2hhcik7Ci0gICAgICAgIG1fZ2x5cGhzLmFwcGVu
ZChHbHlwaERhdGEoV1RGOjptb3ZlKG5vdGRlZkNoYXJTdHJpbmcpLCBudWxscHRyLCBtX3VuaXRz
UGVyRW0sIG1fdW5pdHNQZXJFbSwgRmxvYXRSZWN0KCksIFN0cmluZygpKSk7Ci0gICAgfQorICAg
IGVsc2UKKyAgICAgICAgYXBwZW5kRW1wdHlHbHlwaChTdHJpbmcoKSk7CiAKICAgICBmb3IgKGF1
dG8mIGdseXBoRWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0dseXBoRWxlbWVudD4obV9mb250
RWxlbWVudCkpIHsKICAgICAgICAgYXV0byYgdW5pY29kZUF0dHJpYnV0ZSA9IGdseXBoRWxlbWVu
dC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjp1bmljb2RlQXR0cik7CkBAIC0xMDc0LDYgKzEy
NDQsOCBAQCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihjb25z
dCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQpCiAgICAgICAgICAgICBwcm9jZXNzR2x5cGhF
bGVtZW50KGdseXBoRWxlbWVudCwgJmdseXBoRWxlbWVudCwgZGVmYXVsdEhvcml6b250YWxBZHZh
bmNlLCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCB1bmljb2RlQXR0cmlidXRlLCBpbml0aWFsR2x5
cGgpOwogICAgIH0KIAorICAgIGFwcGVuZExpZ2F0dXJlR2x5cGhzKCk7CisKICAgICBpZiAobV9n
bHlwaHMuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czxHbHlwaD46Om1heCgpKSB7CiAgICAg
ICAgIG1fZ2x5cGhzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243412</attachid>
            <date>2014-12-16 17:40:02 -0800</date>
            <delta_ts>2015-01-06 17:52:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137094-20141216174052.patch</filename>
            <type>text/plain</type>
            <size>22325</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY5MzI0ZTBkZTQ5N2Q1
YWRiNTZmMDJkMTUzZWRhZTk5MGRkMDJlMC4uNDczMTEwYmE5N2MyYmUzODE5NDk0YjU3Njc0NTIw
OTk4YjMzYzQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQyIEBACiAyMDE0LTEyLTE2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBJbXBsZW1lbnQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlICJsaWdhIiBPcGVuVHlwZSBmZWF0dXJl
IHRvIGltcGxlbWVudCBsaWdhdHVyZXMgaW5zaWRlIHRoZSBHU1VCIHRhYmxlLgorCisgICAgICAg
IFRlc3RzOiBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDQtdC5zdmcKKyAgICAgICAgICAg
ICAgIHN2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC5zdmcKKyAgICAgICAgICAgICAgIHN2
Zy90ZXh0L2tlcm5pbmcuc3ZnCisgICAgICAgICAgICAgICBzdmcvdGV4dC9tdWx0aWNoYXItZ2x5
cGguc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6Omdyb3dCeUxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSk6IFVz
ZSBTdHJpbmdWaWV3Ojpjb2RlUG9pbnRzKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmZpcnN0R2x5cGgpOiBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRo
ZSBpbnB1dAorICAgICAgICB2ZWN0b3IsIGFsb25nIHdpdGggc29tZSBBU1NFUlRzLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRMaWdhdHVyZVN1YnRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kU2NyaXB0
U3VidGFibGUpOiBVc2VkIGluc2lkZSBhcHBlbmRHU1VCVGFibGUuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSk6IFVwZGF0aW5nIGZvciBs
aWdhdHVyZXMuCisgICAgICAgIChXZWJDb3JlOjpjb2RlcG9pbnRUb1N0cmluZyk6IFdyYXBwZXIg
YXJvdW5kIFUxNl9BUFBFTkQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6Z2x5cGhzRm9yQ29kZXBvaW50KTogQ2FsbCBjb2RlcG9pbnRUb1N0cmluZyBhbmQgbG9v
aworICAgICAgICBpbiBpbnRlcm5hbCBtYXAuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6IFVzZSBnbHlwaHNGb3JDb2RlcG9pbnQo
KS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kRW1wdHlH
bHlwaCk6IENvbW1vbiBjb2RlIHB1bGxlZCBvdXQgaW50byBhCisgICAgICAgIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRMaWdhdHVyZUds
eXBocyk6IExpZ2F0dXJlcyBhcmUgaW1wbGVtZW50ZWQgYXMKKyAgICAgICAgbWFwcGluZyBhIHNl
cXVlbmNlIG9mIGdseXBocyB0byBhbm90aGVyIGdseXBoIGluc2lkZSBPcGVuVHlwZS4gSG93ZXZl
ciwgU1ZHIG1vZGVscworICAgICAgICBsaWdhdHVyZXMgYXMgbWFwcGluZyBhIHNlcXVlbmNlIG9m
IGNvZGVwb2ludHMgdG8gYSBnbHlwaC4gVGhpcyBmdW5jdGlvbiBtYWtlcyBkdW1teQorICAgICAg
ICBnbHlwaHMgZm9yIGFsbCB0aGUgY29kZXBvaW50cyB0aGF0IHdlIGRvbid0IGhhdmUgZ2x5cGhz
IGZvciBhbmQgYXBwZW5kcyB0aGVtIHRvCisgICAgICAgIG1fZ2x5cGhzLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBo
aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9P
VEZGb250Q29udmVydGVyKTogVXNlIGFwcGVuZEVtcHR5R2x5cGgoKSBhbmQKKyAgICAgICAgY2Fs
bCBhcHBlbmRMaWdhdHVyZUdseXBocygpLgorCisyMDE0LTEyLTE2ICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKICAgICAgICAgUnVieSBvdmVyaGFuZyB1c2VzIGlu
dHMgaW5zdGVhZCBvZiBmbG9hdHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzOTYyNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VG9PVEZGb250Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250
Q29udmVyc2lvbi5jcHAKaW5kZXggZWQ3ZTdjZmE2NDc5OTI2NmIzNTA0Y2VmY2MwZjRhYWE4NmQ1
ZTk5MS4uZjhkYjk2NDI1MmI0NDJkODYxMmVhMDYzYjZkMjg1Y2EzZTA4OGFlMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcApAQCAtMTA4LDYgKzEw
OCwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3Jlc3VsdC5hcHBlbmQodmFsdWUpOwogICAgIH0K
IAorICAgIHZvaWQgZ3Jvd0J5TGVuZ3RoKHNpemVfdCBudW1iZXJPZkJ5dGVzKQorICAgIHsKKyAg
ICAgICAgbV9yZXN1bHQuZ3JvdyhtX3Jlc3VsdC5zaXplKCkgKyBudW1iZXJPZkJ5dGVzKTsKKyAg
ICB9CisKICAgICB2b2lkIG92ZXJ3cml0ZTMyKHVuc2lnbmVkIGxvY2F0aW9uLCB1aW50MzJfdCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPj0gbG9jYXRpb24g
KyA0KTsKQEAgLTE0OCw2ICsxNTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kQ0ZGVGFi
bGUoKTsKICAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZSgpOwogCisgICAgdm9pZCBhcHBlbmRFbXB0
eUdseXBoKFN0cmluZyYmIGNvZGVwb2ludHMpOworICAgIHZvaWQgYXBwZW5kTGlnYXR1cmVHbHlw
aHMoKTsKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5
KGNvbnN0IEdseXBoRGF0YSYsIGNvbnN0IEdseXBoRGF0YSYpOwogCiAgICAgdm9pZCBhcHBlbmRW
YWxpZENGRlN0cmluZyhjb25zdCBTdHJpbmcmKTsKQEAgLTE2MSw3ICsxNjgsMTEgQEAgcHJpdmF0
ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzaXplX3QgYXBwZW5kS0VSTlN1YnRhYmxlKGJv
b2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZf
dCBjb3ZlcmFnZSk7CiAgICAgc2l6ZV90IGZpbmlzaEFwcGVuZGluZ0tFUk5TdWJ0YWJsZShWZWN0
b3I8S2VybmluZ0RhdGE+LCB1aW50MTZfdCBjb3ZlcmFnZSk7CiAKKyAgICB2b2lkIGFwcGVuZExp
Z2F0dXJlU3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pOwogICAgIHZvaWQg
YXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2Nh
dGlvbiwgY29uc3QgY2hhciBhcmFiaWNGb3JtW10pOworICAgIHZvaWQgYXBwZW5kU2NyaXB0U3Vi
dGFibGUodW5zaWduZWQgZmVhdHVyZUNvdW50KTsKKyAgICBWZWN0b3I8R2x5cGgsIDE+IGdseXBo
c0ZvckNvZGVwb2ludChVQ2hhcjMyIGNvZGVwb2ludCkgY29uc3Q7CisgICAgR2x5cGggZmlyc3RH
bHlwaChjb25zdCBWZWN0b3I8R2x5cGgsIDE+JiwgVUNoYXIzMiBjb2RlcG9pbnQpIGNvbnN0Owog
CiAgICAgVmVjdG9yPEdseXBoRGF0YT4gbV9nbHlwaHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEds
eXBoPiBtX2dseXBoTmFtZVRvSW5kZXhNYXA7IC8vIFNWRyAxLjE6ICJJdCBpcyByZWNvbW1lbmRl
ZCB0aGF0IGdseXBoIG5hbWVzIGJlIHVuaXF1ZSB3aXRoaW4gYSBmb250LiIKQEAgLTE3Niw2ICsx
ODcsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fYWR2YW5jZUhlaWdodE1heDsKICAgICBmbG9h
dCBtX21pblJpZ2h0U2lkZUJlYXJpbmc7CiAgICAgdW5zaWduZWQgbV91bml0c1BlckVtOworICAg
IHVuc2lnbmVkIG1fZmVhdHVyZUNvdW50R1NVQjsKICAgICBpbnQgbV90YWJsZXNBcHBlbmRlZENv
dW50OwogICAgIGNoYXIgbV93ZWlnaHQ7CiAgICAgYm9vbCBtX2l0YWxpYzsKQEAgLTIyMCwxOCAr
MjMyLDE4IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUoKQog
ICAgIFVDaGFyMzIgcHJldmlvdXNDb2RlcG9pbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFVDaGFy
MzI+OjptYXgoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGF1dG8mIGdseXBoID0gbV9nbHlwaHNbaV07Ci0gICAgICAgIHVuc2ln
bmVkIGNvZGVwb2ludFNpemUgPSAwOwogICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludDsKLSAgICAg
ICAgaWYgKGdseXBoLmNvZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgIGF1dG8gY29kZVBvaW50
cyA9IFN0cmluZ1ZpZXcoZ2x5cGguY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gY29kZVBvaW50cy5iZWdpbigpOworICAgICAgICBpZiAoaXRlcmF0b3Ig
PT0gY29kZVBvaW50cy5lbmQoKSkKICAgICAgICAgICAgIGNvZGVwb2ludCA9IDA7Ci0gICAgICAg
IGVsc2UgaWYgKGdseXBoLmNvZGVwb2ludHMuaXM4Qml0KCkpCi0gICAgICAgICAgICBjb2RlcG9p
bnQgPSBnbHlwaC5jb2RlcG9pbnRzW2NvZGVwb2ludFNpemUrK107Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIFUxNl9ORVhUKGdseXBoLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGNvZGVw
b2ludFNpemUsIGdseXBoLmNvZGVwb2ludHMubGVuZ3RoKCksIGNvZGVwb2ludCk7Ci0KLSAgICAg
ICAgLy8gRG9uJ3QgbWFwIGxpZ2F0dXJlcyBoZXJlLgotICAgICAgICBpZiAoZ2x5cGguY29kZXBv
aW50cy5sZW5ndGgoKSA+IGNvZGVwb2ludFNpemUgfHwgY29kZXBvaW50ID09IHByZXZpb3VzQ29k
ZXBvaW50KQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgY29kZXBvaW50ID0gKml0ZXJhdG9yOworICAgICAgICAgICAgKytpdGVyYXRvcjsKKyAgICAg
ICAgICAgIC8vIERvbid0IG1hcCBsaWdhdHVyZXMgaGVyZS4KKyAgICAgICAgICAgIGlmIChpdGVy
YXRvciAhPSBjb2RlUG9pbnRzLmVuZCgpIHx8IGNvZGVwb2ludCA9PSBwcmV2aW91c0NvZGVwb2lu
dCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGFwcGVu
ZDMyKGNvZGVwb2ludCk7IC8vIHN0YXJ0Q2hhckNvZGUKICAgICAgICAgYXBwZW5kMzIoY29kZXBv
aW50KTsgLy8gZW5kQ2hhckNvZGUKQEAgLTU2MSw2ICs1NzMsOTkgQEAgdm9pZCBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKCkKICAgICAgICAgbV9yZXN1bHQuYXBwZW5kVmVj
dG9yKGdseXBoLmNoYXJTdHJpbmcpOwogfQogCitHbHlwaCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmZpcnN0R2x5cGgoY29uc3QgVmVjdG9yPEdseXBoLCAxPiYgdiwgVUNoYXIzMiBjb2RlcG9pbnQp
IGNvbnN0Cit7CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGNvZGVwb2lu
dCk7CisjZW5kaWYKKyAgICBBU1NFUlQoIXYuaXNFbXB0eSgpKTsKKyAgICBpZiAodi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBhdXRvIGNv
ZGVQb2ludHMgPSBTdHJpbmdWaWV3KG1fZ2x5cGhzW3ZbMF1dLmNvZGVwb2ludHMpLmNvZGVQb2lu
dHMoKTsKKyAgICBhdXRvIGNvZGVQb2ludHNJdGVyYXRvciA9IGNvZGVQb2ludHMuYmVnaW4oKTsK
KyAgICBBU1NFUlQoY29kZVBvaW50c0l0ZXJhdG9yICE9IGNvZGVQb2ludHMuZW5kKCkpOworICAg
IEFTU0VSVChjb2RlcG9pbnQgPSAqY29kZVBvaW50c0l0ZXJhdG9yKTsKKyNlbmRpZgorICAgIHJl
dHVybiB2WzBdOworfQorCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTGlnYXR1
cmVTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2NhdGlvbikKK3sKKyAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxWZWN0b3I8R2x5cGg+LCBHbHlwaD4gTGlnYXR1cmVQYWlyOworICAgIFZlY3Rv
cjxMaWdhdHVyZVBhaXI+IGxpZ2F0dXJlUGFpcnM7CisgICAgZm9yIChHbHlwaCBnbHlwaEluZGV4
ID0gMDsgZ2x5cGhJbmRleCA8IG1fZ2x5cGhzLnNpemUoKTsgKytnbHlwaEluZGV4KSB7CisgICAg
ICAgIFZlY3RvcjxHbHlwaD4gbGlnYXR1cmVHbHlwaHM7CisgICAgICAgIGF1dG8gY29kZVBvaW50
cyA9IFN0cmluZ1ZpZXcobV9nbHlwaHNbZ2x5cGhJbmRleF0uY29kZXBvaW50cykuY29kZVBvaW50
cygpOworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzODU5MiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gY29kZXBvaW50IHNwYWNlLCBu
b3QgZ2x5cGggc3BhY2UKKyAgICAgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IGNvZGVQb2ludHMp
CisgICAgICAgICAgICBsaWdhdHVyZUdseXBocy5hcHBlbmQoZmlyc3RHbHlwaChnbHlwaHNGb3JD
b2RlcG9pbnQoY29kZVBvaW50KSwgY29kZVBvaW50KSk7CisgICAgICAgIGlmIChsaWdhdHVyZUds
eXBocy5zaXplKCkgPCAyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGxpZ2F0dXJl
UGFpcnMuYXBwZW5kKExpZ2F0dXJlUGFpcihXVEY6Om1vdmUobGlnYXR1cmVHbHlwaHMpLCBnbHlw
aEluZGV4KSk7CisgICAgfQorICAgIGlmIChsaWdhdHVyZVBhaXJzLnNpemUoKSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgbGlnYXR1cmVQYWlycy5jbGVh
cigpOworICAgIHN0ZDo6c29ydChsaWdhdHVyZVBhaXJzLmJlZ2luKCksIGxpZ2F0dXJlUGFpcnMu
ZW5kKCksIFtdKExpZ2F0dXJlUGFpciYgbGhzLCBMaWdhdHVyZVBhaXImIHJocykgeworICAgICAg
ICByZXR1cm4gbGhzLmZpcnN0WzBdIDwgcmhzLmZpcnN0WzBdOworICAgIH0pOworICAgIFZlY3Rv
cjxzaXplX3Q+IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzOworICAgIGlmICgh
bGlnYXR1cmVQYWlycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgR2x5cGggcHJldmlvdXNGaXJzdEds
eXBoID0gbGlnYXR1cmVQYWlyc1swXS5maXJzdFswXTsKKyAgICAgICAgc2l6ZV90IHNlZ21lbnRT
dGFydCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlnYXR1cmVQYWlycy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgbGlnYXR1cmVQYWlyID0gbGlnYXR1cmVQ
YWlyc1tpXTsKKyAgICAgICAgICAgIGlmIChsaWdhdHVyZVBhaXIuZmlyc3RbMF0gIT0gcHJldmlv
dXNGaXJzdEdseXBoKSB7CisgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmdGaXJzdEdseXBoU2Vn
bWVudExlbmd0aHMuYXBwZW5kKGkgLSBzZWdtZW50U3RhcnQpOworICAgICAgICAgICAgICAgIHNl
Z21lbnRTdGFydCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgb3Zlcmxh
cHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHMuYXBwZW5kKGxpZ2F0dXJlUGFpcnMuc2l6ZSgp
IC0gc2VnbWVudFN0YXJ0KTsKKyAgICB9CisKKyAgICBvdmVyd3JpdGUxNihzdWJ0YWJsZVJlY29y
ZExvY2F0aW9uICsgNiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbik7
CisgICAgYXV0byBzdWJ0YWJsZUxvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVu
ZDE2KDEpOyAvLyBGb3JtYXQgMQorICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZWhvbGRlciBmb3Ig
b2Zmc2V0IHRvIGNvdmVyYWdlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3Vic3Rp
dHV0aW9uIHRhYmxlCisgICAgYXBwZW5kMTYobGlnYXR1cmVQYWlycy5zaXplKCkpOyAvLyBOdW1i
ZXIgb2YgTGlnYXR1cmVTZXQgdGFibGVzCisgICAgZ3Jvd0J5TGVuZ3RoKG92ZXJsYXBwaW5nRmly
c3RHbHlwaFNlZ21lbnRMZW5ndGhzLnNpemUoKSAqIDIpOyAvLyBQbGFjZWhvbGRlciBmb3Igb2Zm
c2V0IHRvIExpZ2F0dXJlU2V0IHRhYmxlCisKKyAgICBWZWN0b3I8c2l6ZV90PiBsaWdhdHVyZVNl
dFRhYmxlTG9jYXRpb25zOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdG
aXJzdEdseXBoU2VnbWVudExlbmd0aHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgb3ZlcndyaXRl
MTYoc3VidGFibGVMb2NhdGlvbiArIDYgKyAyICogaSwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFi
bGVMb2NhdGlvbik7CisgICAgICAgIGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnMuYXBwZW5kKG1f
cmVzdWx0LnNpemUoKSk7CisgICAgICAgIGFwcGVuZDE2KG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNl
Z21lbnRMZW5ndGhzW2ldKTsgLy8gTGlnYXR1cmVDb3VudAorICAgICAgICBncm93QnlMZW5ndGgo
b3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHNbaV0gKiAyKTsgLy8gUGxhY2Vob2xk
ZXIgZm9yIG9mZnNldCB0byBMaWdhdHVyZSB0YWJsZQorICAgIH0KKyAgICBBU1NFUlQobGlnYXR1
cmVTZXRUYWJsZUxvY2F0aW9ucy5zaXplKCkgPT0gb3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVu
dExlbmd0aHMuc2l6ZSgpKTsKKworICAgIHNpemVfdCBsaWdhdHVyZVBhaXJJbmRleCA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0ZpcnN0R2x5cGhTZWdtZW50TGVu
Z3Rocy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG92ZXJs
YXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzW2ldOyArK2opIHsKKyAgICAgICAgICAgIG92
ZXJ3cml0ZTE2KGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnNbaV0gKyAyICsgMiAqIGosIG1fcmVz
dWx0LnNpemUoKSAtIGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnNbaV0pOworICAgICAgICAgICAg
YXV0byYgbGlnYXR1cmVQYWlyID0gbGlnYXR1cmVQYWlyc1tsaWdhdHVyZVBhaXJJbmRleF07Cisg
ICAgICAgICAgICBhcHBlbmQxNihsaWdhdHVyZVBhaXIuc2Vjb25kKTsKKyAgICAgICAgICAgIGFw
cGVuZDE2KGxpZ2F0dXJlUGFpci5maXJzdC5zaXplKCkpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgayA9IDE7IGsgPCBsaWdhdHVyZVBhaXIuZmlyc3Quc2l6ZSgpOyArK2spCisgICAgICAgICAg
ICAgICAgYXBwZW5kMTYobGlnYXR1cmVQYWlyLmZpcnN0W2tdKTsKKyAgICAgICAgICAgICsrbGln
YXR1cmVQYWlySW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGxpZ2F0dXJlUGFp
ckluZGV4ID09IGxpZ2F0dXJlUGFpcnMuc2l6ZSgpKTsKKworICAgIC8vIENvdmVyYWdlIHRhYmxl
CisgICAgb3ZlcndyaXRlMTYoc3VidGFibGVMb2NhdGlvbiArIDIsIG1fcmVzdWx0LnNpemUoKSAt
IHN1YnRhYmxlTG9jYXRpb24pOworICAgIGFwcGVuZDE2KDEpOyAvLyBDb3ZlcmFnZUZvcm1hdAor
ICAgIGFwcGVuZDE2KGxpZ2F0dXJlU2V0VGFibGVMb2NhdGlvbnMuc2l6ZSgpKTsgLy8gR2x5cGhD
b3VudAorICAgIGxpZ2F0dXJlUGFpckluZGV4ID0gMDsKKyAgICBmb3IgKGF1dG8gc2VnbWVudExl
bmd0aCA6IG92ZXJsYXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzKSB7CisgICAgICAgIGF1
dG8mIGxpZ2F0dXJlUGFpciA9IGxpZ2F0dXJlUGFpcnNbbGlnYXR1cmVQYWlySW5kZXhdOworICAg
ICAgICBBU1NFUlQobGlnYXR1cmVQYWlyLmZpcnN0LnNpemUoKSA+IDEpOworICAgICAgICBhcHBl
bmQxNihsaWdhdHVyZVBhaXIuZmlyc3RbMF0pOworICAgICAgICBsaWdhdHVyZVBhaXJJbmRleCAr
PSBzZWdtZW50TGVuZ3RoOworICAgIH0KK30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9j
YXRpb24sIGNvbnN0IGNoYXIgYXJhYmljRm9ybVtdKQogewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8
R2x5cGgsIEdseXBoPj4gYXJhYmljRmluYWxSZXBsYWNlbWVudHM7CkBAIC01ODksNiArNjk0LDIy
IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1
YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yCiAgICAgICAgIGFwcGVuZDE2KHBhaXIuZmlyc3Qp
OwogfQogCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kU2NyaXB0U3VidGFibGUo
dW5zaWduZWQgZmVhdHVyZUNvdW50KQoreworICAgIGF1dG8gZGZsdFNjcmlwdFRhYmxlTG9jYXRp
b24gPSBtX3Jlc3VsdC5zaXplKCk7CisgICAgYXBwZW5kMTYoMCk7IC8vIFBsYWNlaG9sZGVyIGZv
ciBvZmZzZXQgb2YgZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0gdGFibGUsIHJlbGF0aXZlIHRvIGJl
Z2lubmluZyBvZiBTY3JpcHQgdGFibGUKKyAgICBhcHBlbmQxNigwKTsgLy8gTnVtYmVyIG9mIGZv
bGxvd2luZyBsYW5ndWFnZSBzeXN0ZW0gdGFibGVzCisKKyAgICAvLyBMYW5nU3lzIHRhYmxlCisg
ICAgb3ZlcndyaXRlMTYoZGZsdFNjcmlwdFRhYmxlTG9jYXRpb24sIG1fcmVzdWx0LnNpemUoKSAt
IGRmbHRTY3JpcHRUYWJsZUxvY2F0aW9uKTsKKyAgICBhcHBlbmQxNigwKTsgLy8gTG9va3VwT3Jk
ZXIgIj0gTlVMTCAuLi4gcmVzZXJ2ZWQiCisgICAgYXBwZW5kMTYoMHhGRkZGKTsgLy8gTm8gZmVh
dHVyZXMgYXJlIHJlcXVpcmVkCisgICAgYXBwZW5kMTYoZmVhdHVyZUNvdW50KTsgLy8gTnVtYmVy
IG9mIEZlYXR1cmVJbmRleCB2YWx1ZXMKKyAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgZmVh
dHVyZUNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZDE2KG1fZmVhdHVyZUNvdW50R1NVQiArIGkp
OyAvLyBGZWF0dXJlcyBpbmRpY2VzCisgICAgbV9mZWF0dXJlQ291bnRHU1VCICs9IGZlYXR1cmVD
b3VudDsKK30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgp
CiB7CiAgICAgYXV0byB0YWJsZUxvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOwpAQCAtNjA0LDIy
ICs3MjUsMTggQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgp
CiAKICAgICAvLyBTY3JpcHRMaXN0CiAgICAgYXV0byBzY3JpcHRMaXN0TG9jYXRpb24gPSBtX3Jl
c3VsdC5zaXplKCk7Ci0gICAgYXBwZW5kMTYoMSk7IC8vIE51bWJlciBvZiBTY3JpcHRSZWNvcmRz
CisgICAgYXBwZW5kMTYoMik7IC8vIE51bWJlciBvZiBTY3JpcHRSZWNvcmRzCisgICAgYXBwZW5k
MzJCaXRDb2RlKCJERkxUIik7CisgICAgYXBwZW5kMTYoMCk7IC8vIFBsYWNlaG9sZGVyIGZvciBv
ZmZzZXQgb2YgU2NyaXB0IHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0TGlz
dAogICAgIGFwcGVuZDMyQml0Q29kZSgiYXJhYiIpOwotICAgIGFwcGVuZDE2KG1fcmVzdWx0LnNp
emUoKSArIDIgLSBzY3JpcHRMaXN0TG9jYXRpb24pOyAvLyBPZmZzZXQgb2YgU2NyaXB0IHRhYmxl
LCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgU2NyaXB0TGlzdAorICAgIGFwcGVuZDE2KDApOyAv
LyBQbGFjZWhvbGRlciBmb3Igb2Zmc2V0IG9mIFNjcmlwdCB0YWJsZSwgcmVsYXRpdmUgdG8gYmVn
aW5uaW5nIG9mIFNjcmlwdExpc3QKIAotICAgIGF1dG8gc2NyaXB0VGFibGVMb2NhdGlvbiA9IG1f
cmVzdWx0LnNpemUoKTsKLSAgICBhdXRvIHNpemVPZkVtcHR5U2NyaXB0VGFibGUgPSA0OwotICAg
IGFwcGVuZDE2KHNpemVPZkVtcHR5U2NyaXB0VGFibGUpOyAvLyBPZmZzZXQgb2YgZGVmYXVsdCBs
YW5ndWFnZSBzeXN0ZW0gdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHQgdGFi
bGUKLSAgICBhcHBlbmQxNigwKTsgLy8gTnVtYmVyIG9mIGZvbGxvd2luZyBsYW5ndWFnZSBzeXN0
ZW0gdGFibGVzCi0gICAgQVNTRVJUX1VOVVNFRChzY3JpcHRUYWJsZUxvY2F0aW9uLCBzY3JpcHRU
YWJsZUxvY2F0aW9uICsgc2l6ZU9mRW1wdHlTY3JpcHRUYWJsZSA9PSBtX3Jlc3VsdC5zaXplKCkp
OworICAgIG92ZXJ3cml0ZTE2KHNjcmlwdExpc3RMb2NhdGlvbiArIDYsIG1fcmVzdWx0LnNpemUo
KSAtIHNjcmlwdExpc3RMb2NhdGlvbik7CisgICAgYXBwZW5kU2NyaXB0U3VidGFibGUoMSk7Cisg
ICAgb3ZlcndyaXRlMTYoc2NyaXB0TGlzdExvY2F0aW9uICsgMTIsIG1fcmVzdWx0LnNpemUoKSAt
IHNjcmlwdExpc3RMb2NhdGlvbik7CisgICAgYXBwZW5kU2NyaXB0U3VidGFibGUoNCk7CiAKLSAg
ICBhcHBlbmQxNigwKTsgLy8gTG9va3VwT3JkZXIgIj0gTlVMTCAuLi4gcmVzZXJ2ZWQiCi0gICAg
YXBwZW5kMTYoMCk7IC8vIEZpcnN0IGZlYXR1cmUgaXMgcmVxdWlyZWQKLSAgICB1aW50MTZfdCBm
ZWF0dXJlQ291bnQgPSA0OwotICAgIGFwcGVuZDE2KDQpOyAvLyBGZWF0dXJlQ291bnQKLSAgICBm
b3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpCi0gICAgICAgIGFwcGVu
ZDE2KGkpOyAvLyBJbmRleCBvZiBvdXIgZmVhdHVyZSBpbnRvIHRoZSBGZWF0dXJlTGlzdAorICAg
IHVuc2lnbmVkIGZlYXR1cmVDb3VudCA9IDU7CiAKICAgICAvLyBGZWF0dXJlTGlzdAogICAgIG92
ZXJ3cml0ZTE2KGZlYXR1cmVMaXN0T2Zmc2V0TG9jYXRpb24sIG1fcmVzdWx0LnNpemUoKSAtIHRh
YmxlTG9jYXRpb24pOwpAQCAtNjI3LDE0ICs3NDQsMTYgQEAgdm9pZCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAgICAgc2l6ZV90IGZlYXR1cmVMaXN0U2l6ZSA9IDIg
KyA2ICogZmVhdHVyZUNvdW50OwogICAgIHNpemVfdCBmZWF0dXJlVGFibGVTaXplID0gNjsKICAg
ICBhcHBlbmQxNihmZWF0dXJlQ291bnQpOyAvLyBGZWF0dXJlQ291bnQKLSAgICBhcHBlbmQzMkJp
dENvZGUoImZpbmEiKTsKKyAgICBhcHBlbmQzMkJpdENvZGUoImxpZ2EiKTsKICAgICBhcHBlbmQx
NihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMCk7IC8vIE9mZnNldCBvZiBm
ZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUK
LSAgICBhcHBlbmQzMkJpdENvZGUoIm1lZGkiKTsKKyAgICBhcHBlbmQzMkJpdENvZGUoImZpbmEi
KTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMSk7
IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVh
dHVyZUxpc3QgdGFibGUKLSAgICBhcHBlbmQzMkJpdENvZGUoImluaXQiKTsKKyAgICBhcHBlbmQz
MkJpdENvZGUoIm1lZGkiKTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJl
VGFibGVTaXplICogMik7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBi
ZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKLSAgICBhcHBlbmQzMkJpdENvZGUoInJsaWci
KTsKKyAgICBhcHBlbmQzMkJpdENvZGUoImluaXQiKTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlz
dFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMyk7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxl
LCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKKyAgICBhcHBlbmQz
MkJpdENvZGUoInJsaWciKTsKKyAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJl
VGFibGVTaXplICogNCk7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBi
ZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKICAgICBBU1NFUlRfVU5VU0VEKGZlYXR1cmVM
aXN0TG9jYXRpb24sIGZlYXR1cmVMaXN0TG9jYXRpb24gKyBmZWF0dXJlTGlzdFNpemUgPT0gbV9y
ZXN1bHQuc2l6ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmZWF0dXJlQ291
bnQ7ICsraSkgewpAQCAtNjU1LDE4ICs3NzQsMjkgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZlYXR1
cmVDb3VudDsgKytpKSB7CiAgICAgICAgIHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zW2ldID0gbV9y
ZXN1bHQuc2l6ZSgpOwogICAgICAgICBvdmVyd3JpdGUxNihsb29rdXBMaXN0TG9jYXRpb24gKyAy
ICsgMiAqIGksIG1fcmVzdWx0LnNpemUoKSAtIGxvb2t1cExpc3RMb2NhdGlvbik7Ci0gICAgICAg
IGFwcGVuZDE2KGkgPT0gMyA/IDMgOiAxKTsgLy8gVHlwZSAxOiAiUmVwbGFjZSBvbmUgZ2x5cGgg
d2l0aCBvbmUgZ2x5cGgiIC8gVHlwZSAzOiAiUmVwbGFjZSBvbmUgZ2x5cGggd2l0aCBvbmUgb2Yg
bWFueSBnbHlwaHMiCisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICBhcHBlbmQxNigzKTsgLy8gVHlwZSAzOiAiUmVwbGFjZSBvbmUgZ2x5cGggd2l0aCBv
bmUgb2YgbWFueSBnbHlwaHMiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAwOgor
ICAgICAgICAgICAgYXBwZW5kMTYoNCk7IC8vIFR5cGUgNDogIlJlcGxhY2UgbXVsdGlwbGUgZ2x5
cGhzIHdpdGggb25lIGdseXBoIgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBhcHBlbmQxNigxKTsgLy8gVHlwZSAxOiAiUmVwbGFjZSBvbmUgZ2x5cGgg
d2l0aCBvbmUgZ2x5cGgiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBh
cHBlbmQxNigwKTsgLy8gTG9va3VwRmxhZwogICAgICAgICBhcHBlbmQxNigxKTsgLy8gU3ViVGFi
bGVDb3VudAogICAgICAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCB0
byBzdWJ0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIExvb2t1cCB0YWJsZQogICAgIH0K
IAotICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc3VidGFibGVSZWNvcmRMb2Nh
dGlvbnNbMF0sICJ0ZXJtaW5hbCIpOwotICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFi
bGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbMV0sICJtZWRpYWwiKTsKLSAgICBhcHBlbmRBcmFi
aWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzJdLCAiaW5pdGlh
bCIpOworICAgIGFwcGVuZExpZ2F0dXJlU3VidGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNb
MF0pOworICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc3VidGFibGVSZWNvcmRM
b2NhdGlvbnNbMV0sICJ0ZXJtaW5hbCIpOworICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3Vi
dGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbMl0sICJtZWRpYWwiKTsKKyAgICBhcHBlbmRB
cmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzNdLCAiaW5p
dGlhbCIpOwogCiAgICAgLy8gTWFudWFsbHkgYXBwZW5kIGVtcHR5ICJybGlnIiBzdWJ0YWJsZQot
ICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzNdICsgNiwgbV9yZXN1bHQu
c2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbM10pOworICAgIG92ZXJ3cml0ZTE2KHN1
YnRhYmxlUmVjb3JkTG9jYXRpb25zWzRdICsgNiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVS
ZWNvcmRMb2NhdGlvbnNbNF0pOwogICAgIGFwcGVuZDE2KDEpOyAvLyBGb3JtYXQgMQogICAgIGFw
cGVuZDE2KDYpOyAvLyBvZmZzZXQgdG8gY292ZXJhZ2UgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lu
bmluZyBvZiBzdWJzdGl0dXRpb24gdGFibGUKICAgICBhcHBlbmQxNigwKTsgLy8gQWx0ZXJuYXRl
U2V0Q291bnQKQEAgLTcyNywxOCArODU3LDI2IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRWTVRYVGFibGUoKQogICAgIH0KIH0KIAorc3RhdGljIFN0cmluZyBjb2RlcG9pbnRU
b1N0cmluZyhVQ2hhcjMyIGNvZGVwb2ludCkKK3sKKyAgICBVQ2hhciBidWZmZXJbMl07CisgICAg
dWludDhfdCBsZW5ndGggPSAwOworICAgIFVCb29sIGVycm9yID0gZmFsc2U7CisgICAgVTE2X0FQ
UEVORChidWZmZXIsIGxlbmd0aCwgMiwgY29kZXBvaW50LCBlcnJvcik7CisgICAgcmV0dXJuIGVy
cm9yID8gU3RyaW5nKCkgOiBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOworfQorCitWZWN0b3I8R2x5
cGgsIDE+IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6Z2x5cGhzRm9yQ29kZXBvaW50KFVDaGFyMzIg
Y29kZXBvaW50KSBjb25zdAoreworICAgIHJldHVybiBtX2NvZGVwb2ludHNUb0luZGljZXNNYXAu
Z2V0KGNvZGVwb2ludFRvU3RyaW5nKGNvZGVwb2ludCkpOworfQorCiB2b2lkIFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmIHVuaWNv
ZGVSYW5nZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3QKIHsKICAgICBmb3IgKGF1
dG8mIHVuaWNvZGVSYW5nZSA6IHVuaWNvZGVSYW5nZXMpIHsKICAgICAgICAgZm9yIChhdXRvIGNv
ZGVwb2ludCA9IHVuaWNvZGVSYW5nZS5maXJzdDsgY29kZXBvaW50IDw9IHVuaWNvZGVSYW5nZS5z
ZWNvbmQ7ICsrY29kZXBvaW50KSB7Ci0gICAgICAgICAgICBVQ2hhciBidWZmZXJbMl07Ci0gICAg
ICAgICAgICB1aW50OF90IGxlbmd0aCA9IDA7Ci0gICAgICAgICAgICBVQm9vbCBlcnJvciA9IGZh
bHNlOwotICAgICAgICAgICAgVTE2X0FQUEVORChidWZmZXIsIGxlbmd0aCwgMiwgY29kZXBvaW50
LCBlcnJvcik7Ci0gICAgICAgICAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAgICAgICAgZm9y
IChhdXRvIGluZGV4IDogbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFwLmdldChTdHJpbmcoYnVmZmVy
LCBsZW5ndGgpKSkKLSAgICAgICAgICAgICAgICAgICAgZ2x5cGhTZXQuYWRkKGluZGV4KTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IGdseXBoc0ZvckNvZGVw
b2ludChjb2RlcG9pbnQpKQorICAgICAgICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC04OTMsNyArMTAzMSw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBib29sIGNs
b3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBp
ZiAoY2xvc2VkICYmIG1fY2ZmRGF0YS5zaXplKCkpCisgICAgICAgIGlmIChjbG9zZWQgJiYgIW1f
Y2ZmRGF0YS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbG9zZVBhdGgoKTsKIAogICAgICAgICBG
bG9hdFBvaW50IGRlc3RpbmF0aW9uID0gbW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdGFy
Z2V0UG9pbnQgOiBtX2N1cnJlbnQgKyB0YXJnZXRQb2ludDsKQEAgLTEwMDcsMjggKzExNDUsNjYg
QEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3Qg
U1ZHRWxlbWVudCYgZ2x5cGhPck1pc3NpbmcKICAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRh
KFdURjo6bW92ZShwYXRoKSwgZ2x5cGhFbGVtZW50LCBob3Jpem9udGFsQWR2YW5jZSwgdmVydGlj
YWxBZHZhbmNlLCBtX2JvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAKK3ZvaWQgU1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRFbXB0eUdseXBoKFN0cmluZyYmIGNvZGVwb2ludHMpCit7
CisgICAgVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmc7CisgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVy
KGNoYXJTdHJpbmcsIG1fdW5pdHNQZXJFbSk7CisgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKGNo
YXJTdHJpbmcsIDApOworICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihjaGFyU3RyaW5nLCAwKTsK
KyAgICBjaGFyU3RyaW5nLmFwcGVuZChyTW92ZVRvKTsKKyAgICBjaGFyU3RyaW5nLmFwcGVuZChl
bmRDaGFyKTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKFdURjo6bW92ZShjaGFyU3Ry
aW5nKSwgbnVsbHB0ciwgbV91bml0c1BlckVtLCBtX3VuaXRzUGVyRW0sIEZsb2F0UmVjdCgpLCBj
b2RlcG9pbnRzKSk7Cit9CisKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRMaWdh
dHVyZUdseXBocygpCit7CisgICAgSGFzaFNldDxVQ2hhcjMyPiBsaWdhdHVyZUNvZGVwb2ludHM7
CisgICAgSGFzaFNldDxVQ2hhcjMyPiBub25MaWdhdHVyZUNvZGVwb2ludHM7CisgICAgZm9yIChh
dXRvJiBnbHlwaCA6IG1fZ2x5cGhzKSB7CisgICAgICAgIGF1dG8gY29kZVBvaW50cyA9IFN0cmlu
Z1ZpZXcoZ2x5cGguY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgICAgICBhdXRvIGNvZGVQ
b2ludHNJdGVyYXRvciA9IGNvZGVQb2ludHMuYmVnaW4oKTsKKyAgICAgICAgaWYgKGNvZGVQb2lu
dHNJdGVyYXRvciA9PSBjb2RlUG9pbnRzLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIFVDaGFyMzIgY29kZXBvaW50ID0gKmNvZGVQb2ludHNJdGVyYXRvcjsKKyAgICAgICAg
Kytjb2RlUG9pbnRzSXRlcmF0b3I7CisgICAgICAgIGlmIChjb2RlUG9pbnRzSXRlcmF0b3IgPT0g
Y29kZVBvaW50cy5lbmQoKSkKKyAgICAgICAgICAgIG5vbkxpZ2F0dXJlQ29kZXBvaW50cy5hZGQo
Y29kZXBvaW50KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaWdhdHVyZUNvZGVwb2lu
dHMuYWRkKGNvZGVwb2ludCk7CisgICAgICAgICAgICBmb3IgKDsgY29kZVBvaW50c0l0ZXJhdG9y
ICE9IGNvZGVQb2ludHMuZW5kKCk7ICsrY29kZVBvaW50c0l0ZXJhdG9yKQorICAgICAgICAgICAg
ICAgIGxpZ2F0dXJlQ29kZXBvaW50cy5hZGQoKmNvZGVQb2ludHNJdGVyYXRvcik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8gY29kZXBvaW50IDogbm9uTGlnYXR1cmVDb2RlcG9p
bnRzKQorICAgICAgICBsaWdhdHVyZUNvZGVwb2ludHMucmVtb3ZlKGNvZGVwb2ludCk7CisgICAg
Zm9yIChhdXRvIGNvZGVwb2ludCA6IGxpZ2F0dXJlQ29kZXBvaW50cykgeworICAgICAgICBhdXRv
IGNvZGVwb2ludHMgPSBjb2RlcG9pbnRUb1N0cmluZyhjb2RlcG9pbnQpOworICAgICAgICBpZiAo
IWNvZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgICAgICBhcHBlbmRFbXB0eUdseXBoKFdURjo6
bW92ZShjb2RlcG9pbnRzKSk7CisgICAgfQorfQorCiBib29sIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25zdCBHbHlwaERhdGEmIGRh
dGExLCBjb25zdCBHbHlwaERhdGEmIGRhdGEyKQogewotICAgIHVuc2lnbmVkIGkxID0gMDsKLSAg
ICB1bnNpZ25lZCBpMiA9IDA7CisgICAgYXV0byBjb2RlUG9pbnRzMSA9IFN0cmluZ1ZpZXcoZGF0
YTEuY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgIGF1dG8gY29kZVBvaW50czIgPSBTdHJp
bmdWaWV3KGRhdGEyLmNvZGVwb2ludHMpLmNvZGVQb2ludHMoKTsKKyAgICBhdXRvIGl0ZXJhdG9y
MSA9IGNvZGVQb2ludHMxLmJlZ2luKCk7CisgICAgYXV0byBpdGVyYXRvcjIgPSBjb2RlUG9pbnRz
Mi5iZWdpbigpOwogICAgIHVuc2lnbmVkIGxlbmd0aDEgPSBkYXRhMS5jb2RlcG9pbnRzLmxlbmd0
aCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aDIgPSBkYXRhMi5jb2RlcG9pbnRzLmxlbmd0aCgpOwot
ICAgIHdoaWxlIChpMSA8IGxlbmd0aDEgJiYgaTIgPCBsZW5ndGgyKSB7CisgICAgd2hpbGUgKGl0
ZXJhdG9yMSAhPSBjb2RlUG9pbnRzMS5lbmQoKSAmJiBpdGVyYXRvcjIgIT0gY29kZVBvaW50czIu
ZW5kKCkpIHsKICAgICAgICAgVUNoYXIzMiBjb2RlcG9pbnQxLCBjb2RlcG9pbnQyOwotICAgICAg
ICBpZiAoZGF0YTEuY29kZXBvaW50cy5pczhCaXQoKSkKLSAgICAgICAgICAgIGNvZGVwb2ludDEg
PSBkYXRhMS5jb2RlcG9pbnRzW2kxKytdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBVMTZf
TkVYVChkYXRhMS5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBpMSwgbGVuZ3RoMSwgY29kZXBv
aW50MSk7Ci0KLSAgICAgICAgaWYgKGRhdGEyLmNvZGVwb2ludHMuaXM4Qml0KCkpCi0gICAgICAg
ICAgICBjb2RlcG9pbnQyID0gZGF0YTIuY29kZXBvaW50c1tpMisrXTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgVTE2X05FWFQoZGF0YTIuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgaTIs
IGxlbmd0aDIsIGNvZGVwb2ludDIpOworICAgICAgICBjb2RlcG9pbnQxID0gKml0ZXJhdG9yMTsK
KyAgICAgICAgY29kZXBvaW50MiA9ICppdGVyYXRvcjI7CiAKICAgICAgICAgaWYgKGNvZGVwb2lu
dDEgPCBjb2RlcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChj
b2RlcG9pbnQxID4gY29kZXBvaW50MikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICArK2l0ZXJhdG9yMTsKKyAgICAgICAgKytpdGVyYXRvcjI7CiAgICAgfQogCiAgICAgaWYg
KGxlbmd0aDEgPT0gbGVuZ3RoMiAmJiBkYXRhMS5nbHlwaEVsZW1lbnQKQEAgLTEwNDUsNiArMTIy
MSw3IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0
IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKICAgICAsIG1fYWR2YW5jZUhlaWdodE1heCgw
KQogICAgICwgbV9taW5SaWdodFNpZGVCZWFyaW5nKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjptYXgoKSkKICAgICAsIG1fdW5pdHNQZXJFbSgwKQorICAgICwgbV9mZWF0dXJlQ291bnRHU1VC
KDApCiAgICAgLCBtX3RhYmxlc0FwcGVuZGVkQ291bnQoMCkKICAgICAsIG1fd2VpZ2h0KDUpCiAg
ICAgLCBtX2l0YWxpYyhmYWxzZSkKQEAgLTEwNTgsMTUgKzEyMzUsOCBAQCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihjb25zdCBTVkdGb250RWxlbWVudCYgZm9u
dEVsZW1lbnQpCiAKICAgICBpZiAobV9taXNzaW5nR2x5cGhFbGVtZW50KQogICAgICAgICBwcm9j
ZXNzR2x5cGhFbGVtZW50KCptX21pc3NpbmdHbHlwaEVsZW1lbnQsIG51bGxwdHIsIGRlZmF1bHRI
b3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgU3RyaW5nKCksIGluaXRp
YWxHbHlwaCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBub3RkZWZDaGFyU3Ry
aW5nOwotICAgICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIobm90ZGVmQ2hhclN0cmluZywgbV91
bml0c1BlckVtKTsKLSAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJp
bmcsIDApOwotICAgICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIobm90ZGVmQ2hhclN0cmluZywg
MCk7Ci0gICAgICAgIG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKHJNb3ZlVG8pOwotICAgICAgICBu
b3RkZWZDaGFyU3RyaW5nLmFwcGVuZChlbmRDaGFyKTsKLSAgICAgICAgbV9nbHlwaHMuYXBwZW5k
KEdseXBoRGF0YShXVEY6Om1vdmUobm90ZGVmQ2hhclN0cmluZyksIG51bGxwdHIsIG1fdW5pdHNQ
ZXJFbSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwgU3RyaW5nKCkpKTsKLSAgICB9CisgICAg
ZWxzZQorICAgICAgICBhcHBlbmRFbXB0eUdseXBoKFN0cmluZygpKTsKIAogICAgIGZvciAoYXV0
byYgZ2x5cGhFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHR2x5cGhFbGVtZW50PihtX2ZvbnRF
bGVtZW50KSkgewogICAgICAgICBhdXRvJiB1bmljb2RlQXR0cmlidXRlID0gZ2x5cGhFbGVtZW50
LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnVuaWNvZGVBdHRyKTsKQEAgLTEwNzQsNiArMTI0
NCw4IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0
IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKICAgICAgICAgICAgIHByb2Nlc3NHbHlwaEVs
ZW1lbnQoZ2x5cGhFbGVtZW50LCAmZ2x5cGhFbGVtZW50LCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFu
Y2UsIGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIHVuaWNvZGVBdHRyaWJ1dGUsIGluaXRpYWxHbHlw
aCk7CiAgICAgfQogCisgICAgYXBwZW5kTGlnYXR1cmVHbHlwaHMoKTsKKwogICAgIGlmIChtX2ds
eXBocy5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEdseXBoPjo6bWF4KCkpIHsKICAgICAg
ICAgbV9nbHlwaHMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244114</attachid>
            <date>2015-01-06 17:52:47 -0800</date>
            <delta_ts>2015-01-11 14:55:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137094-20150106175251.patch</filename>
            <type>text/plain</type>
            <size>23698</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU0NjBmYWIzOGFjNjEz
ZDVjOTUwMDk0ZjQzNzBhOGVjNDZiYTcwMy4uYzJjZTFiMWE4NjUwOThhZjgxOTU0OTkzOTI3Yzdi
ZTgwNzUyZDBmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE1LTAxLTA2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBJbXBsZW1lbnQgbGlnYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgdGhlICJsaWdhIiBPcGVuVHlwZSBmZWF0dXJl
IHRvIGltcGxlbWVudCBsaWdhdHVyZXMgaW5zaWRlIHRoZSBHU1VCIHRhYmxlLgorCisgICAgICAg
IFRlc3RzOiBzdmcvVzNDLVNWRy0xLjEvZm9udHMtZ2x5cGgtMDQtdC5zdmcKKyAgICAgICAgICAg
ICAgIHN2Zy9XM0MtU1ZHLTEuMS90ZXh0LXRleHQtMDYtdC5zdmcKKyAgICAgICAgICAgICAgIHN2
Zy90ZXh0L2tlcm5pbmcuc3ZnCisgICAgICAgICAgICAgICBzdmcvdGV4dC9tdWx0aWNoYXItZ2x5
cGguc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6Omdyb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUpOiBVc2UgU3RyaW5n
Vmlldzo6Y29kZVBvaW50cygpLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVy
dGVyOjpmaXJzdEdseXBoKTogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgaW5wdXQK
KyAgICAgICAgdmVjdG9yLCBhbG9uZyB3aXRoIHNvbWUgQVNTRVJUcy4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTGlnYXR1cmVTdWJ0YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFNjcmlwdFN1YnRhYmxl
KTogVXNlZCBpbnNpZGUgYXBwZW5kR1NVQlRhYmxlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRHU1VCVGFibGUpOiBVcGRhdGluZyBmb3IgbGlnYXR1cmVz
LgorICAgICAgICAoV2ViQ29yZTo6Y29kZXBvaW50VG9TdHJpbmcpOiBXcmFwcGVyIGFyb3VuZCBV
MTZfQVBQRU5EKCkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6Omds
eXBoc0ZvckNvZGVwb2ludCk6IENhbGwgY29kZXBvaW50VG9TdHJpbmcgYW5kIGxvb2sKKyAgICAg
ICAgaW4gaW50ZXJuYWwgbWFwLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVy
dGVyOjphZGRDb2RlcG9pbnRSYW5nZXMpOiBVc2UgZ2x5cGhzRm9yQ29kZXBvaW50KCkuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZExpZ2F0dXJlR2x5cGhz
KTogTGlnYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCBhcworICAgICAgICBtYXBwaW5nIGEgc2VxdWVu
Y2Ugb2YgZ2x5cGhzIHRvIGFub3RoZXIgZ2x5cGggaW5zaWRlIE9wZW5UeXBlLiBIb3dldmVyLCBT
VkcgbW9kZWxzCisgICAgICAgIGxpZ2F0dXJlcyBhcyBtYXBwaW5nIGEgc2VxdWVuY2Ugb2YgY29k
ZXBvaW50cyB0byBhIGdseXBoLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGR1bW15CisgICAgICAgIGds
eXBocyBmb3IgYWxsIHRoZSBjb2RlcG9pbnRzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBnbHlwaHMgZm9y
IGFuZCBhcHBlbmRzIHRoZW0gdG8KKyAgICAgICAgbV9nbHlwaHMuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmNvbXBhcmVDb2RlcG9pbnRzTGV4aWNvZ3JhcGhpY2Fs
bHkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXIpOiBVc2UgYXBwZW5kRW1wdHlHbHlwaCgpIGFuZAorICAgICAgICBjYWxsIGFw
cGVuZExpZ2F0dXJlR2x5cGhzKCkuCisKIDIwMTUtMDEtMDYgIEJyaWFuIEouIEJ1cmcgIDxidXJn
QGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBhc3MgcGFyYW1l
dGVycyB0byBpbnNwZWN0b3IgYWdlbnRzIGJ5IHJlZmVyZW5jZSB3aGVyZSBwb3NzaWJsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCmluZGV4IDI2NDA1
MTY1MjNlZGQ4ZWE4NDViMjMxMTg4MmY4MjIxYzI3NDZhYjguLjBiMGIzYTRkODhlZTZiYzFkNzFj
Zjk4YzY4Zjk4MTU1YTAyMDRkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
b09URkZvbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZG
b250Q29udmVyc2lvbi5jcHAKQEAgLTQwLDcgKzQwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kMzIoVmVjdG9yPGNoYXI+JiByZXN1bHQsIHVp
bnQzMl90IHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIFY+CitzdGF0aWMgaW5saW5lIHZvaWQg
YXBwZW5kMzIoViYgcmVzdWx0LCB1aW50MzJfdCB2YWx1ZSkKIHsKICAgICByZXN1bHQuYXBwZW5k
KHZhbHVlID4+IDI0KTsKICAgICByZXN1bHQuYXBwZW5kKHZhbHVlID4+IDE2KTsKQEAgLTE2MSw2
ICsxNjIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHZhbHVlKTsKICAg
ICB9CiAKKyAgICB2b2lkIGdyb3coc2l6ZV90IGRlbHRhKQorICAgIHsKKyAgICAgICAgbV9yZXN1
bHQuZ3JvdyhtX3Jlc3VsdC5zaXplKCkgKyBkZWx0YSk7CisgICAgfQorCiAgICAgdm9pZCBvdmVy
d3JpdGUzMih1bnNpZ25lZCBsb2NhdGlvbiwgdWludDMyX3QgdmFsdWUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9yZXN1bHQuc2l6ZSgpID49IGxvY2F0aW9uICsgNCk7CkBAIC0yMDEsNiArMjA3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZENGRlRhYmxlKCk7CiAgICAgdm9pZCBhcHBl
bmRWT1JHVGFibGUoKTsKIAorICAgIHZvaWQgYXBwZW5kTGlnYXR1cmVHbHlwaHMoKTsKICAgICBz
dGF0aWMgYm9vbCBjb21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5KGNvbnN0IEdseXBo
RGF0YSYsIGNvbnN0IEdseXBoRGF0YSYpOwogCiAgICAgdm9pZCBhcHBlbmRWYWxpZENGRlN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKQEAgLTIxNCwxMiArMjIxLDE3IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVp
bGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2Up
OwogICAgIHNpemVfdCBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5pbmdE
YXRhPiwgdWludDE2X3QgY292ZXJhZ2UpOwogCisgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1YnRh
YmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKICAgICB2b2lkIGFwcGVuZEFyYWJp
Y1JlcGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24sIGNvbnN0
IGNoYXIgYXJhYmljRm9ybVtdKTsKKyAgICB2b2lkIGFwcGVuZFNjcmlwdFN1YnRhYmxlKHVuc2ln
bmVkIGZlYXR1cmVDb3VudCk7CisgICAgVmVjdG9yPEdseXBoLCAxPiBnbHlwaHNGb3JDb2RlcG9p
bnQoVUNoYXIzMikgY29uc3Q7CisgICAgR2x5cGggZmlyc3RHbHlwaChjb25zdCBWZWN0b3I8R2x5
cGgsIDE+JiwgVUNoYXIzMikgY29uc3Q7CiAKICAgICBWZWN0b3I8R2x5cGhEYXRhPiBtX2dseXBo
czsKICAgICBIYXNoTWFwPFN0cmluZywgR2x5cGg+IG1fZ2x5cGhOYW1lVG9JbmRleE1hcDsgLy8g
U1ZHIDEuMTogIkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgZ2x5cGggbmFtZXMgYmUgdW5pcXVlIHdp
dGhpbiBhIGZvbnQuIgogICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8R2x5cGgsIDE+PiBtX2Nv
ZGVwb2ludHNUb0luZGljZXNNYXA7CiAgICAgVmVjdG9yPGNoYXI+IG1fcmVzdWx0OworICAgIFZl
Y3RvcjxjaGFyLCAxNz4gbV9lbXB0eUdseXBoQ2hhclN0cmluZzsKICAgICBGbG9hdFJlY3QgbV9i
b3VuZGluZ0JveDsKICAgICBjb25zdCBTVkdGb250RWxlbWVudCYgbV9mb250RWxlbWVudDsKICAg
ICBjb25zdCBTVkdGb250RmFjZUVsZW1lbnQqIG1fZm9udEZhY2VFbGVtZW50OwpAQCAtMjI5LDYg
KzI0MSw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9hZHZhbmNlSGVpZ2h0TWF4OwogICAgIGZs
b2F0IG1fbWluUmlnaHRTaWRlQmVhcmluZzsKICAgICB1bnNpZ25lZCBtX3VuaXRzUGVyRW07Cisg
ICAgdW5zaWduZWQgbV9mZWF0dXJlQ291bnRHU1VCOwogICAgIGludCBtX3RhYmxlc0FwcGVuZGVk
Q291bnQ7CiAgICAgY2hhciBtX3dlaWdodDsKICAgICBib29sIG1faXRhbGljOwpAQCAtMjczLDE4
ICsyODYsMTggQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSgp
CiAgICAgVUNoYXIzMiBwcmV2aW91c0NvZGVwb2ludCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VUNo
YXIzMj46Om1heCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgYXV0byYgZ2x5cGggPSBtX2dseXBoc1tpXTsKLSAgICAgICAgdW5z
aWduZWQgY29kZXBvaW50U2l6ZSA9IDA7CiAgICAgICAgIFVDaGFyMzIgY29kZXBvaW50OwotICAg
ICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5pc051bGwoKSkKKyAgICAgICAgYXV0byBjb2RlUG9p
bnRzID0gU3RyaW5nVmlldyhnbHlwaC5jb2RlcG9pbnRzKS5jb2RlUG9pbnRzKCk7CisgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBjb2RlUG9pbnRzLmJlZ2luKCk7CisgICAgICAgIGlmIChpdGVyYXRv
ciA9PSBjb2RlUG9pbnRzLmVuZCgpKQogICAgICAgICAgICAgY29kZXBvaW50ID0gMDsKLSAgICAg
ICAgZWxzZSBpZiAoZ2x5cGguY29kZXBvaW50cy5pczhCaXQoKSkKLSAgICAgICAgICAgIGNvZGVw
b2ludCA9IGdseXBoLmNvZGVwb2ludHNbY29kZXBvaW50U2l6ZSsrXTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgVTE2X05FWFQoZ2x5cGguY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgY29k
ZXBvaW50U2l6ZSwgZ2x5cGguY29kZXBvaW50cy5sZW5ndGgoKSwgY29kZXBvaW50KTsKLQotICAg
ICAgICAvLyBEb24ndCBtYXAgbGlnYXR1cmVzIGhlcmUuCi0gICAgICAgIGlmIChnbHlwaC5jb2Rl
cG9pbnRzLmxlbmd0aCgpID4gY29kZXBvaW50U2l6ZSB8fCBjb2RlcG9pbnQgPT0gcHJldmlvdXND
b2RlcG9pbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBjb2RlcG9pbnQgPSAqaXRlcmF0b3I7CisgICAgICAgICAgICArK2l0ZXJhdG9yOworICAg
ICAgICAgICAgLy8gRG9uJ3QgbWFwIGxpZ2F0dXJlcyBoZXJlLgorICAgICAgICAgICAgaWYgKGl0
ZXJhdG9yICE9IGNvZGVQb2ludHMuZW5kKCkgfHwgY29kZXBvaW50ID09IHByZXZpb3VzQ29kZXBv
aW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgYXBw
ZW5kMzIoY29kZXBvaW50KTsgLy8gc3RhcnRDaGFyQ29kZQogICAgICAgICBhcHBlbmQzMihjb2Rl
cG9pbnQpOyAvLyBlbmRDaGFyQ29kZQpAQCAtNjE0LDYgKzYyNywxMDAgQEAgdm9pZCBTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKCkKICAgICAgICAgbV9yZXN1bHQuYXBwZW5k
VmVjdG9yKGdseXBoLmNoYXJTdHJpbmcpOwogfQogCitHbHlwaCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmZpcnN0R2x5cGgoY29uc3QgVmVjdG9yPEdseXBoLCAxPiYgdiwgVUNoYXIzMiBjb2RlcG9p
bnQpIGNvbnN0Cit7CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGNvZGVw
b2ludCk7CisjZW5kaWYKKyAgICBBU1NFUlQoIXYuaXNFbXB0eSgpKTsKKyAgICBpZiAodi5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAwOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBhdXRv
IGNvZGVQb2ludHMgPSBTdHJpbmdWaWV3KG1fZ2x5cGhzW3ZbMF1dLmNvZGVwb2ludHMpLmNvZGVQ
b2ludHMoKTsKKyAgICBhdXRvIGNvZGVQb2ludHNJdGVyYXRvciA9IGNvZGVQb2ludHMuYmVnaW4o
KTsKKyAgICBBU1NFUlQoY29kZVBvaW50c0l0ZXJhdG9yICE9IGNvZGVQb2ludHMuZW5kKCkpOwor
ICAgIEFTU0VSVChjb2RlcG9pbnQgPSAqY29kZVBvaW50c0l0ZXJhdG9yKTsKKyNlbmRpZgorICAg
IHJldHVybiB2WzBdOworfQorCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTGln
YXR1cmVTdWJ0YWJsZShzaXplX3Qgc3VidGFibGVSZWNvcmRMb2NhdGlvbikKK3sKKyAgICB0eXBl
ZGVmIHN0ZDo6cGFpcjxWZWN0b3I8R2x5cGgsIDM+LCBHbHlwaD4gTGlnYXR1cmVQYWlyOworICAg
IFZlY3RvcjxMaWdhdHVyZVBhaXI+IGxpZ2F0dXJlUGFpcnM7CisgICAgZm9yIChHbHlwaCBnbHlw
aEluZGV4ID0gMDsgZ2x5cGhJbmRleCA8IG1fZ2x5cGhzLnNpemUoKTsgKytnbHlwaEluZGV4KSB7
CisgICAgICAgIGxpZ2F0dXJlUGFpcnMuYXBwZW5kKExpZ2F0dXJlUGFpcihWZWN0b3I8R2x5cGgs
IDM+KCksIGdseXBoSW5kZXgpKTsKKyAgICAgICAgVmVjdG9yPEdseXBoLCAzPiYgbGlnYXR1cmVH
bHlwaHMgPSBsaWdhdHVyZVBhaXJzLmxhc3QoKS5maXJzdDsKKyAgICAgICAgYXV0byBjb2RlUG9p
bnRzID0gU3RyaW5nVmlldyhtX2dseXBoc1tnbHlwaEluZGV4XS5jb2RlcG9pbnRzKS5jb2RlUG9p
bnRzKCk7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4NTkyIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiBjb2RlcG9pbnQgc3BhY2Us
IG5vdCBnbHlwaCBzcGFjZQorICAgICAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogY29kZVBvaW50
cykKKyAgICAgICAgICAgIGxpZ2F0dXJlR2x5cGhzLmFwcGVuZChmaXJzdEdseXBoKGdseXBoc0Zv
ckNvZGVwb2ludChjb2RlUG9pbnQpLCBjb2RlUG9pbnQpKTsKKyAgICAgICAgaWYgKGxpZ2F0dXJl
R2x5cGhzLnNpemUoKSA8IDIpCisgICAgICAgICAgICBsaWdhdHVyZVBhaXJzLnJlbW92ZUxhc3Qo
KTsKKyAgICB9CisgICAgaWYgKGxpZ2F0dXJlUGFpcnMuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1heCgpKQorICAgICAgICBsaWdhdHVyZVBhaXJzLmNsZWFyKCk7Cisg
ICAgc3RkOjpzb3J0KGxpZ2F0dXJlUGFpcnMuYmVnaW4oKSwgbGlnYXR1cmVQYWlycy5lbmQoKSwg
W10oTGlnYXR1cmVQYWlyJiBsaHMsIExpZ2F0dXJlUGFpciYgcmhzKSB7CisgICAgICAgIHJldHVy
biBsaHMuZmlyc3RbMF0gPCByaHMuZmlyc3RbMF07CisgICAgfSk7CisgICAgVmVjdG9yPHNpemVf
dD4gb3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHM7CisgICAgaWYgKCFsaWdhdHVy
ZVBhaXJzLmlzRW1wdHkoKSkgeworICAgICAgICBHbHlwaCBwcmV2aW91c0ZpcnN0R2x5cGggPSBs
aWdhdHVyZVBhaXJzWzBdLmZpcnN0WzBdOworICAgICAgICBzaXplX3Qgc2VnbWVudFN0YXJ0ID0g
MDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaWdhdHVyZVBhaXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBhdXRvJiBsaWdhdHVyZVBhaXIgPSBsaWdhdHVyZVBhaXJzW2ld
OworICAgICAgICAgICAgaWYgKGxpZ2F0dXJlUGFpci5maXJzdFswXSAhPSBwcmV2aW91c0ZpcnN0
R2x5cGgpIHsKKyAgICAgICAgICAgICAgICBvdmVybGFwcGluZ0ZpcnN0R2x5cGhTZWdtZW50TGVu
Z3Rocy5hcHBlbmQoaSAtIHNlZ21lbnRTdGFydCk7CisgICAgICAgICAgICAgICAgc2VnbWVudFN0
YXJ0ID0gaTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c0ZpcnN0R2x5cGggPSBsaWdhdHVyZVBh
aXJzWzBdLmZpcnN0WzBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG92ZXJs
YXBwaW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzLmFwcGVuZChsaWdhdHVyZVBhaXJzLnNpemUo
KSAtIHNlZ21lbnRTdGFydCk7CisgICAgfQorCisgICAgb3ZlcndyaXRlMTYoc3VidGFibGVSZWNv
cmRMb2NhdGlvbiArIDYsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlUmVjb3JkTG9jYXRpb24p
OworICAgIGF1dG8gc3VidGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBl
bmQxNigxKTsgLy8gRm9ybWF0IDEKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9y
IG9mZnNldCB0byBjb3ZlcmFnZSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHN1YnN0
aXR1dGlvbiB0YWJsZQorICAgIGFwcGVuZDE2KGxpZ2F0dXJlUGFpcnMuc2l6ZSgpKTsgLy8gTnVt
YmVyIG9mIExpZ2F0dXJlU2V0IHRhYmxlcworICAgIGdyb3cob3ZlcmxhcHBpbmdGaXJzdEdseXBo
U2VnbWVudExlbmd0aHMuc2l6ZSgpICogMik7IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgdG8g
TGlnYXR1cmVTZXQgdGFibGUKKworICAgIFZlY3RvcjxzaXplX3Q+IGxpZ2F0dXJlU2V0VGFibGVM
b2NhdGlvbnM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0ZpcnN0R2x5
cGhTZWdtZW50TGVuZ3Rocy5zaXplKCk7ICsraSkgeworICAgICAgICBvdmVyd3JpdGUxNihzdWJ0
YWJsZUxvY2F0aW9uICsgNiArIDIgKiBpLCBtX3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJsZUxvY2F0
aW9uKTsKKyAgICAgICAgbGlnYXR1cmVTZXRUYWJsZUxvY2F0aW9ucy5hcHBlbmQobV9yZXN1bHQu
c2l6ZSgpKTsKKyAgICAgICAgYXBwZW5kMTYob3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVudExl
bmd0aHNbaV0pOyAvLyBMaWdhdHVyZUNvdW50CisgICAgICAgIGdyb3cob3ZlcmxhcHBpbmdGaXJz
dEdseXBoU2VnbWVudExlbmd0aHNbaV0gKiAyKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9mZnNldCB0
byBMaWdhdHVyZSB0YWJsZQorICAgIH0KKyAgICBBU1NFUlQobGlnYXR1cmVTZXRUYWJsZUxvY2F0
aW9ucy5zaXplKCkgPT0gb3ZlcmxhcHBpbmdGaXJzdEdseXBoU2VnbWVudExlbmd0aHMuc2l6ZSgp
KTsKKworICAgIHNpemVfdCBsaWdhdHVyZVBhaXJJbmRleCA9IDA7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvdmVybGFwcGluZ0ZpcnN0R2x5cGhTZWdtZW50TGVuZ3Rocy5zaXplKCk7ICsr
aSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG92ZXJsYXBwaW5nRmlyc3RHbHlw
aFNlZ21lbnRMZW5ndGhzW2ldOyArK2opIHsKKyAgICAgICAgICAgIG92ZXJ3cml0ZTE2KGxpZ2F0
dXJlU2V0VGFibGVMb2NhdGlvbnNbaV0gKyAyICsgMiAqIGosIG1fcmVzdWx0LnNpemUoKSAtIGxp
Z2F0dXJlU2V0VGFibGVMb2NhdGlvbnNbaV0pOworICAgICAgICAgICAgYXV0byYgbGlnYXR1cmVQ
YWlyID0gbGlnYXR1cmVQYWlyc1tsaWdhdHVyZVBhaXJJbmRleF07CisgICAgICAgICAgICBhcHBl
bmQxNihsaWdhdHVyZVBhaXIuc2Vjb25kKTsKKyAgICAgICAgICAgIGFwcGVuZDE2KGxpZ2F0dXJl
UGFpci5maXJzdC5zaXplKCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDE7IGsgPCBs
aWdhdHVyZVBhaXIuZmlyc3Quc2l6ZSgpOyArK2spCisgICAgICAgICAgICAgICAgYXBwZW5kMTYo
bGlnYXR1cmVQYWlyLmZpcnN0W2tdKTsKKyAgICAgICAgICAgICsrbGlnYXR1cmVQYWlySW5kZXg7
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGxpZ2F0dXJlUGFpckluZGV4ID09IGxpZ2F0
dXJlUGFpcnMuc2l6ZSgpKTsKKworICAgIC8vIENvdmVyYWdlIHRhYmxlCisgICAgb3ZlcndyaXRl
MTYoc3VidGFibGVMb2NhdGlvbiArIDIsIG1fcmVzdWx0LnNpemUoKSAtIHN1YnRhYmxlTG9jYXRp
b24pOworICAgIGFwcGVuZDE2KDEpOyAvLyBDb3ZlcmFnZUZvcm1hdAorICAgIGFwcGVuZDE2KGxp
Z2F0dXJlU2V0VGFibGVMb2NhdGlvbnMuc2l6ZSgpKTsgLy8gR2x5cGhDb3VudAorICAgIGxpZ2F0
dXJlUGFpckluZGV4ID0gMDsKKyAgICBmb3IgKGF1dG8gc2VnbWVudExlbmd0aCA6IG92ZXJsYXBw
aW5nRmlyc3RHbHlwaFNlZ21lbnRMZW5ndGhzKSB7CisgICAgICAgIGF1dG8mIGxpZ2F0dXJlUGFp
ciA9IGxpZ2F0dXJlUGFpcnNbbGlnYXR1cmVQYWlySW5kZXhdOworICAgICAgICBBU1NFUlQobGln
YXR1cmVQYWlyLmZpcnN0LnNpemUoKSA+IDEpOworICAgICAgICBhcHBlbmQxNihsaWdhdHVyZVBh
aXIuZmlyc3RbMF0pOworICAgICAgICBsaWdhdHVyZVBhaXJJbmRleCArPSBzZWdtZW50TGVuZ3Ro
OworICAgIH0KK30KKwogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEFyYWJpY1Jl
cGxhY2VtZW50U3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24sIGNvbnN0IGNo
YXIgYXJhYmljRm9ybVtdKQogewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8R2x5cGgsIEdseXBoPj4g
YXJhYmljRmluYWxSZXBsYWNlbWVudHM7CkBAIC02NDIsNiArNzQ5LDIxIEBAIHZvaWQgU1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHNpemVfdCBz
dWJ0YWJsZVJlY29yCiAgICAgICAgIGFwcGVuZDE2KHBhaXIuZmlyc3QpOwogfQogCit2b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kU2NyaXB0U3VidGFibGUodW5zaWduZWQgZmVhdHVy
ZUNvdW50KQoreworICAgIGF1dG8gZGZsdFNjcmlwdFRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5z
aXplKCk7CisgICAgYXBwZW5kMTYoMCk7IC8vIFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgb2YgZGVm
YXVsdCBsYW5ndWFnZSBzeXN0ZW0gdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3Jp
cHQgdGFibGUKKyAgICBhcHBlbmQxNigwKTsgLy8gTnVtYmVyIG9mIGZvbGxvd2luZyBsYW5ndWFn
ZSBzeXN0ZW0gdGFibGVzCisKKyAgICAvLyBMYW5nU3lzIHRhYmxlCisgICAgb3ZlcndyaXRlMTYo
ZGZsdFNjcmlwdFRhYmxlTG9jYXRpb24sIG1fcmVzdWx0LnNpemUoKSAtIGRmbHRTY3JpcHRUYWJs
ZUxvY2F0aW9uKTsKKyAgICBhcHBlbmQxNigwKTsgLy8gTG9va3VwT3JkZXIgIj0gTlVMTCAuLi4g
cmVzZXJ2ZWQiCisgICAgYXBwZW5kMTYoMHhGRkZGKTsgLy8gTm8gZmVhdHVyZXMgYXJlIHJlcXVp
cmVkCisgICAgYXBwZW5kMTYoZmVhdHVyZUNvdW50KTsgLy8gTnVtYmVyIG9mIEZlYXR1cmVJbmRl
eCB2YWx1ZXMKKyAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kp
CisgICAgICAgIGFwcGVuZDE2KG1fZmVhdHVyZUNvdW50R1NVQisrKTsgLy8gRmVhdHVyZXMgaW5k
aWNlcworfQorCiB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR1NVQlRhYmxlKCkK
IHsKICAgICBhdXRvIHRhYmxlTG9jYXRpb24gPSBtX3Jlc3VsdC5zaXplKCk7CkBAIC02NTUsMjIg
Kzc3NywxOCBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR1NVQlRhYmxlKCkK
IAogICAgIC8vIFNjcmlwdExpc3QKICAgICBhdXRvIHNjcmlwdExpc3RMb2NhdGlvbiA9IG1fcmVz
dWx0LnNpemUoKTsKLSAgICBhcHBlbmQxNigxKTsgLy8gTnVtYmVyIG9mIFNjcmlwdFJlY29yZHMK
KyAgICBhcHBlbmQxNigyKTsgLy8gTnVtYmVyIG9mIFNjcmlwdFJlY29yZHMKKyAgICBhcHBlbmQz
MkJpdENvZGUoIkRGTFQiKTsKKyAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG9m
ZnNldCBvZiBTY3JpcHQgdGFibGUsIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHRMaXN0
CiAgICAgYXBwZW5kMzJCaXRDb2RlKCJhcmFiIik7Ci0gICAgYXBwZW5kMTYobV9yZXN1bHQuc2l6
ZSgpICsgMiAtIHNjcmlwdExpc3RMb2NhdGlvbik7IC8vIE9mZnNldCBvZiBTY3JpcHQgdGFibGUs
IHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBTY3JpcHRMaXN0CisgICAgYXBwZW5kMTYoMCk7IC8v
IFBsYWNlaG9sZGVyIGZvciBvZmZzZXQgb2YgU2NyaXB0IHRhYmxlLCByZWxhdGl2ZSB0byBiZWdp
bm5pbmcgb2YgU2NyaXB0TGlzdAogCi0gICAgYXV0byBzY3JpcHRUYWJsZUxvY2F0aW9uID0gbV9y
ZXN1bHQuc2l6ZSgpOwotICAgIGF1dG8gc2l6ZU9mRW1wdHlTY3JpcHRUYWJsZSA9IDQ7Ci0gICAg
YXBwZW5kMTYoc2l6ZU9mRW1wdHlTY3JpcHRUYWJsZSk7IC8vIE9mZnNldCBvZiBkZWZhdWx0IGxh
bmd1YWdlIHN5c3RlbSB0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIFNjcmlwdCB0YWJs
ZQotICAgIGFwcGVuZDE2KDApOyAvLyBOdW1iZXIgb2YgZm9sbG93aW5nIGxhbmd1YWdlIHN5c3Rl
bSB0YWJsZXMKLSAgICBBU1NFUlRfVU5VU0VEKHNjcmlwdFRhYmxlTG9jYXRpb24sIHNjcmlwdFRh
YmxlTG9jYXRpb24gKyBzaXplT2ZFbXB0eVNjcmlwdFRhYmxlID09IG1fcmVzdWx0LnNpemUoKSk7
CisgICAgb3ZlcndyaXRlMTYoc2NyaXB0TGlzdExvY2F0aW9uICsgNiwgbV9yZXN1bHQuc2l6ZSgp
IC0gc2NyaXB0TGlzdExvY2F0aW9uKTsKKyAgICBhcHBlbmRTY3JpcHRTdWJ0YWJsZSgxKTsKKyAg
ICBvdmVyd3JpdGUxNihzY3JpcHRMaXN0TG9jYXRpb24gKyAxMiwgbV9yZXN1bHQuc2l6ZSgpIC0g
c2NyaXB0TGlzdExvY2F0aW9uKTsKKyAgICBhcHBlbmRTY3JpcHRTdWJ0YWJsZSg0KTsKIAotICAg
IGFwcGVuZDE2KDApOyAvLyBMb29rdXBPcmRlciAiPSBOVUxMIC4uLiByZXNlcnZlZCIKLSAgICBh
cHBlbmQxNigwKTsgLy8gRmlyc3QgZmVhdHVyZSBpcyByZXF1aXJlZAotICAgIHVpbnQxNl90IGZl
YXR1cmVDb3VudCA9IDQ7Ci0gICAgYXBwZW5kMTYoNCk7IC8vIEZlYXR1cmVDb3VudAotICAgIGZv
ciAodWludDE2X3QgaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkKLSAgICAgICAgYXBwZW5k
MTYoaSk7IC8vIEluZGV4IG9mIG91ciBmZWF0dXJlIGludG8gdGhlIEZlYXR1cmVMaXN0CisgICAg
dW5zaWduZWQgZmVhdHVyZUNvdW50ID0gNTsKIAogICAgIC8vIEZlYXR1cmVMaXN0CiAgICAgdG9G
ZWF0dXJlTGlzdC5wb3B1bGF0ZSgpOwpAQCAtNjc4LDE0ICs3OTYsMTYgQEAgdm9pZCBTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAgICAgc2l6ZV90IGZlYXR1cmVMaXN0
U2l6ZSA9IDIgKyA2ICogZmVhdHVyZUNvdW50OwogICAgIHNpemVfdCBmZWF0dXJlVGFibGVTaXpl
ID0gNjsKICAgICBhcHBlbmQxNihmZWF0dXJlQ291bnQpOyAvLyBGZWF0dXJlQ291bnQKLSAgICBh
cHBlbmQzMkJpdENvZGUoImZpbmEiKTsKKyAgICBhcHBlbmQzMkJpdENvZGUoImxpZ2EiKTsKICAg
ICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMCk7IC8vIE9m
ZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxp
c3QgdGFibGUKLSAgICBhcHBlbmQzMkJpdENvZGUoIm1lZGkiKTsKKyAgICBhcHBlbmQzMkJpdENv
ZGUoImZpbmEiKTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVT
aXplICogMSk7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5p
bmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKLSAgICBhcHBlbmQzMkJpdENvZGUoImluaXQiKTsKKyAg
ICBhcHBlbmQzMkJpdENvZGUoIm1lZGkiKTsKICAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUg
KyBmZWF0dXJlVGFibGVTaXplICogMik7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxh
dGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKLSAgICBhcHBlbmQzMkJpdENv
ZGUoInJsaWciKTsKKyAgICBhcHBlbmQzMkJpdENvZGUoImluaXQiKTsKICAgICBhcHBlbmQxNihm
ZWF0dXJlTGlzdFNpemUgKyBmZWF0dXJlVGFibGVTaXplICogMyk7IC8vIE9mZnNldCBvZiBmZWF0
dXJlIHRhYmxlLCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKKyAg
ICBhcHBlbmQzMkJpdENvZGUoInJsaWciKTsKKyAgICBhcHBlbmQxNihmZWF0dXJlTGlzdFNpemUg
KyBmZWF0dXJlVGFibGVTaXplICogNCk7IC8vIE9mZnNldCBvZiBmZWF0dXJlIHRhYmxlLCByZWxh
dGl2ZSB0byBiZWdpbm5pbmcgb2YgRmVhdHVyZUxpc3QgdGFibGUKICAgICBBU1NFUlRfVU5VU0VE
KGZlYXR1cmVMaXN0TG9jYXRpb24sIGZlYXR1cmVMaXN0TG9jYXRpb24gKyBmZWF0dXJlTGlzdFNp
emUgPT0gbV9yZXN1bHQuc2l6ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
ZWF0dXJlQ291bnQ7ICsraSkgewpAQCAtNzA2LDE4ICs4MjYsMjkgQEAgdm9pZCBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZEdTVUJUYWJsZSgpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZlYXR1cmVDb3VudDsgKytpKSB7CiAgICAgICAgIHN1YnRhYmxlUmVjb3JkTG9jYXRpb25z
W2ldID0gbV9yZXN1bHQuc2l6ZSgpOwogICAgICAgICBvdmVyd3JpdGUxNihsb29rdXBMaXN0TG9j
YXRpb24gKyAyICsgMiAqIGksIG1fcmVzdWx0LnNpemUoKSAtIGxvb2t1cExpc3RMb2NhdGlvbik7
Ci0gICAgICAgIGFwcGVuZDE2KGkgPT0gMyA/IDMgOiAxKTsgLy8gVHlwZSAxOiAiUmVwbGFjZSBv
bmUgZ2x5cGggd2l0aCBvbmUgZ2x5cGgiIC8gVHlwZSAzOiAiUmVwbGFjZSBvbmUgZ2x5cGggd2l0
aCBvbmUgb2YgbWFueSBnbHlwaHMiCisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICBhcHBlbmQxNigzKTsgLy8gVHlwZSAzOiAiUmVwbGFjZSBvbmUgZ2x5
cGggd2l0aCBvbmUgb2YgbWFueSBnbHlwaHMiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAwOgorICAgICAgICAgICAgYXBwZW5kMTYoNCk7IC8vIFR5cGUgNDogIlJlcGxhY2UgbXVs
dGlwbGUgZ2x5cGhzIHdpdGggb25lIGdseXBoIgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBhcHBlbmQxNigxKTsgLy8gVHlwZSAxOiAiUmVwbGFjZSBv
bmUgZ2x5cGggd2l0aCBvbmUgZ2x5cGgiCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBhcHBlbmQxNigwKTsgLy8gTG9va3VwRmxhZwogICAgICAgICBhcHBlbmQxNigxKTsg
Ly8gU3ViVGFibGVDb3VudAogICAgICAgICBhcHBlbmQxNigwKTsgLy8gUGxhY2Vob2xkZXIgZm9y
IG9mZnNldCB0byBzdWJ0YWJsZSwgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIExvb2t1cCB0YWJs
ZQogICAgIH0KIAotICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc3VidGFibGVS
ZWNvcmRMb2NhdGlvbnNbMF0sICJ0ZXJtaW5hbCIpOwotICAgIGFwcGVuZEFyYWJpY1JlcGxhY2Vt
ZW50U3VidGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbMV0sICJtZWRpYWwiKTsKLSAgICBh
cHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzJd
LCAiaW5pdGlhbCIpOworICAgIGFwcGVuZExpZ2F0dXJlU3VidGFibGUoc3VidGFibGVSZWNvcmRM
b2NhdGlvbnNbMF0pOworICAgIGFwcGVuZEFyYWJpY1JlcGxhY2VtZW50U3VidGFibGUoc3VidGFi
bGVSZWNvcmRMb2NhdGlvbnNbMV0sICJ0ZXJtaW5hbCIpOworICAgIGFwcGVuZEFyYWJpY1JlcGxh
Y2VtZW50U3VidGFibGUoc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbMl0sICJtZWRpYWwiKTsKKyAg
ICBhcHBlbmRBcmFiaWNSZXBsYWNlbWVudFN1YnRhYmxlKHN1YnRhYmxlUmVjb3JkTG9jYXRpb25z
WzNdLCAiaW5pdGlhbCIpOwogCiAgICAgLy8gTWFudWFsbHkgYXBwZW5kIGVtcHR5ICJybGlnIiBz
dWJ0YWJsZQotICAgIG92ZXJ3cml0ZTE2KHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzNdICsgNiwg
bV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVSZWNvcmRMb2NhdGlvbnNbM10pOworICAgIG92ZXJ3
cml0ZTE2KHN1YnRhYmxlUmVjb3JkTG9jYXRpb25zWzRdICsgNiwgbV9yZXN1bHQuc2l6ZSgpIC0g
c3VidGFibGVSZWNvcmRMb2NhdGlvbnNbNF0pOwogICAgIGFwcGVuZDE2KDEpOyAvLyBGb3JtYXQg
MQogICAgIGFwcGVuZDE2KDYpOyAvLyBvZmZzZXQgdG8gY292ZXJhZ2UgdGFibGUsIHJlbGF0aXZl
IHRvIGJlZ2lubmluZyBvZiBzdWJzdGl0dXRpb24gdGFibGUKICAgICBhcHBlbmQxNigwKTsgLy8g
QWx0ZXJuYXRlU2V0Q291bnQKQEAgLTc3OCwxOCArOTA5LDI2IEBAIHZvaWQgU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUoKQogICAgIH0KIH0KIAorc3RhdGljIFN0cmluZyBj
b2RlcG9pbnRUb1N0cmluZyhVQ2hhcjMyIGNvZGVwb2ludCkKK3sKKyAgICBVQ2hhciBidWZmZXJb
Ml07CisgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgIFVCb29sIGVycm9yID0gZmFsc2U7Cisg
ICAgVTE2X0FQUEVORChidWZmZXIsIGxlbmd0aCwgMiwgY29kZXBvaW50LCBlcnJvcik7CisgICAg
cmV0dXJuIGVycm9yID8gU3RyaW5nKCkgOiBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOworfQorCitW
ZWN0b3I8R2x5cGgsIDE+IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6Z2x5cGhzRm9yQ29kZXBvaW50
KFVDaGFyMzIgY29kZXBvaW50KSBjb25zdAoreworICAgIHJldHVybiBtX2NvZGVwb2ludHNUb0lu
ZGljZXNNYXAuZ2V0KGNvZGVwb2ludFRvU3RyaW5nKGNvZGVwb2ludCkpOworfQorCiB2b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5n
ZXMmIHVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3QKIHsKICAg
ICBmb3IgKGF1dG8mIHVuaWNvZGVSYW5nZSA6IHVuaWNvZGVSYW5nZXMpIHsKICAgICAgICAgZm9y
IChhdXRvIGNvZGVwb2ludCA9IHVuaWNvZGVSYW5nZS5maXJzdDsgY29kZXBvaW50IDw9IHVuaWNv
ZGVSYW5nZS5zZWNvbmQ7ICsrY29kZXBvaW50KSB7Ci0gICAgICAgICAgICBVQ2hhciBidWZmZXJb
Ml07Ci0gICAgICAgICAgICB1aW50OF90IGxlbmd0aCA9IDA7Ci0gICAgICAgICAgICBVQm9vbCBl
cnJvciA9IGZhbHNlOwotICAgICAgICAgICAgVTE2X0FQUEVORChidWZmZXIsIGxlbmd0aCwgMiwg
Y29kZXBvaW50LCBlcnJvcik7Ci0gICAgICAgICAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGluZGV4IDogbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFwLmdldChTdHJp
bmcoYnVmZmVyLCBsZW5ndGgpKSkKLSAgICAgICAgICAgICAgICAgICAgZ2x5cGhTZXQuYWRkKGlu
ZGV4KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IGdseXBo
c0ZvckNvZGVwb2ludChjb2RlcG9pbnQpKQorICAgICAgICAgICAgICAgIGdseXBoU2V0LmFkZChp
bmRleCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04OTIsNyArMTAzMSw4IEBAIHZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOVGFibGUoKQogICAgICAgICBtX3Jlc3VsdC5h
cHBlbmQoMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihWZWN0b3I8
Y2hhcj4mIHZlY3RvciwgZmxvYXQgbnVtYmVyKQordGVtcGxhdGUgPHR5cGVuYW1lIFY+CitzdGF0
aWMgdm9pZCB3cml0ZUNGRkVuY29kZWROdW1iZXIoViYgdmVjdG9yLCBmbG9hdCBudW1iZXIpCiB7
CiAgICAgdmVjdG9yLmFwcGVuZCgweEZGKTsKICAgICBhcHBlbmQzMih2ZWN0b3IsIG51bWJlciAq
IDB4MTAwMDApOwpAQCAtOTQ0LDcgKzEwODQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2
b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCBjbG9zZWQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGNsb3Nl
ZCAmJiBtX2NmZkRhdGEuc2l6ZSgpKQorICAgICAgICBpZiAoY2xvc2VkICYmICFtX2NmZkRhdGEu
aXNFbXB0eSgpKQogICAgICAgICAgICAgY2xvc2VQYXRoKCk7CiAKICAgICAgICAgRmxvYXRQb2lu
dCBkZXN0aW5hdGlvbiA9IG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRhcmdldFBvaW50
IDogbV9jdXJyZW50ICsgdGFyZ2V0UG9pbnQ7CkBAIC0xMDU4LDI4ICsxMTk4LDU1IEBAIHZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjpwcm9jZXNzR2x5cGhFbGVtZW50KGNvbnN0IFNWR0VsZW1l
bnQmIGdseXBoT3JNaXNzaW5nCiAgICAgbV9nbHlwaHMuYXBwZW5kKEdseXBoRGF0YShXVEY6Om1v
dmUocGF0aCksIGdseXBoRWxlbWVudCwgaG9yaXpvbnRhbEFkdmFuY2UsIHZlcnRpY2FsQWR2YW5j
ZSwgbV9ib3VuZGluZ0JveCwgY29kZXBvaW50cykpOwogfQogCit2b2lkIFNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kTGlnYXR1cmVHbHlwaHMoKQoreworICAgIEhhc2hTZXQ8VUNoYXIzMj4g
bGlnYXR1cmVDb2RlcG9pbnRzOworICAgIEhhc2hTZXQ8VUNoYXIzMj4gbm9uTGlnYXR1cmVDb2Rl
cG9pbnRzOworICAgIGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykgeworICAgICAgICBhdXRv
IGNvZGVQb2ludHMgPSBTdHJpbmdWaWV3KGdseXBoLmNvZGVwb2ludHMpLmNvZGVQb2ludHMoKTsK
KyAgICAgICAgYXV0byBjb2RlUG9pbnRzSXRlcmF0b3IgPSBjb2RlUG9pbnRzLmJlZ2luKCk7Cisg
ICAgICAgIGlmIChjb2RlUG9pbnRzSXRlcmF0b3IgPT0gY29kZVBvaW50cy5lbmQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludCA9ICpjb2RlUG9pbnRz
SXRlcmF0b3I7CisgICAgICAgICsrY29kZVBvaW50c0l0ZXJhdG9yOworICAgICAgICBpZiAoY29k
ZVBvaW50c0l0ZXJhdG9yID09IGNvZGVQb2ludHMuZW5kKCkpCisgICAgICAgICAgICBub25MaWdh
dHVyZUNvZGVwb2ludHMuYWRkKGNvZGVwb2ludCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbGlnYXR1cmVDb2RlcG9pbnRzLmFkZChjb2RlcG9pbnQpOworICAgICAgICAgICAgZm9yICg7
IGNvZGVQb2ludHNJdGVyYXRvciAhPSBjb2RlUG9pbnRzLmVuZCgpOyArK2NvZGVQb2ludHNJdGVy
YXRvcikKKyAgICAgICAgICAgICAgICBsaWdhdHVyZUNvZGVwb2ludHMuYWRkKCpjb2RlUG9pbnRz
SXRlcmF0b3IpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvIGNvZGVwb2ludCA6
IG5vbkxpZ2F0dXJlQ29kZXBvaW50cykKKyAgICAgICAgbGlnYXR1cmVDb2RlcG9pbnRzLnJlbW92
ZShjb2RlcG9pbnQpOworICAgIGZvciAoYXV0byBjb2RlcG9pbnQgOiBsaWdhdHVyZUNvZGVwb2lu
dHMpIHsKKyAgICAgICAgYXV0byBjb2RlcG9pbnRzID0gY29kZXBvaW50VG9TdHJpbmcoY29kZXBv
aW50KTsKKyAgICAgICAgaWYgKCFjb2RlcG9pbnRzLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9n
bHlwaHMuYXBwZW5kKEdseXBoRGF0YShWZWN0b3I8Y2hhciwgMTc+KG1fZW1wdHlHbHlwaENoYXJT
dHJpbmcpLCBudWxscHRyLCBtX3VuaXRzUGVyRW0sIG1fdW5pdHNQZXJFbSwgRmxvYXRSZWN0KCks
IGNvZGVwb2ludHMpKTsKKyAgICB9Cit9CisKIGJvb2wgU1ZHVG9PVEZGb250Q29udmVydGVyOjpj
b21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5KGNvbnN0IEdseXBoRGF0YSYgZGF0YTEs
IGNvbnN0IEdseXBoRGF0YSYgZGF0YTIpCiB7Ci0gICAgdW5zaWduZWQgaTEgPSAwOwotICAgIHVu
c2lnbmVkIGkyID0gMDsKKyAgICBhdXRvIGNvZGVQb2ludHMxID0gU3RyaW5nVmlldyhkYXRhMS5j
b2RlcG9pbnRzKS5jb2RlUG9pbnRzKCk7CisgICAgYXV0byBjb2RlUG9pbnRzMiA9IFN0cmluZ1Zp
ZXcoZGF0YTIuY29kZXBvaW50cykuY29kZVBvaW50cygpOworICAgIGF1dG8gaXRlcmF0b3IxID0g
Y29kZVBvaW50czEuYmVnaW4oKTsKKyAgICBhdXRvIGl0ZXJhdG9yMiA9IGNvZGVQb2ludHMyLmJl
Z2luKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IGRhdGExLmNvZGVwb2ludHMubGVuZ3RoKCk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoMiA9IGRhdGEyLmNvZGVwb2ludHMubGVuZ3RoKCk7Ci0gICAg
d2hpbGUgKGkxIDwgbGVuZ3RoMSAmJiBpMiA8IGxlbmd0aDIpIHsKKyAgICB3aGlsZSAoaXRlcmF0
b3IxICE9IGNvZGVQb2ludHMxLmVuZCgpICYmIGl0ZXJhdG9yMiAhPSBjb2RlUG9pbnRzMi5lbmQo
KSkgewogICAgICAgICBVQ2hhcjMyIGNvZGVwb2ludDEsIGNvZGVwb2ludDI7Ci0gICAgICAgIGlm
IChkYXRhMS5jb2RlcG9pbnRzLmlzOEJpdCgpKQotICAgICAgICAgICAgY29kZXBvaW50MSA9IGRh
dGExLmNvZGVwb2ludHNbaTErK107Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFUxNl9ORVhU
KGRhdGExLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGkxLCBsZW5ndGgxLCBjb2RlcG9pbnQx
KTsKLQotICAgICAgICBpZiAoZGF0YTIuY29kZXBvaW50cy5pczhCaXQoKSkKLSAgICAgICAgICAg
IGNvZGVwb2ludDIgPSBkYXRhMi5jb2RlcG9pbnRzW2kyKytdOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBVMTZfTkVYVChkYXRhMi5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBpMiwgbGVu
Z3RoMiwgY29kZXBvaW50Mik7CisgICAgICAgIGNvZGVwb2ludDEgPSAqaXRlcmF0b3IxOworICAg
ICAgICBjb2RlcG9pbnQyID0gKml0ZXJhdG9yMjsKIAogICAgICAgICBpZiAoY29kZXBvaW50MSA8
IGNvZGVwb2ludDIpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGNvZGVw
b2ludDEgPiBjb2RlcG9pbnQyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICsraXRlcmF0b3IxOworICAgICAgICArK2l0ZXJhdG9yMjsKICAgICB9CiAKICAgICBpZiAobGVu
Z3RoMSA9PSBsZW5ndGgyICYmIGRhdGExLmdseXBoRWxlbWVudApAQCAtMTA4OCw2ICsxMjU1LDE1
IEBAIGJvb2wgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJlQ29kZXBvaW50c0xleGljb2dy
YXBoaWNhbGx5KGNvbnN0IEdseXBoRGF0YSYKICAgICByZXR1cm4gbGVuZ3RoMSA8IGxlbmd0aDI7
CiB9CiAKK3N0YXRpYyB2b2lkIHBvcHVsYXRlRW1wdHlHbHlwaENoYXJTdHJpbmcoVmVjdG9yPGNo
YXIsIDE3PiYgbywgdW5zaWduZWQgdW5pdHNQZXJFbSkKK3sKKyAgICB3cml0ZUNGRkVuY29kZWRO
dW1iZXIobywgdW5pdHNQZXJFbSk7CisgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKG8sIDApOwor
ICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihvLCAwKTsKKyAgICBvLmFwcGVuZChyTW92ZVRvKTsK
KyAgICBvLmFwcGVuZChlbmRDaGFyKTsKK30KKwogU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdU
b09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogICAg
IDogbV9mb250RWxlbWVudChmb250RWxlbWVudCkKICAgICAsIG1fZm9udEZhY2VFbGVtZW50KGNo
aWxkcmVuT2ZUeXBlPFNWR0ZvbnRGYWNlRWxlbWVudD4obV9mb250RWxlbWVudCkuZmlyc3QoKSkK
QEAgLTEwOTYsMTAgKzEyNzIsMTIgQEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogICAgICwgbV9h
ZHZhbmNlSGVpZ2h0TWF4KDApCiAgICAgLCBtX21pblJpZ2h0U2lkZUJlYXJpbmcoc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46Om1heCgpKQogICAgICwgbV91bml0c1BlckVtKDApCisgICAgLCBt
X2ZlYXR1cmVDb3VudEdTVUIoMCkKICAgICAsIG1fdGFibGVzQXBwZW5kZWRDb3VudCgwKQogICAg
ICwgbV93ZWlnaHQoNSkKICAgICAsIG1faXRhbGljKGZhbHNlKQogeworCiAgICAgZmxvYXQgZGVm
YXVsdEhvcml6b250YWxBZHZhbmNlID0gbV9mb250RmFjZUVsZW1lbnQgPyBtX2ZvbnRGYWNlRWxl
bWVudC0+aG9yaXpvbnRhbEFkdmFuY2VYKCkgOiAwOwogICAgIGZsb2F0IGRlZmF1bHRWZXJ0aWNh
bEFkdmFuY2UgPSBtX2ZvbnRGYWNlRWxlbWVudCA/IG1fZm9udEZhY2VFbGVtZW50LT52ZXJ0aWNh
bEFkdmFuY2VZKCkgOiAwOwogICAgIGJvb2wgaW5pdGlhbEdseXBoID0gdHJ1ZTsKQEAgLTExMDcs
MTcgKzEyODUsMTIgQEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0
ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogICAgIGlmIChtX2ZvbnRGYWNl
RWxlbWVudCkKICAgICAgICAgbV91bml0c1BlckVtID0gbV9mb250RmFjZUVsZW1lbnQtPnVuaXRz
UGVyRW0oKTsKIAorICAgIHBvcHVsYXRlRW1wdHlHbHlwaENoYXJTdHJpbmcobV9lbXB0eUdseXBo
Q2hhclN0cmluZywgbV91bml0c1BlckVtKTsKKwogICAgIGlmIChtX21pc3NpbmdHbHlwaEVsZW1l
bnQpCiAgICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoKm1fbWlzc2luZ0dseXBoRWxlbWVudCwg
bnVsbHB0ciwgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBkZWZhdWx0VmVydGljYWxBZHZhbmNl
LCBTdHJpbmcoKSwgaW5pdGlhbEdseXBoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPGNo
YXI+IG5vdGRlZkNoYXJTdHJpbmc7Ci0gICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihub3Rk
ZWZDaGFyU3RyaW5nLCBtX3VuaXRzUGVyRW0pOwotICAgICAgICB3cml0ZUNGRkVuY29kZWROdW1i
ZXIobm90ZGVmQ2hhclN0cmluZywgMCk7Ci0gICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihu
b3RkZWZDaGFyU3RyaW5nLCAwKTsKLSAgICAgICAgbm90ZGVmQ2hhclN0cmluZy5hcHBlbmQock1v
dmVUbyk7Ci0gICAgICAgIG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKGVuZENoYXIpOwotICAgICAg
ICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKFdURjo6bW92ZShub3RkZWZDaGFyU3RyaW5nKSwg
bnVsbHB0ciwgbV91bml0c1BlckVtLCBtX3VuaXRzUGVyRW0sIEZsb2F0UmVjdCgpLCBTdHJpbmco
KSkpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIG1fZ2x5cGhzLmFwcGVuZChHbHlwaERhdGEo
VmVjdG9yPGNoYXIsIDE3PihtX2VtcHR5R2x5cGhDaGFyU3RyaW5nKSwgbnVsbHB0ciwgbV91bml0
c1BlckVtLCBtX3VuaXRzUGVyRW0sIEZsb2F0UmVjdCgpLCBTdHJpbmcoKSkpOwogCiAgICAgZm9y
IChhdXRvJiBnbHlwaEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdHbHlwaEVsZW1lbnQ+KG1f
Zm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8mIHVuaWNvZGVBdHRyaWJ1dGUgPSBnbHlwaEVs
ZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dW5pY29kZUF0dHIpOwpAQCAtMTEyNSw2
ICsxMjk4LDggQEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0ZXIo
Y29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogICAgICAgICAgICAgcHJvY2Vzc0ds
eXBoRWxlbWVudChnbHlwaEVsZW1lbnQsICZnbHlwaEVsZW1lbnQsIGRlZmF1bHRIb3Jpem9udGFs
QWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgdW5pY29kZUF0dHJpYnV0ZSwgaW5pdGlh
bEdseXBoKTsKICAgICB9CiAKKyAgICBhcHBlbmRMaWdhdHVyZUdseXBocygpOworCiAgICAgaWYg
KG1fZ2x5cGhzLnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8R2x5cGg+OjptYXgoKSkgewog
ICAgICAgICBtX2dseXBocy5jbGVhcigpOwogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>