<?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>137918</bug_id>
          
          <creation_ts>2014-10-21 05:01:34 -0700</creation_ts>
          <short_desc>Use references instead of pointers in EditingStyle</short_desc>
          <delta_ts>2014-12-02 09:58:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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="Tibor Mészáros">mtiborinf</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1043156</commentid>
    <comment_count>0</comment_count>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-10-21 05:01:34 -0700</bug_when>
    <thetext>As Darin Adler suggested:
&quot;Good idea for future refactoring. Both arguments to this function template should be references.&quot;

Reference url: https://bugs.webkit.org/show_bug.cgi?id=133796#c20</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043159</commentid>
    <comment_count>1</comment_count>
      <attachid>240197</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-10-21 05:16:48 -0700</bug_when>
    <thetext>Created attachment 240197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043296</commentid>
    <comment_count>2</comment_count>
      <attachid>240197</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-21 15:51:12 -0700</bug_when>
    <thetext>Comment on attachment 240197
Patch

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

Looks good.

&gt; Source/WebCore/editing/EditingStyle.cpp:648
&gt;  template&lt;typename T&gt;
&gt;  TriState EditingStyle::triStateOfStyle(T* styleToCompare, ShouldIgnoreTextOnlyProperties shouldIgnoreTextOnlyProperties) const

Seems like T* needs to change to T&amp; here too, in a subsequent patch.

&gt; Source/WebCore/editing/EditingStyle.cpp:851
&gt; +    return getPropertiesNotIn(*m_mutableStyle.get(), computedStyle)-&gt;isEmpty();

No need for &quot;.get()&quot; here or in the many other places that do *x.get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046814</commentid>
    <comment_count>3</comment_count>
      <attachid>241109</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-06 08:21:41 -0800</bug_when>
    <thetext>Created attachment 241109
Patch

Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046836</commentid>
    <comment_count>4</comment_count>
      <attachid>241109</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-06 10:04:57 -0800</bug_when>
    <thetext>Comment on attachment 241109
Patch

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

r- because at least one of the dereference does not seem safe.

&gt; Source/WebCore/editing/EditingStyle.cpp:54
&gt; +#include &lt;stdio.h&gt;

Why?

&gt; Source/WebCore/editing/EditingStyle.cpp:136
&gt; +        return propertyCSSValue;

return propertyCSSValue.release();

&gt; Source/WebCore/editing/EditingStyle.cpp:137
&gt; +    return PassRefPtr&lt;CSSValue&gt;();

We usually just return nullptr; as this is shorter.

&gt; Source/WebCore/editing/EditingStyle.cpp:344
&gt; +    m_mutableStyle = style.mutableCopy();

Can this be moved to the initializer list now?

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:489
&gt; +        RefPtr&lt;EditingStyle&gt; newInlineStyle = EditingStyle::create(*inlineStyle);

Why is this safe? There is a null check right after...

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:791
&gt; +    RefPtr&lt;EditingStyle&gt; style = EditingStyle::create(*wrappingStyleSpan-&gt;inlineStyle());

Why is this safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046837</commentid>
    <comment_count>5</comment_count>
      <attachid>241109</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-06 10:11:27 -0800</bug_when>
    <thetext>Comment on attachment 241109
Patch

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

&gt; Source/WebCore/editing/EditingStyle.cpp:673
&gt; +        return triStateOfStyle(*EditingStyle::styleAtSelectionStart(selection));

EditingStyle::styleAtSelectionStart() can return null, why is it safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047830</commentid>
    <comment_count>6</comment_count>
      <attachid>241349</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-11 04:06:22 -0800</bug_when>
    <thetext>Created attachment 241349
Patch v2

Almost all of the suggested change has been taken, but some not:

&gt; Source/WebCore/editing/EditingStyle.cpp:344
&gt; +    m_mutableStyle = style.mutableCopy();

Can this be moved to the initializer list now?

No, it could not be moved to initializer list, because style could be nullptr.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:489
&gt; +        RefPtr&lt;EditingStyle&gt; newInlineStyle = EditingStyle::create(*inlineStyle);

Why is this safe? There is a null check right after...

This change has been removed from the patch.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:791
&gt; +    RefPtr&lt;EditingStyle&gt; style = EditingStyle::create(*wrappingStyleSpan-&gt;inlineStyle());

Why is this safe?

This change has been removed too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047831</commentid>
    <comment_count>7</comment_count>
      <attachid>241350</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-11 04:09:28 -0800</bug_when>
    <thetext>Created attachment 241350
Patch v3

The changelog is missing from the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047868</commentid>
    <comment_count>8</comment_count>
      <attachid>241350</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 09:34:05 -0800</bug_when>
    <thetext>Comment on attachment 241350
Patch v3

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

r=me with one fix before landing.

&gt; Source/WebCore/editing/EditingStyle.cpp:1520
&gt; +    if (!is&lt;CSSPrimitiveValue&gt;(&amp;fontWeight))

No, this is wrong. You will do an unnecessary null check. Just use if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047870</commentid>
    <comment_count>9</comment_count>
      <attachid>241350</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-11 09:35:34 -0800</bug_when>
    <thetext>Comment on attachment 241350
Patch v3

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

&gt; Source/WebCore/editing/EditingStyle.cpp:135
&gt; +    if (RefPtr&lt;CSSValue&gt; propertyCSSValue = style.getPropertyCSSValue(propertyID))
&gt; +        return propertyCSSValue.release();
&gt; +    return 0;

There is no reason for this if statement. Just:

    return style.getPropertyCSSValue(propertyID);

Also, please use nullptr, not 0, in the future.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1520
&gt;&gt; -    if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))
&gt;&gt; +    if (!is&lt;CSSPrimitiveValue&gt;(&amp;fontWeight))
&gt; 
&gt; No, this is wrong. You will do an unnecessary null check. Just use if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))

There is no need for this change. The is template should work on references as well as pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047871</commentid>
    <comment_count>10</comment_count>
      <attachid>241350</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-11 09:36:00 -0800</bug_when>
    <thetext>Comment on attachment 241350
Patch v3

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

&gt;&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1520
&gt;&gt;&gt; +    if (!is&lt;CSSPrimitiveValue&gt;(&amp;fontWeight))
&gt;&gt; 
&gt;&gt; No, this is wrong. You will do an unnecessary null check. Just use if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))
&gt; 
&gt; There is no need for this change. The is template should work on references as well as pointers.

Oops, my comment was not a response to Chris’s comment. In fact I was trying to say the same thing he was!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048398</commentid>
    <comment_count>11</comment_count>
      <attachid>241350</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-13 07:12:32 -0800</bug_when>
    <thetext>Comment on attachment 241350
Patch v3

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

&gt; Source/WebCore/editing/EditingStyle.cpp:1550
&gt; -    return fontWeightIsBold(extractPropertyValue(style, CSSPropertyFontWeight).get());
&gt; +    return fontWeightIsBold(*extractPropertyValue(style, CSSPropertyFontWeight).get());

It isn&apos;t safe, extractPropertyValue() can return with nullptr.
In this case you should return false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048402</commentid>
    <comment_count>12</comment_count>
      <attachid>241485</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-13 07:38:44 -0800</bug_when>
    <thetext>Created attachment 241485
Patch v4

I have updated the patch. The problem with it:
+    if (!is&lt;CSSPrimitiveValue&gt;(&amp;fontWeight))

was that Csaba said, so I fixed the code as He suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048403</commentid>
    <comment_count>13</comment_count>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-13 08:02:42 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 241350 [details]
&gt; Patch v3
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241350&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/EditingStyle.cpp:135
&gt; &gt; +    if (RefPtr&lt;CSSValue&gt; propertyCSSValue = style.getPropertyCSSValue(propertyID))
&gt; &gt; +        return propertyCSSValue.release();
&gt; &gt; +    return 0;
&gt; 
&gt; There is no reason for this if statement. Just:
&gt; 
&gt;     return style.getPropertyCSSValue(propertyID);
&gt; 
&gt; Also, please use nullptr, not 0, in the future.

Ok, I will use nullptr instead of 0, in the future.

&gt; 
&gt; &gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1520
&gt; &gt;&gt; -    if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))
&gt; &gt;&gt; +    if (!is&lt;CSSPrimitiveValue&gt;(&amp;fontWeight))
&gt; &gt; 
&gt; &gt; No, this is wrong. You will do an unnecessary null check. Just use if (!is&lt;CSSPrimitiveValue&gt;(fontWeight))
&gt; 
&gt; There is no need for this change. The is template should work on references
&gt; as well as pointers.

I have updated this part of the code, as Chris, Csaba and You suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048404</commentid>
    <comment_count>14</comment_count>
      <attachid>241485</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-13 08:08:52 -0800</bug_when>
    <thetext>Comment on attachment 241485
Patch v4

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

&gt; Source/WebCore/editing/EditingStyle.cpp:1163
&gt; +    

Please remove this empty line before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048639</commentid>
    <comment_count>15</comment_count>
      <attachid>241485</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-13 20:30:04 -0800</bug_when>
    <thetext>Comment on attachment 241485
Patch v4

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

&gt; Source/WebCore/editing/EditingStyle.cpp:1548
&gt; +    RefPtr&lt;CSSValue&gt; fontWeight = extractPropertyValue(style, CSSPropertyFontWeight).get();

There is no need for the &quot;.get()&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048731</commentid>
    <comment_count>16</comment_count>
      <attachid>241580</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-14 04:44:12 -0800</bug_when>
    <thetext>Created attachment 241580
Patch v5

The new line, and the .get() has been removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048940</commentid>
    <comment_count>17</comment_count>
      <attachid>241580</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-14 17:22:34 -0800</bug_when>
    <thetext>Comment on attachment 241580
Patch v5

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

r=me as long as you can give a satisfactory answer to all the questions about how we know various pointers are non-null

&gt; Source/WebCore/editing/EditingStyle.cpp:651
&gt; +    RefPtr&lt;MutableStyleProperties&gt; difference = getPropertiesNotIn(*m_mutableStyle, styleToCompare);

What guarantees that m_mutableStyle is non-null here?

&gt; Source/WebCore/editing/EditingStyle.cpp:1412
&gt; +        extractTextStyles(document, *mutableStyle, computedStyle.useFixedFontDefaultSize());

What guarantees that mutableStyle is non-null here? Can getPropertiesNotIn ever return null?

&gt; Source/WebCore/editing/EditingStyle.cpp:1548
&gt; +    return fontWeight ? fontWeightIsBold(*fontWeight) : false;

Forgot to mention this last time. I think this is even nicer with &amp;&amp;:

    return fontWeight &amp;&amp; fontWeightIsBold(*fontWeight);

&gt; Source/WebCore/editing/EditingStyle.cpp:1559
&gt; +    diffTextDecorations(*mutableStyle, CSSPropertyTextDecoration, baseTextDecorationsInEffect.get());

What guarantees mutableStyle is not null? Can EditingStyle::style ever return null?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048958</commentid>
    <comment_count>18</comment_count>
      <attachid>241580</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-14 18:03:43 -0800</bug_when>
    <thetext>Comment on attachment 241580
Patch v5

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

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1559
&gt;&gt; +    diffTextDecorations(*mutableStyle, CSSPropertyTextDecoration, baseTextDecorationsInEffect.get());
&gt; 
&gt; What guarantees mutableStyle is not null? Can EditingStyle::style ever return null?

Theoretically (without knowing the exact logic) it can, it simply returns m_mutableStyle.get().

But assuming if it can return nullptr, it isn&apos;t safe before this change, because diffTextDecorations()
uses it without nullptr check: RefPtr&lt;CSSValue&gt; textDecoration = style-&gt;getPropertyCSSValue(propertID);
( http://trac.webkit.org/browser/trunk/Source/WebCore/editing/EditingStyle.cpp#L1502 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049180</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-17 06:37:03 -0800</bug_when>
    <thetext>(In reply to https://bugs.webkit.org/show_bug.cgi?id=133796#c20)
&gt; &gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1557
&gt; &gt;&gt; +    ASSERT(baseStyle);
&gt; &gt; 
&gt; &gt; If you&apos;re going to ASSERT this, why not make it a reference?
&gt; Good idea for future refactoring. Both arguments to this function template
&gt; should be references.

The original idea was to refactor the code to use references instead
of pointers for the arguments of extractPropertiesNotIn(...):
https://trac.webkit.org/browser/trunk/Source/WebCore/editing/EditingStyle.cpp?rev=175067#L1553

But I think this patch tries to do too much thing at once. I tried to review
it in details and find how to address the issues that Darin noticed, but it
is to find the proper fix or answer quickly.

So I suggest splitting up this patch to smaller pieces. The original idea
can be a good starting point. Converting the second argument (baseStyle)
from pointer to reference seems to be easy and safe at all. 

But I&apos;m not sure if it is possible to do the same with the first argument
(styleWithRedundantProperties), because extractPropertiesNotIn(...) is called
from getPropertiesNotIn(...) directly and getPropertiesNotIn(...) is called
from many places - most of them seems to be safe (null pointer checked), except
one call: https://trac.webkit.org/browser/trunk/Source/WebCore/editing/EditingStyle.cpp?rev=175067#L651

Maybe it can be fixed with a null pointer check, but I have no idea what
return value should triStateOfStyle() have if m_mutableStyle is null.
Darin, Ryosuke? Maybe you have any idea for this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050993</commentid>
    <comment_count>20</comment_count>
      <attachid>242194</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-25 06:46:27 -0800</bug_when>
    <thetext>Created attachment 242194
Patch v6

updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050997</commentid>
    <comment_count>21</comment_count>
      <attachid>241580</attachid>
    <who name="Tibor Mészáros">mtiborinf</who>
    <bug_when>2014-11-25 06:57:47 -0800</bug_when>
    <thetext>Comment on attachment 241580
Patch v5

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

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:651
&gt;&gt; +    RefPtr&lt;MutableStyleProperties&gt; difference = getPropertiesNotIn(*m_mutableStyle, styleToCompare);
&gt; 
&gt; What guarantees that m_mutableStyle is non-null here?

Good point, I added a nullptr check to guarantee that m_mutableStyle isn&apos;t nullptr.
This case was previously handled by if(difference-&gt;isEmpty()) check below.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1412
&gt;&gt; +        extractTextStyles(document, *mutableStyle, computedStyle.useFixedFontDefaultSize());
&gt; 
&gt; What guarantees that mutableStyle is non-null here? Can getPropertiesNotIn ever return null?

mutableStyle is the return value of getPropertiesNotIn(*style-&gt;style(), computedStyle). getPropertiesNotIn() simply pass through the return value of extractPropertiesNotIn(), which can&apos;t be nullptr.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1548
&gt;&gt; +    return fontWeight ? fontWeightIsBold(*fontWeight) : false;
&gt; 
&gt; Forgot to mention this last time. I think this is even nicer with &amp;&amp;:
&gt; 
&gt;     return fontWeight &amp;&amp; fontWeightIsBold(*fontWeight);

Thanks, I fixed it too.

&gt;&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1559
&gt;&gt;&gt; +    diffTextDecorations(*mutableStyle, CSSPropertyTextDecoration, baseTextDecorationsInEffect.get());
&gt;&gt; 
&gt;&gt; What guarantees mutableStyle is not null? Can EditingStyle::style ever return null?
&gt; 
&gt; Theoretically (without knowing the exact logic) it can, it simply returns m_mutableStyle.get().
&gt; 
&gt; But assuming if it can return nullptr, it isn&apos;t safe before this change, because diffTextDecorations()
&gt; uses it without nullptr check: RefPtr&lt;CSSValue&gt; textDecoration = style-&gt;getPropertyCSSValue(propertID);
&gt; ( http://trac.webkit.org/browser/trunk/Source/WebCore/editing/EditingStyle.cpp#L1502 )

Result is copied from the non null styleWithRedundantProperties, which guarantees that result-&gt;style() alias mutableStyle is non nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051858</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-02 09:14:14 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 241580 [details]
&gt; Patch v5
...
The answers convinced me, I can&apos;t find any other issue.
Darin, do you agree if it is ready for landing now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051869</commentid>
    <comment_count>23</comment_count>
      <attachid>242194</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-02 09:58:52 -0800</bug_when>
    <thetext>Comment on attachment 242194
Patch v6

Clearing flags on attachment: 242194

Committed r176668: &lt;http://trac.webkit.org/changeset/176668&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051870</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-02 09:58:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240197</attachid>
            <date>2014-10-21 05:16:48 -0700</date>
            <delta_ts>2014-10-21 07:01:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>24753</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MTY1NDhlLi5iYjcwNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAg
QEAKKzIwMTQtMTAtMjEgIFRpYm9yIE1lc3phcm9zICA8dG1lc3phcm9zLnUtc3plZ2VkQHBhcnRu
ZXIuc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2lu
dGVycyBpbiBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzkxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpFZGl0aW5n
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9yRnJvbVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmJhY2tncm91bmRDb2xvckZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjp0
ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGV4
dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6ZXh0
cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNvcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydGll
c05vdEluKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3Bh
bnMpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0
eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2wpOgorCiAyMDE0LTEwLTIxICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIE1ha2UgZGFz
aFBhdHRlcm4sIGRvdFBhdHRlcm4gaW4gR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9r
ZVN0eWxlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRl
eCA3ZjYxZDNmLi41YjFjMDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqCiAgICAgcmV0
dXJuIGNvcHlQcm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVy
dGllc1RvSW5jbHVkZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5
VmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEKQogewotICAgIHJldHVybiBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHBy
b3BlcnR5SUQpIDogUGFzc1JlZlB0cjxDU1NWYWx1ZT4oKTsKKyAgICByZXR1cm4gc3R5bGUuZ2V0
UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqIGNvbXB1
dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxlRXh0cmFjdG9yJiBjb21w
dXRlZFN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgcmV0dXJuIGNvbXB1
dGVkU3R5bGUtPnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGNvbXB1dGVk
U3R5bGUucHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWludCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlEKQoraW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQmIHN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgaW50IGlk
ZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZh
bHVlSUQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdp
dGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4o
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5
bGUpOwogZW51bSBMZWdhY3lGb250U2l6ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwg
VXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQaXhlbFZhbHVlc01hdGNoIH07CiBzdGF0aWMgaW50IGxl
Z2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBi
b29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwog
c3RhdGljIGJvb2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqKTsKQEAgLTMzMywx
MiArMzMzLDExIEBAIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbiwgUHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0CiAgICAgaW5pdChwb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAotRWRpdGluZ1N0eWxl
OjpFZGl0aW5nU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkKK0VkaXRpbmdTdHls
ZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiAgICAgOiBtX3No
b3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKGZhbHNlKQogICAgICwgbV9mb250U2l6ZURlbHRh
KE5vRm9udERlbHRhKQogewotICAgIGlmIChzdHlsZSkKLSAgICAgICAgbV9tdXRhYmxlU3R5bGUg
PSBzdHlsZS0+bXV0YWJsZUNvcHkoKTsKKyAgICBtX211dGFibGVTdHlsZSA9IHN0eWxlLm11dGFi
bGVDb3B5KCk7CiAgICAgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKIH0KIApAQCAtMzY5LDEzICsz
NjgsMTMgQEAgc3RhdGljIFJHQkEzMiBjc3NWYWx1ZVRvUkdCQShDU1NWYWx1ZSogY29sb3JWYWx1
ZSkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgUkdCQTMyIHRleHRD
b2xvckZyb21TdHlsZShUKiBzdHlsZSkKK3N0YXRpYyBpbmxpbmUgUkdCQTMyIHRleHRDb2xvckZy
b21TdHlsZShUJiBzdHlsZSkKIHsKICAgICByZXR1cm4gY3NzVmFsdWVUb1JHQkEoZXh0cmFjdFBy
b3BlcnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgUkdCQTMyIGJhY2tncm91bmRDb2xvckZyb21T
dHlsZShUKiBzdHlsZSkKK3N0YXRpYyBpbmxpbmUgUkdCQTMyIGJhY2tncm91bmRDb2xvckZyb21T
dHlsZShUJiBzdHlsZSkKIHsKICAgICByZXR1cm4gY3NzVmFsdWVUb1JHQkEoZXh0cmFjdFByb3Bl
cnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5nZXQoKSk7CiB9CkBA
IC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGludCB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVu
ZChpbnQgdGV4dEFsaWduLCBpbnQgZGlyZWN0aW9uKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RhdGljIGludCB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChUKiBzdHlsZSkKK3N0
YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoVCYgc3R5bGUpCiB7CiAgICAg
cmV0dXJuIHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKGlkZW50aWZpZXJGb3JTdHlsZVBy
b3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eVRleHRBbGlnbiksIGlkZW50aWZpZXJGb3JTdHlsZVBy
b3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eURpcmVjdGlvbikpOwogfQpAQCAtNjQ4LDcgKzY0Nyw3
IEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZSog
c3R5bGUpIGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogVHJpU3RhdGUgRWRpdGluZ1N0eWxl
Ojp0cmlTdGF0ZU9mU3R5bGUoVCogc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5
UHJvcGVydGllcyBzaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0CiB7Ci0gICAg
UmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGRpZmZlcmVuY2UgPSBnZXRQcm9wZXJ0aWVz
Tm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlVG9Db21wYXJlKTsKKyAgICBSZWZQdHI8
TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNOb3RJbigq
bV9tdXRhYmxlU3R5bGUuZ2V0KCksICpzdHlsZVRvQ29tcGFyZSk7CiAKICAgICBpZiAoc2hvdWxk
SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzID09IElnbm9yZVRleHRPbmx5UHJvcGVydGllcykKICAg
ICAgICAgZGlmZmVyZW5jZS0+cmVtb3ZlUHJvcGVydGllc0luU2V0KHRleHRPbmx5UHJvcGVydGll
cywgV1RGX0FSUkFZX0xFTkdUSCh0ZXh0T25seVByb3BlcnRpZXMpKTsKQEAgLTg0OSw3ICs4NDgs
NyBAQCBib29sIEVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5v
ZGUoTm9kZSogbm9kZSkgY29uc3QKICAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9k
ZSk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwg
JmNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGdldFByb3BlcnRpZXNOb3RJ
bigqbV9tdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CiB9CiAK
IGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChj
b25zdCBIVE1MRWxlbWVudCogZWxlbWVudCkKQEAgLTkyMCwxMCArOTE5LDEwIEBAIHZvaWQgRWRp
dGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgU2hv
dWxkUHJlc2VydmVXcml0CiAKICAgICByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcygqc3R5bGVB
dFBvc2l0aW9uKTsKIAotICAgIGlmICh0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChtX211
dGFibGVTdHlsZS5nZXQoKSkgPT0gdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoc3R5bGVB
dFBvc2l0aW9uKSkKKyAgICBpZiAodGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoKm1fbXV0
YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCgqc3R5bGVB
dFBvc2l0aW9uKSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5VGV4dEFsaWduKTsKIAotICAgIGlmICh0ZXh0Q29sb3JGcm9tU3R5bGUobV9tdXRhYmxl
U3R5bGUuZ2V0KCkpID09IHRleHRDb2xvckZyb21TdHlsZShzdHlsZUF0UG9zaXRpb24pKQorICAg
IGlmICh0ZXh0Q29sb3JGcm9tU3R5bGUoKm1fbXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0Q29s
b3JGcm9tU3R5bGUoKnN0eWxlQXRQb3NpdGlvbikpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIAogICAgIGlmIChoYXNUcmFuc3BhcmVu
dEJhY2tncm91bmRDb2xvcihtX211dGFibGVTdHlsZS5nZXQoKSkKQEAgLTExNjEsNyArMTE2MCw3
IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5
bGVkRWxlbWVudCogZWxlbWVudCwgTm9kZSoKICAgICAvLyAxLiBSZW1vdmUgc3R5bGUgZnJvbSBt
YXRjaGVkIHJ1bGVzIGJlY2F1c2Ugc3R5bGUgcmVtYWluIHdpdGhvdXQgcmVwZWF0aW5nIGl0IGlu
IGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbgogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVt
ZW50KGVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIGlm
IChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+aXNFbXB0
eSgpKQotICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFi
bGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKKyAgICAgICAgbV9t
dXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLmdldCgpLCAq
c3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKIAogICAgIC8vIDIuIFJlbW92ZSBzdHlsZSBw
cmVzZW50IGluIGNvbnRleHQgYW5kIG5vdCBvdmVycmlkZW4gYnkgbWF0Y2hlZCBydWxlcy4KICAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb21wdXRlZFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVh
dGUoY29udGV4dCwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CkBAIC0xMTcwLDE1ICsxMTY5
LDE1IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQo
U3R5bGVkRWxlbWVudCogZWxlbWVudCwgTm9kZSoKICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGUt
Pm1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwg
Q1NTVmFsdWVUcmFuc3BhcmVudCk7CiAKICAgICAgICAgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUo
Y29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxl
cy5nZXQoKSk7Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKG1f
bXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSk7
CisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVT
dHlsZS5nZXQoKSwgKmNvbXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKTsKICAgICB9
CiAKICAgICAvLyAzLiBJZiB0aGlzIGVsZW1lbnQgaXMgYSBzcGFuIGFuZCBoYXMgZGlzcGxheTog
aW5saW5lIG9yIGZsb2F0OiBub25lLCByZW1vdmUgdGhlbSB1bmxlc3MgdGhleSBhcmUgb3ZlcnJp
ZGVuIGJ5IHJ1bGVzLgogICAgIC8vIFRoZXNlIHJ1bGVzIGFyZSBhZGRlZCBieSBzZXJpYWxpemF0
aW9uIGNvZGUgdG8gd3JhcCB0ZXh0IG5vZGVzLgogICAgIGlmIChpc1N0eWxlU3Bhbk9yU3Bhbldp
dGhPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCkpIHsKLSAgICAgICAgaWYgKCFzdHlsZUZyb21N
YXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSAmJiBp
ZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShtX211dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVy
dHlEaXNwbGF5KSA9PSBDU1NWYWx1ZUlubGluZSkKKyAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRj
aGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSAmJiBpZGVu
dGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSgqbV9tdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5
RGlzcGxheSkgPT0gQ1NTVmFsdWVJbmxpbmUpCiAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5KTsKLSAgICAgICAgaWYgKCFzdHlsZUZy
b21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGbG9hdCkgJiYg
aWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkobV9tdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3Bl
cnR5RmxvYXQpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRjaGVk
UnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGbG9hdCkgJiYgaWRlbnRpZmll
ckZvclN0eWxlUHJvcGVydHkoKm1fbXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZsb2F0
KSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlGbG9hdCk7CiAgICAgfQogfQpAQCAtMTQwNSwxMSArMTQwNCwxMSBA
QCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uKQogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHls
ZShub2RlKTsKIAogICAgIC8vIEZJWE1FOiB0YWtlIGNhcmUgb2YgYmFja2dyb3VuZC1jb2xvciBp
biBlZmZlY3QKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxl
ID0gZ2V0UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCAmY29tcHV0ZWRTdHlsZSk7Cisg
ICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IGdldFByb3Bl
cnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpOwogCiAgICAgcmVjb25j
aWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7CiAgICAgaWYg
KCFkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCkpCi0gICAg
ICAgIGV4dHJhY3RUZXh0U3R5bGVzKGRvY3VtZW50LCBtdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1
dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CisgICAgICAgIGV4dHJhY3RUZXh0
U3R5bGVzKGRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlLnVzZUZp
eGVkRm9udERlZmF1bHRTaXplKCkpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHdoaXRlc3BhY2Ug
c3R5bGUgaW4gYSB0YWIgc3BhbiB3b3VsZCBjb2xsYXBzZSB0aGUgdGFiIGludG8gYSBzcGFjZS4K
ICAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgfHwg
aXNUYWJTcGFuTm9kZSgocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpKQpAQCAtMTQyNCwzNCAr
MTQyMywzMiBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwg
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIG1fY3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUt
PmFzVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRUZXh0RGVj
b3JhdGlvblByb3BlcnR5KE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBjb25zdCBDU1NW
YWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitz
dGF0aWMgdm9pZCBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmIHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5sZW5ndGgo
KSkKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1RleHREZWNvcmF0
aW9uLT5jc3NUZXh0KCksIHN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5SUQpKTsK
KyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgbmV3VGV4dERlY29yYXRpb24t
PmNzc1RleHQoKSwgc3R5bGUucHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpcyByZWR1bmRhbnQgc2lu
Y2UgaXQgZG9lcyBub3QgcmVtb3ZlIGFueSB0ZXh0IGRlY29yYXRpb25zLgotICAgICAgICBzdHls
ZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5SUQpOwogICAgIH0KIH0KIAotdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRl
eHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkKK3ZvaWQgU3R5bGVDaGFuZ2U6
OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYgc3R5bGUsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpCiB7Ci0gICAg
QVNTRVJUKHN0eWxlKTsKLQogICAgIGlmIChpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHls
ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSA9PSBDU1NWYWx1ZUJvbGQpIHsKLSAgICAgICAgc3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CisgICAgICAgIHN0eWxl
LnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAgICAgICAgIG1fYXBwbHlC
b2xkID0gdHJ1ZTsKICAgICB9CiAKICAgICBpbnQgZm9udFN0eWxlID0gaWRlbnRpZmllckZvclN0
eWxlUHJvcGVydHkoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKICAgICBpZiAoZm9udFN0
eWxlID09IENTU1ZhbHVlSXRhbGljIHx8IGZvbnRTdHlsZSA9PSBDU1NWYWx1ZU9ibGlxdWUpIHsK
LSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKKyAg
ICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUpOwogICAgICAg
ICBtX2FwcGx5SXRhbGljID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBBc3N1bWluZyByZWNvbmNp
bGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMgaGFzIGJlZW4gY2FsbGVkLCB0aGVyZSBzaG91bGQg
bm90IGJlIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICAvLyBGdXJ0aGVy
bW9yZSwgdGV4dC1kZWNvcmF0aW9uOiBub25lIGhhcyBiZWVuIHRyaW1tZWQgc28gdGhhdCB0ZXh0
LWRlY29yYXRpb24gcHJvcGVydHkgaXMgYWx3YXlzIGEgQ1NTVmFsdWVMaXN0LgotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNv
cmF0aW9uID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uKTsKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkpIHsK
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwpAQCAtMTQ2OSwzOSArMTQ2
NiwzOSBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9j
dW1lbnQsIE11dGFibGVTdHlsZVByb3BlcnRpZXMqCiAgICAgaW50IHZlcnRpY2FsQWxpZ24gPSBp
ZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWdu
KTsKICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKICAgICBjYXNlIENTU1ZhbHVlU3ViOgot
ICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsK
KyAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsK
ICAgICAgICAgbV9hcHBseVN1YnNjcmlwdCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTVmFsdWVTdXBlcjoKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3Bl
cnR5VmVydGljYWxBbGlnbik7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3Bl
cnR5VmVydGljYWxBbGlnbik7CiAgICAgICAgIG1fYXBwbHlTdXBlcnNjcmlwdCA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUNvbG9yKSkgeworICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Q29sb3IpKSB7CiAgICAgICAgIG1fYXBwbHlGb250Q29sb3IgPSBDb2xvcih0
ZXh0Q29sb3JGcm9tU3R5bGUoc3R5bGUpKS5zZXJpYWxpemVkKCk7Ci0gICAgICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgc3R5bGUucmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgfQogCi0gICAgbV9hcHBseUZvbnRGYWNlID0g
c3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKKyAgICBtX2Fw
cGx5Rm9udEZhY2UgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWls
eSk7CiAgICAgLy8gUmVtb3ZlIHNpbmdsZSBxdW90ZXMgZm9yIE91dGxvb2sgMjAwNyBjb21wYXRp
YmlsaXR5LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NDQ4
CiAgICAgbV9hcHBseUZvbnRGYWNlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcnLCAiIik7Ci0gICAg
c3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CisgICAgc3R5bGUu
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKIAotICAgIGlmIChSZWZQdHI8
Q1NTVmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250U2l6ZSkpIHsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250U2l6ZSA9IHN0eWxl
LmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKICAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRTaXplKSkKLSAgICAgICAgICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFrZSBzZW5zZSBv
ZiB0aGUgbnVtYmVyLiBQdXQgbm8gZm9udCBzaXplLgorICAgICAgICAgICAgc3R5bGUucmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7IC8vIENhbid0IG1ha2Ugc2Vuc2Ugb2YgdGhl
IG51bWJlci4gUHV0IG5vIGZvbnQgc2l6ZS4KICAgICAgICAgZWxzZSBpZiAoaW50IGxlZ2FjeUZv
bnRTaXplID0gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAgICAgICAgICAgc2hvdWxk
VXNlRml4ZWRGb250RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1
ZXNNYXRjaCkpIHsKICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9IFN0cmluZzo6bnVtYmVy
KGxlZ2FjeUZvbnRTaXplKTsKLSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTaXplKTsKKyAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFNpemUpOwogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBkaWZm
VGV4dERlY29yYXRpb25zKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQg
ZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKIHsKLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcGVydElEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOwogICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4ocmVmVGV4dERl
Y29yYXRpb24pKQogICAgICAgICByZXR1cm47CiAKQEAgLTE1MTQsMTQgKzE1MTEsMTQgQEAgc3Rh
dGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm8KICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxl
LCBuZXdUZXh0RGVjb3JhdGlvbi5nZXQoKSwgcHJvcGVydElEKTsKIH0KIAotc3RhdGljIGJvb2wg
Zm9udFdlaWdodElzQm9sZChDU1NWYWx1ZSogZm9udFdlaWdodCkKK3N0YXRpYyBib29sIGZvbnRX
ZWlnaHRJc0JvbGQoQ1NTVmFsdWUmIGZvbnRXZWlnaHQpCiB7CiAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oZm9udFdlaWdodCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IEJlY2F1c2UgYiB0YWcgY2FuIG9ubHkgYm9sZCB0ZXh0LCB0aGVyZSBhcmUgb25seSB0d28gc3Rh
dGVzIGluIHBsYWluIGh0bWw6IGJvbGQgYW5kIG5vdCBib2xkLgogICAgIC8vIENvbGxhcHNlIGFs
bCBvdGhlciB2YWx1ZXMgdG8gZWl0aGVyIG9uZSBvZiB0aGVzZSB0d28gc3RhdGVzIGZvciBlZGl0
aW5nIHB1cnBvc2VzLgotICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpm
b250V2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihmb250V2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NW
YWx1ZTEwMDoKICAgICAgICAgY2FzZSBDU1NWYWx1ZTIwMDoKICAgICAgICAgY2FzZSBDU1NWYWx1
ZTMwMDoKQEAgLTE1NDQsNDEgKzE1NDEsNDAgQEAgc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9s
ZChDU1NWYWx1ZSogZm9udFdlaWdodCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBib29sIGZvbnRXZWlnaHRJc0JvbGQoVCogc3R5bGUpCitzdGF0aWMgYm9vbCBmb250V2VpZ2h0
SXNCb2xkKFQmIHN0eWxlKQogewotICAgIHJldHVybiBmb250V2VpZ2h0SXNCb2xkKGV4dHJhY3RQ
cm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKKyAgICBy
ZXR1cm4gZm9udFdlaWdodElzQm9sZCgqZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIENTU1By
b3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3Rh
dGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZXh0cmFjdFByb3BlcnRpZXNO
b3RJbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJh
c2VTdHlsZSkKK3N0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4dHJh
Y3RQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9w
ZXJ0aWVzLCBUJiBiYXNlU3R5bGUpCiB7Ci0gICAgQVNTRVJUKHN0eWxlV2l0aFJlZHVuZGFudFBy
b3BlcnRpZXMpOwogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHJlc3VsdCA9IEVkaXRpbmdTdHls
ZTo6Y3JlYXRlKHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMpOwotICAgIHJlc3VsdC0+cmVt
b3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoKmJhc2VTdHlsZSk7CisgICAgcmVzdWx0LT5yZW1vdmVF
cXVpdmFsZW50UHJvcGVydGllcyhiYXNlU3R5bGUpOwogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUgPSByZXN1bHQtPnN0eWxlKCk7CiAKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IGV4dHJhY3RQcm9wZXJ0eVZh
bHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7
Ci0gICAgZGlmZlRleHREZWNvcmF0aW9ucyhtdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7Ci0gICAg
ZGlmZlRleHREZWNvcmF0aW9ucyhtdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQo
KSk7CisgICAgZGlmZlRleHREZWNvcmF0aW9ucygqbXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uLCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwor
ICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMoKm11dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0
LmdldCgpKTsKIAotICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1By
b3BlcnR5Rm9udFdlaWdodCkgJiYgZm9udFdlaWdodElzQm9sZChtdXRhYmxlU3R5bGUuZ2V0KCkp
ID09IGZvbnRXZWlnaHRJc0JvbGQoYmFzZVN0eWxlKSkKKyAgICBpZiAoZXh0cmFjdFByb3BlcnR5
VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpICYmIGZvbnRXZWlnaHRJc0Jv
bGQoKm11dGFibGVTdHlsZS5nZXQoKSkgPT0gZm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQog
ICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCk7CiAKLSAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0
eUNvbG9yKSAmJiB0ZXh0Q29sb3JGcm9tU3R5bGUobXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0
Q29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKKyAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUo
YmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKSAmJiB0ZXh0Q29sb3JGcm9tU3R5bGUoKm11dGFi
bGVTdHlsZS5nZXQoKSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKGJhc2VTdHlsZSkpCiAgICAgICAg
IG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAKICAgICBp
ZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eVRleHRBbGlnbikK
LSAgICAgICAgJiYgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQobXV0YWJsZVN0eWxlLmdl
dCgpKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChiYXNlU3R5bGUpKQorICAgICAg
ICAmJiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCgqbXV0YWJsZVN0eWxlLmdldCgpKSA9
PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChiYXNlU3R5bGUpKQogICAgICAgICBtdXRh
YmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWduKTsKIAotICAgIGlm
IChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKSAmJiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUobXV0YWJsZVN0eWxlLmdldCgpKSA9PSBi
YWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKKyAgICBpZiAoZXh0cmFjdFByb3Bl
cnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgJiYgYmFja2dy
b3VuZENvbG9yRnJvbVN0eWxlKCptdXRhYmxlU3R5bGUuZ2V0KCkpID09IGJhY2tncm91bmRDb2xv
ckZyb21TdHlsZShiYXNlU3R5bGUpKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAogICAgIHJldHVybiBtdXRhYmxlU3R5
bGUucmVsZWFzZSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotUGFzc1JlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpCitQYXNzUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMm
IHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQmIGJhc2VTdHlsZSkKIHsKICAgICByZXR1
cm4gZXh0cmFjdFByb3BlcnRpZXNOb3RJbihzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBi
YXNlU3R5bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKaW5kZXggNWUx
NzYyMi4uNWZiNzZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCkBAIC04
NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5n
U3R5bGUocG9zaXRpb24sIHByb3BlcnRpZXNUb0luY2x1ZGUpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShjb25zdCBTdHlsZVByb3BlcnRpZXMq
IHN0eWxlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRlKGNvbnN0
IFN0eWxlUHJvcGVydGllcyYgc3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEVkaXRpbmdTdHlsZShzdHlsZSkpOwogICAgIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2
YXRlOgogICAgIEVkaXRpbmdTdHlsZSgpOwogICAgIEVkaXRpbmdTdHlsZShOb2RlKiwgUHJvcGVy
dGllc1RvSW5jbHVkZSk7CiAgICAgRWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiwgUHJvcGVy
dGllc1RvSW5jbHVkZSk7Ci0gICAgZXhwbGljaXQgRWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydGllcyopOworICAgIGV4cGxpY2l0IEVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVByb3BlcnRp
ZXMmKTsKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CiAgICAgdm9pZCBpbml0KE5vZGUqLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lk
IHJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKQEAg
LTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKICAgICB9CiBwcml2YXRlOgotICAgIHZvaWQgZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQq
LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSk7CisgICAgdm9pZCBleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCosIE11dGFibGVTdHls
ZVByb3BlcnRpZXMmLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKTsKIAogICAg
IFN0cmluZyBtX2Nzc1N0eWxlOwogICAgIGJvb2wgbV9hcHBseUJvbGQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggNmUwODk1MS4uZGIyMjc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtOTU2LDcgKzk1Niw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxl
UHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAg
aWYgKHN0eWxlKQotICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQoKSwgRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUpLmdldCgpLCBlZGl0
aW5nQWN0aW9uKSk7CisgICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgqc3R5bGUpLmdldCgpLCBl
ZGl0aW5nQWN0aW9uKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTk3NSw3ICs5NzUs
NyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3RpbwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6
Q2FyZXRTZWxlY3Rpb246CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlv
bjoKICAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5
bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUp
LmdldCgpLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9ja1Byb3Bl
cnRpZXMpKTsKKyAgICAgICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50KCksIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCpzdHlsZSkuZ2V0KCksIGVkaXRp
bmdBY3Rpb24sIEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOwogICAg
ICAgICBicmVhazsKICAgICB9CiB9CkBAIC0zMDMzLDcgKzMwMzMsNyBAQCB2b2lkIEVkaXRvcjo6
Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZwogICAgICAgICB0eXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlw
aW5nU3R5bGUoKS0+Y29weSgpOwogICAgICAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVXaXRoU3R5
bGUoc3R5bGUpOwogICAgIH0gZWxzZQotICAgICAgICB0eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6Y3JlYXRlKHN0eWxlKTsKKyAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNy
ZWF0ZSgqc3R5bGUpOwogCiAgICAgdHlwaW5nU3R5bGUtPnByZXBhcmVUb0FwcGx5QXQobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgp
LCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNDU4
MzYzYi4uZTdmYWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5l
KEluc2VydAogICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVk
RWxlbWVudD4obm9kZS5nZXQoKSk7CiAKICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBp
bmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCk7Ci0gICAgICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoaW5saW5lU3R5
bGUpOworICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBuZXdJbmxpbmVTdHlsZSA9IEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKCppbmxpbmVTdHlsZSk7CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZSkg
ewogICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8UXVhbGlmaWVkTmFtZT4gYXR0cmlidXRlczsKQEAgLTc4OCw3ICs3ODgs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKEluc2Vy
dGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCiAgICAgaWYgKCF3cmFwcGluZ1N0eWxlU3BhbikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZSh3cmFwcGluZ1N0eWxlU3Bhbi0+aW5saW5lU3R5bGUoKSk7CisgICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgqd3JhcHBpbmdT
dHlsZVNwYW4tPmlubGluZVN0eWxlKCkpOwogICAgIENvbnRhaW5lck5vZGUqIGNvbnRleHQgPSB3
cmFwcGluZ1N0eWxlU3Bhbi0+cGFyZW50Tm9kZSgpOwogCiAgICAgLy8gSWYgTWFpbCB3cmFwcyB0
aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3RhdGlvbiBibG9ja3F1b3RlLCBvciBpZiB5
b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAppbmRleCAwZThmZjgzLi45M2ZiNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC00OTgsNyArNDk4LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHls
ZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKGNvbnN0IE5vZGUqIG4KICAgICAvLyBGSVhN
RTogSGF2aW5nIHRvIGNvbnN0X2Nhc3QgaGVyZSBpcyB1Z2x5LCBidXQgaXQgaXMgcXVpdGUgYSBi
aXQgb2Ygd29yayB0byB1bnRhbmdsZQogICAgIC8vIHRoZSBub24tY29uc3QtbmVzcyBvZiBzdHls
ZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50LgogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
Y29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4o
bm9kZSkpOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpj
cmVhdGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
c3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgqZWxlbWVudC0+aW5saW5lU3R5bGUoKSk7CiAg
ICAgc3R5bGUtPm1lcmdlU3R5bGVGcm9tUnVsZXMoZWxlbWVudCk7CiAgICAgcmV0dXJuIHN0eWxl
LnJlbGVhc2UoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241109</attachid>
            <date>2014-11-06 08:21:41 -0800</date>
            <delta_ts>2014-11-11 04:06:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch_v11_chlog.patch</filename>
            <type>text/plain</type>
            <size>28691</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNzJhNGRmLi5hNmJkMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTQtMTEtMDYgIFRpYm9yIE1lc3phcm9zICA8dG1lc3phcm9zLnUtc3plZ2VkQHBhcnRu
ZXIuc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2lu
dGVycyBpbiBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzkxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpFZGl0aW5n
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9yRnJvbVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmJhY2tncm91bmRDb2xvckZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjp0
ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGV4
dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6ZXh0
cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNvcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydGll
c05vdEluKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKToK
KyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUZy
b21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKToKKwogMjAxNC0xMS0wNSAgU2hpdmFrdW1hciBK
TSAgPHNoaXZhLmptQHNhbXN1bmcuY29tPgogCiAgICAgICAgIHNwbGl0VGV4dCBBUEkgZG9lcyBu
b3QgbWF0Y2ggRE9NIHNwZWNpZmljYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAKaW5kZXggZjBlYjQ4Yi4uN2EwYTY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcApAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgIlZpc2libGVVbml0
cy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKKyNpbmNsdWRlIDxzdGRpby5oPgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEVkaXRpbmcgc3R5bGUgcHJvcGVydGllcyBtdXN0IGJl
IHByZXNlcnZlZCBkdXJpbmcgZWRpdGluZyBvcGVyYXRpb24uCkBAIC0xMjgsMTggKzEzMCwyMCBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGll
c0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqCiAgICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzRnJvbUNv
bXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVydGllc1RvSW5jbHVkZSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShjb25zdCBTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIHJldHVybiBzdHls
ZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpIDogUGFzc1JlZlB0cjxD
U1NWYWx1ZT4oKTsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBwcm9wZXJ0eUNTU1ZhbHVlID0g
c3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKSkKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5Q1NTVmFsdWU7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Q1NTVmFsdWU+KCk7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yKiBjb21wdXRlZFN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoQ29tcHV0
ZWRTdHlsZUV4dHJhY3RvciYgY29tcHV0ZWRTdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
KQogewotICAgIHJldHVybiBjb21wdXRlZFN0eWxlLT5wcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQp
OworICAgIHJldHVybiBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbnQgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHko
VCogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK2ludCBpZGVudGlmaWVyRm9yU3R5
bGVQcm9wZXJ0eShUJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBleHRyYWN0UHJvcGVydHlWYWx1ZShzdHlsZSwgcHJvcGVy
dHlJRCk7CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQpAQCAt
MTQ3LDcgKzE1MSw3IEBAIGludCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0
eWxlUHJvcGVydGllcyogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCogYmFzZVN0eWxl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50
UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKTsKIGVudW0gTGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3
YXlzVXNlTGVnYWN5Rm9udFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNN
YXRjaCB9Owogc3RhdGljIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCos
IENTU1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwg
TGVnYWN5Rm9udFNpemVNb2RlKTsKIHN0YXRpYyBib29sIGlzVHJhbnNwYXJlbnRDb2xvclZhbHVl
KENTU1ZhbHVlKik7CkBAIC0zMzMsMTIgKzMzNywxMSBAQCBFZGl0aW5nU3R5bGU6OkVkaXRpbmdT
dHlsZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIFByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVy
dAogICAgIGluaXQocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcHJvcGVydGllc1RvSW5jbHVk
ZSk7CiB9CiAKLUVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGll
cyogc3R5bGUpCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVByb3BlcnRp
ZXMmIHN0eWxlKQogICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkK
ICAgICAsIG1fZm9udFNpemVEZWx0YShOb0ZvbnREZWx0YSkKIHsKLSAgICBpZiAoc3R5bGUpCi0g
ICAgICAgIG1fbXV0YWJsZVN0eWxlID0gc3R5bGUtPm11dGFibGVDb3B5KCk7CisgICAgbV9tdXRh
YmxlU3R5bGUgPSBzdHlsZS5tdXRhYmxlQ29weSgpOwogICAgIGV4dHJhY3RGb250U2l6ZURlbHRh
KCk7CiB9CiAKQEAgLTM2OSwxMyArMzcyLDEzIEBAIHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JH
QkEoQ1NTVmFsdWUqIGNvbG9yVmFsdWUpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0
aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29sb3JGcm9tU3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5s
aW5lIFJHQkEzMiB0ZXh0Q29sb3JGcm9tU3R5bGUoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNz
c1ZhbHVlVG9SR0JBKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9y
KS5nZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEz
MiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEz
MiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1Zh
bHVlVG9SR0JBKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikuZ2V0KCkpOwogfQpAQCAtNDA4LDcgKzQxMSw3IEBAIHN0YXRpYyBpbnQgdGV4dEFs
aWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoaW50IHRleHRBbGlnbiwgaW50IGRpcmVjdGlvbikKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3Rh
cnRBbmRFbmQoVCogc3R5bGUpCitzdGF0aWMgaW50IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5k
RW5kKFQmIHN0eWxlKQogewogICAgIHJldHVybiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVu
ZChpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24p
LCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlEaXJlY3Rpb24p
KTsKIH0KQEAgLTYzOCwxNyArNjQxLDE3IEBAIHN0YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIHRl
eHRPbmx5UHJvcGVydGllc1tdID0gewogICAgIENTU1Byb3BlcnR5Q29sb3IsCiB9OwogCi1UcmlT
dGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlKSBj
b25zdAorVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoRWRpdGluZ1N0eWxl
JiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bV9tdXRhYmxlU3R5
bGUpCisgICAgaWYgKCFzdHlsZS5tX211dGFibGVTdHlsZSkKICAgICAgICAgcmV0dXJuIEZhbHNl
VHJpU3RhdGU7Ci0gICAgcmV0dXJuIHRyaVN0YXRlT2ZTdHlsZShzdHlsZS0+bV9tdXRhYmxlU3R5
bGUuZ2V0KCksIERvTm90SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4gdHJp
U3RhdGVPZlN0eWxlKCpzdHlsZS5tX211dGFibGVTdHlsZSwgRG9Ob3RJZ25vcmVUZXh0T25seVBy
b3BlcnRpZXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVHJpU3RhdGUgRWRpdGluZ1N0
eWxlOjp0cmlTdGF0ZU9mU3R5bGUoVCogc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRP
bmx5UHJvcGVydGllcyBzaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0CitUcmlT
dGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hv
dWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGll
cykgY29uc3QKIHsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZGlmZmVyZW5j
ZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVUb0NvbXBh
cmUpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBkaWZmZXJlbmNlID0gZ2V0
UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgc3R5bGVUb0NvbXBhcmUpOwogCiAgICAg
aWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9PSBJZ25vcmVUZXh0T25seVByb3Bl
cnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVByb3BlcnRpZXNJblNldCh0ZXh0T25s
eVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9ubHlQcm9wZXJ0aWVzKSk7CkBAIC02
NjcsMTQgKzY3MCwxNCBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBG
YWxzZVRyaVN0YXRlOwogCiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpCi0gICAgICAgIHJl
dHVybiB0cmlTdGF0ZU9mU3R5bGUoRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQo
c2VsZWN0aW9uKS5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoKkVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvbikpOwogCiAgICAgVHJpU3Rh
dGUgc3RhdGUgPSBGYWxzZVRyaVN0YXRlOwogICAgIGJvb2wgbm9kZUlzU3RhcnQgPSB0cnVlOwog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChu
b2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAg
ICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwotICAgICAgICAg
ICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKCZjb21wdXRlZFN0eWxlLCBu
b2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRvTm90SWdub3JlVGV4dE9ubHlQcm9w
ZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOworICAgICAg
ICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKGNvbXB1dGVkU3R5bGUs
IG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJZ25vcmVUZXh0T25seVBy
b3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7CiAgICAg
ICAgICAgICBpZiAobm9kZUlzU3RhcnQpIHsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IG5vZGVT
dGF0ZTsKICAgICAgICAgICAgICAgICBub2RlSXNTdGFydCA9IGZhbHNlOwpAQCAtODQ5LDcgKzg1
Miw4IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpzdHlsZUlzUHJlc2VudEluQ29tcHV0ZWRTdHlsZU9m
Tm9kZShOb2RlKiBub2RlKSBjb25zdAogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShu
b2RlKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgp
LCAmY29tcHV0ZWRTdHlsZSktPmlzRW1wdHkoKTsKKworICAgIHJldHVybiBnZXRQcm9wZXJ0aWVz
Tm90SW4oKm1fbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlKS0+aXNFbXB0eSgpOwogfQogCiBi
b29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQoY29u
c3QgSFRNTEVsZW1lbnQqIGVsZW1lbnQpCkBAIC05MjAsMTAgKzkyNCwxMCBAQCB2b2lkIEVkaXRp
bmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIFNob3Vs
ZFByZXNlcnZlV3JpdAogCiAgICAgcmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoKnN0eWxlQXRQ
b3NpdGlvbik7CiAKLSAgICBpZiAodGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQobV9tdXRh
YmxlU3R5bGUuZ2V0KCkpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKHN0eWxlQXRQ
b3NpdGlvbikpCisgICAgaWYgKHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKCptX211dGFi
bGVTdHlsZSkgPT0gdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoKnN0eWxlQXRQb3NpdGlv
bikpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRl
eHRBbGlnbik7CiAKLSAgICBpZiAodGV4dENvbG9yRnJvbVN0eWxlKG1fbXV0YWJsZVN0eWxlLmdl
dCgpKSA9PSB0ZXh0Q29sb3JGcm9tU3R5bGUoc3R5bGVBdFBvc2l0aW9uKSkKKyAgICBpZiAodGV4
dENvbG9yRnJvbVN0eWxlKCptX211dGFibGVTdHlsZSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKCpz
dHlsZUF0UG9zaXRpb24pKQogICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlDb2xvcik7CiAKICAgICBpZiAoaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29s
b3IobV9tdXRhYmxlU3R5bGUuZ2V0KCkpCkBAIC0xMTYwLDggKzExNjQsOSBAQCB2b2lkIEVkaXRp
bmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQsIE5vZGUqCiAKICAgICAvLyAxLiBSZW1vdmUgc3R5bGUgZnJvbSBtYXRjaGVkIHJ1bGVz
IGJlY2F1c2Ugc3R5bGUgcmVtYWluIHdpdGhvdXQgcmVwZWF0aW5nIGl0IGluIGlubGluZSBzdHls
ZSBkZWNsYXJhdGlvbgogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZy
b21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQs
IFN0eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOworICAgIAogICAgIGlmIChzdHls
ZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+aXNFbXB0eSgpKQot
ICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHls
ZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKKyAgICAgICAgbV9tdXRhYmxl
U3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCAqc3R5bGVGcm9tTWF0
Y2hlZFJ1bGVzKTsKIAogICAgIC8vIDIuIFJlbW92ZSBzdHlsZSBwcmVzZW50IGluIGNvbnRleHQg
YW5kIG5vdCBvdmVycmlkZW4gYnkgbWF0Y2hlZCBydWxlcy4KICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBjb21wdXRlZFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoY29udGV4dCwgRWRpdGlu
Z1Byb3BlcnRpZXNJbkVmZmVjdCk7CkBAIC0xMTcwLDE1ICsxMTc1LDE1IEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgTm9kZSoKICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ1NTVmFsdWVUcmFuc3BhcmVu
dCk7CiAKICAgICAgICAgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoY29tcHV0ZWRTdHlsZS0+bV9t
dXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy5nZXQoKSk7Ci0gICAgICAg
IG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgp
LCBjb21wdXRlZFN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSk7CisgICAgICAgIG1fbXV0YWJs
ZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgKmNvbXB1dGVkU3R5
bGUtPm1fbXV0YWJsZVN0eWxlKTsKICAgICB9CiAKICAgICAvLyAzLiBJZiB0aGlzIGVsZW1lbnQg
aXMgYSBzcGFuIGFuZCBoYXMgZGlzcGxheTogaW5saW5lIG9yIGZsb2F0OiBub25lLCByZW1vdmUg
dGhlbSB1bmxlc3MgdGhleSBhcmUgb3ZlcnJpZGVuIGJ5IHJ1bGVzLgogICAgIC8vIFRoZXNlIHJ1
bGVzIGFyZSBhZGRlZCBieSBzZXJpYWxpemF0aW9uIGNvZGUgdG8gd3JhcCB0ZXh0IG5vZGVzLgog
ICAgIGlmIChpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCkp
IHsKLSAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlEaXNwbGF5KSAmJiBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShtX211
dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlEaXNwbGF5KSA9PSBDU1NWYWx1ZUlubGluZSkK
KyAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlEaXNwbGF5KSAmJiBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSgqbV9tdXRh
YmxlU3R5bGUsIENTU1Byb3BlcnR5RGlzcGxheSkgPT0gQ1NTVmFsdWVJbmxpbmUpCiAgICAgICAg
ICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5KTsK
LSAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGbG9hdCkgJiYgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkobV9tdXRhYmxl
U3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5RmxvYXQpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAg
aWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGbG9hdCkgJiYgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoKm1fbXV0YWJsZVN0eWxlLCBD
U1NQcm9wZXJ0eUZsb2F0KSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICBtX211dGFibGVT
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGbG9hdCk7CiAgICAgfQogfQpAQCAtMTQw
NSwxMSArMTQxMCwxMSBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBz
dHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0
b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKIAogICAgIC8vIEZJWE1FOiB0YWtlIGNhcmUgb2YgYmFj
a2dyb3VuZC1jb2xvciBpbiBlZmZlY3QKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCAmY29t
cHV0ZWRTdHlsZSk7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVT
dHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUp
OwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5n
ZXQoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVX
aXRoQ1NTKCkpCi0gICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKGRvY3VtZW50LCBtdXRhYmxlU3R5
bGUuZ2V0KCksIGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CisgICAg
ICAgIGV4dHJhY3RUZXh0U3R5bGVzKGRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0
eWxlLnVzZUZpeGVkRm9udERlZmF1bHRTaXplKCkpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHdo
aXRlc3BhY2Ugc3R5bGUgaW4gYSB0YWIgc3BhbiB3b3VsZCBjb2xsYXBzZSB0aGUgdGFiIGludG8g
YSBzcGFjZS4KICAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKSkgfHwgaXNUYWJTcGFuTm9kZSgocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpKQpAQCAt
MTQyNCwzNCArMTQyOSwzMiBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxl
KiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIG1fY3NzU3R5bGUgPSBtdXRh
YmxlU3R5bGUtPmFzVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCi1zdGF0aWMgdm9pZCBz
ZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBj
b25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCitzdGF0aWMgdm9pZCBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KE11dGFibGVTdHls
ZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9u
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9u
LT5sZW5ndGgoKSkKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1Rl
eHREZWNvcmF0aW9uLT5jc3NUZXh0KCksIHN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3Bl
cnR5SUQpKTsKKyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgbmV3VGV4dERl
Y29yYXRpb24tPmNzc1RleHQoKSwgc3R5bGUucHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlE
KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpcyByZWR1
bmRhbnQgc2luY2UgaXQgZG9lcyBub3QgcmVtb3ZlIGFueSB0ZXh0IGRlY29yYXRpb25zLgotICAg
ICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgICAgIHN0eWxlLnJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwogICAgIH0KIH0KIAotdm9pZCBTdHlsZUNoYW5nZTo6
ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkKK3ZvaWQgU3R5
bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYgc3R5bGUsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUp
CiB7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQogICAgIGlmIChpZGVudGlmaWVyRm9yU3R5bGVQcm9w
ZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSA9PSBDU1NWYWx1ZUJvbGQpIHsKLSAg
ICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CisgICAg
ICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAgICAgICAg
IG1fYXBwbHlCb2xkID0gdHJ1ZTsKICAgICB9CiAKICAgICBpbnQgZm9udFN0eWxlID0gaWRlbnRp
ZmllckZvclN0eWxlUHJvcGVydHkoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKICAgICBp
ZiAoZm9udFN0eWxlID09IENTU1ZhbHVlSXRhbGljIHx8IGZvbnRTdHlsZSA9PSBDU1NWYWx1ZU9i
bGlxdWUpIHsKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0
eWxlKTsKKyAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUp
OwogICAgICAgICBtX2FwcGx5SXRhbGljID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBBc3N1bWlu
ZyByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMgaGFzIGJlZW4gY2FsbGVkLCB0aGVy
ZSBzaG91bGQgbm90IGJlIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICAv
LyBGdXJ0aGVybW9yZSwgdGV4dC1kZWNvcmF0aW9uOiBub25lIGhhcyBiZWVuIHRyaW1tZWQgc28g
dGhhdCB0ZXh0LWRlY29yYXRpb24gcHJvcGVydHkgaXMgYWx3YXlzIGEgQ1NTVmFsdWVMaXN0Lgot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+
IHRleHREZWNvcmF0aW9uID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uKTsKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5n
ZXQoKSkpIHsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwog
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwpAQCAtMTQ2
OSwzOSArMTQ3MiwzOSBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1
bWVudCogZG9jdW1lbnQsIE11dGFibGVTdHlsZVByb3BlcnRpZXMqCiAgICAgaW50IHZlcnRpY2Fs
QWxpZ24gPSBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlWZXJ0
aWNhbEFsaWduKTsKICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKICAgICBjYXNlIENTU1Zh
bHVlU3ViOgotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNh
bEFsaWduKTsKKyAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNh
bEFsaWduKTsKICAgICAgICAgbV9hcHBseVN1YnNjcmlwdCA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTVmFsdWVTdXBlcjoKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7CiAgICAgICAgIG1fYXBwbHlTdXBlcnNjcmlwdCA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSkgeworICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpKSB7CiAgICAgICAgIG1fYXBwbHlGb250Q29sb3Ig
PSBDb2xvcih0ZXh0Q29sb3JGcm9tU3R5bGUoc3R5bGUpKS5zZXJpYWxpemVkKCk7Ci0gICAgICAg
IHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgc3R5bGUu
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgfQogCi0gICAgbV9hcHBseUZv
bnRGYWNlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsK
KyAgICBtX2FwcGx5Rm9udEZhY2UgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5
Rm9udEZhbWlseSk7CiAgICAgLy8gUmVtb3ZlIHNpbmdsZSBxdW90ZXMgZm9yIE91dGxvb2sgMjAw
NyBjb21wYXRpYmlsaXR5LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc5NDQ4CiAgICAgbV9hcHBseUZvbnRGYWNlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcnLCAi
Iik7Ci0gICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7Cisg
ICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKIAotICAgIGlm
IChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250U2l6ZSkpIHsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250U2l6
ZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKICAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRTaXplKSkKLSAgICAgICAgICAg
IHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFr
ZSBzZW5zZSBvZiB0aGUgbnVtYmVyLiBQdXQgbm8gZm9udCBzaXplLgorICAgICAgICAgICAgc3R5
bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7IC8vIENhbid0IG1ha2Ugc2Vu
c2Ugb2YgdGhlIG51bWJlci4gUHV0IG5vIGZvbnQgc2l6ZS4KICAgICAgICAgZWxzZSBpZiAoaW50
IGxlZ2FjeUZvbnRTaXplID0gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAgICAgICAg
ICAgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlm
UGl4ZWxWYWx1ZXNNYXRjaCkpIHsKICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9IFN0cmlu
Zzo6bnVtYmVyKGxlZ2FjeUZvbnRTaXplKTsKLSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKKyAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOwogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCBkaWZmVGV4dERlY29yYXRpb25zKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQorc3Rh
dGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikK
IHsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydElEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0
aW9uID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOwogICAgIGlmICghaXM8
Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4o
cmVmVGV4dERlY29yYXRpb24pKQogICAgICAgICByZXR1cm47CiAKQEAgLTE1MTQsMTQgKzE1MTcs
MTQgQEAgc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm8KICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3Bl
cnR5KHN0eWxlLCBuZXdUZXh0RGVjb3JhdGlvbi5nZXQoKSwgcHJvcGVydElEKTsKIH0KIAotc3Rh
dGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NWYWx1ZSogZm9udFdlaWdodCkKK3N0YXRpYyBi
b29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTVmFsdWUmIGZvbnRXZWlnaHQpCiB7Ci0gICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFdlaWdodCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRp
dmVWYWx1ZT4oJmZvbnRXZWlnaHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBC
ZWNhdXNlIGIgdGFnIGNhbiBvbmx5IGJvbGQgdGV4dCwgdGhlcmUgYXJlIG9ubHkgdHdvIHN0YXRl
cyBpbiBwbGFpbiBodG1sOiBib2xkIGFuZCBub3QgYm9sZC4KICAgICAvLyBDb2xsYXBzZSBhbGwg
b3RoZXIgdmFsdWVzIHRvIGVpdGhlciBvbmUgb2YgdGhlc2UgdHdvIHN0YXRlcyBmb3IgZWRpdGlu
ZyBwdXJwb3Nlcy4KLSAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9u
dFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CisgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oZm9udFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUyMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUz
MDA6CkBAIC0xNTQ0LDQxICsxNTQ3LDQwIEBAIHN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQo
Q1NTVmFsdWUqIGZvbnRXZWlnaHQpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMg
Ym9vbCBmb250V2VpZ2h0SXNCb2xkKFQqIHN0eWxlKQorc3RhdGljIGJvb2wgZm9udFdlaWdodElz
Qm9sZChUJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gZm9udFdlaWdodElzQm9sZChleHRyYWN0UHJv
cGVydHlWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CisgICAgcmV0
dXJuIGZvbnRXZWlnaHRJc0JvbGQoKmV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9w
ZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4dHJhY3RQcm9wZXJ0aWVzTm90
SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNl
U3R5bGUpCitzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBleHRyYWN0
UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVy
dGllcywgVCYgYmFzZVN0eWxlKQogewotICAgIEFTU0VSVChzdHlsZVdpdGhSZWR1bmRhbnRQcm9w
ZXJ0aWVzKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiByZXN1bHQgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKLSAgICByZXN1bHQtPnJlbW92
ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKCpiYXNlU3R5bGUpOworICAgIHJlc3VsdC0+cmVtb3ZlRXF1
aXZhbGVudFByb3BlcnRpZXMoYmFzZVN0eWxlKTsKICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJv
cGVydGllcz4gbXV0YWJsZVN0eWxlID0gcmVzdWx0LT5zdHlsZSgpOwogCiAgICAgUmVmUHRyPENT
U1ZhbHVlPiBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QgPSBleHRyYWN0UHJvcGVydHlWYWx1
ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwot
ICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMobXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uLCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwotICAgIGRp
ZmZUZXh0RGVjb3JhdGlvbnMobXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHREZWNvcmF0aW9uc0luRWZmZWN0LCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkp
OworICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMoKm11dGFibGVTdHlsZSwgQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbiwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKKyAgICBkaWZm
VGV4dERlY29yYXRpb25zKCptdXRhYmxlU3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CiAKLSAg
ICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWln
aHQpICYmIGZvbnRXZWlnaHRJc0JvbGQobXV0YWJsZVN0eWxlLmdldCgpKSA9PSBmb250V2VpZ2h0
SXNCb2xkKGJhc2VTdHlsZSkpCisgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHls
ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSAmJiBmb250V2VpZ2h0SXNCb2xkKCptdXRhYmxlU3R5
bGUpID09IGZvbnRXZWlnaHRJc0JvbGQoYmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogCi0gICAgaWYgKGV4dHJh
Y3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlDb2xvcikgJiYgdGV4dENvbG9y
RnJvbVN0eWxlKG11dGFibGVTdHlsZS5nZXQoKSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKGJhc2VT
dHlsZSkpCisgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVy
dHlDb2xvcikgJiYgdGV4dENvbG9yRnJvbVN0eWxlKCptdXRhYmxlU3R5bGUpID09IHRleHRDb2xv
ckZyb21TdHlsZShiYXNlU3R5bGUpKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5Q29sb3IpOwogCiAgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJh
c2VTdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pCi0gICAgICAgICYmIHRleHRBbGlnblJlc29s
dmluZ1N0YXJ0QW5kRW5kKG11dGFibGVTdHlsZS5nZXQoKSkgPT0gdGV4dEFsaWduUmVzb2x2aW5n
U3RhcnRBbmRFbmQoYmFzZVN0eWxlKSkKKyAgICAgICAgJiYgdGV4dEFsaWduUmVzb2x2aW5nU3Rh
cnRBbmRFbmQoKm11dGFibGVTdHlsZSkgPT0gdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQo
YmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRleHRBbGlnbik7CiAKLSAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxl
LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgJiYgYmFja2dyb3VuZENvbG9yRnJvbVN0eWxl
KG11dGFibGVTdHlsZS5nZXQoKSkgPT0gYmFja2dyb3VuZENvbG9yRnJvbVN0eWxlKGJhc2VTdHls
ZSkpCisgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpICYmIGJhY2tncm91bmRDb2xvckZyb21TdHlsZSgqbXV0YWJsZVN0eWxl
KSA9PSBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJs
ZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAKICAg
ICByZXR1cm4gbXV0YWJsZVN0eWxlLnJlbGVhc2UoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLVBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdElu
KFN0eWxlUHJvcGVydGllcyogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCogYmFzZVN0
eWxlKQorUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90
SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNl
U3R5bGUpCiB7CiAgICAgcmV0dXJuIGV4dHJhY3RQcm9wZXJ0aWVzTm90SW4oc3R5bGVXaXRoUmVk
dW5kYW50UHJvcGVydGllcywgYmFzZVN0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5oCmluZGV4IDVlMTc2MjIuLmI3YjYzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuaApAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKHBvc2l0aW9uLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5n
U3R5bGU+IGNyZWF0ZShjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5bGUoc3R5bGUpKTsKICAgICB9CkBAIC0x
MTIsNyArMTEyLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgcmVt
b3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgVCYpOwogICAgIHZvaWQgY29sbGFwc2VUZXh0
RGVjb3JhdGlvblByb3BlcnRpZXMoKTsKICAgICBlbnVtIFNob3VsZElnbm9yZVRleHRPbmx5UHJv
cGVydGllcyB7IElnbm9yZVRleHRPbmx5UHJvcGVydGllcywgRG9Ob3RJZ25vcmVUZXh0T25seVBy
b3BlcnRpZXMgfTsKLSAgICBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoRWRpdGluZ1N0eWxlKikg
Y29uc3Q7CisgICAgVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZSYpIGNvbnN0
OwogICAgIFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikg
Y29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVk
RWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gY29uZmxpY3RzV2l0aElubGluZVN0eWxl
T2ZFbGVtZW50KGVsZW1lbnQsIDAsIDApOyB9CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBleHRy
YWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3BlcnR5SUQ+JiBjb25mbGljdGluZ1Byb3BlcnRpZXMp
IGNvbnN0CkBAIC0xNTEsMTMgKzE1MSwxMyBAQCBwcml2YXRlOgogICAgIEVkaXRpbmdTdHlsZSgp
OwogICAgIEVkaXRpbmdTdHlsZShOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgRWRp
dGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0gICAgZXhw
bGljaXQgRWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyopOworICAgIGV4cGxpY2l0
IEVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMmKTsKICAgICBFZGl0aW5nU3R5bGUo
Q1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCBpbml0KE5vZGUq
LCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lkIHJlbW92ZVRleHRGaWxsQW5kU3Ryb2tl
Q29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHNldFByb3BlcnR5KENTU1By
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwog
ICAgIHZvaWQgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCogc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9y
ZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJp
U3RhdGUgdHJpU3RhdGVPZlN0eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0
T25seVByb3BlcnRpZXMpIGNvbnN0OwogICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxl
T2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlLCBW
ZWN0b3I8Q1NTUHJvcGVydHlJRD4qIGNvbmZsaWN0aW5nUHJvcGVydGllcykgY29uc3Q7CiAgICAg
dm9pZCBtZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCos
IENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lk
IG1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlPdmVycmlkZU1v
ZGUpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOwogICAgIH0KIHByaXZhdGU6Ci0gICAgdm9pZCBleHRyYWN0VGV4dFN0eWxlcyhE
b2N1bWVudCosIE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBib29sIHNob3VsZFVzZUZpeGVkRm9u
dERlZmF1bHRTaXplKTsKKyAgICB2b2lkIGV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiwgTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUp
OwogCiAgICAgU3RyaW5nIG1fY3NzU3R5bGU7CiAgICAgYm9vbCBtX2FwcGx5Qm9sZDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAwZGFiOTZlLi4xODAyMDUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCkBAIC04OTUsNyArODk1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5
bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgog
ICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZSkuZ2V0
KCksIGVkaXRpbmdBY3Rpb24pKTsKKyAgICAgICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxl
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCpzdHlsZSku
Z2V0KCksIGVkaXRpbmdBY3Rpb24pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtOTE0
LDcgKzkxNCw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvCiAgICAgY2FzZSBWaXNpYmxlU2Vs
ZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdl
U2VsZWN0aW9uOgogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmQo
QXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBFZGl0aW5nU3R5bGU6OmNyZWF0
ZShzdHlsZSkuZ2V0KCksIGVkaXRpbmdBY3Rpb24sIEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJs
b2NrUHJvcGVydGllcykpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21t
YW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgRWRpdGluZ1N0eWxlOjpjcmVhdGUoKnN0eWxlKS5nZXQo
KSwgZWRpdGluZ0FjdGlvbiwgQXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVz
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTkzOSw4ICs5MzksOCBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5
bGUsIEVkaXRBY3Rpb24gZQogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHZhbHVlKS0+dHJpU3Rh
dGVPZlN0eWxlKAotICAgICAgICBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydCht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKS5nZXQoKSk7CisgICAgcmV0dXJuIEVkaXRpbmdTdHlsZTo6Y3JlYXRl
KHByb3BlcnR5SUQsIHZhbHVlKS0+dHJpU3RhdGVPZlN0eWxlKCoKKyAgICAgICAgRWRpdGluZ1N0
eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpOwogfQogCiBUcmlT
dGF0ZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKQEAgLTI5NjUsNyArMjk2NSw3IEBAIHZvaWQgRWRp
dG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRp
dEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHR5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50eXBpbmdTdHlsZSgpLT5jb3B5KCk7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVdp
dGhTdHlsZShzdHlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHR5cGluZ1N0eWxlID0gRWRpdGlu
Z1N0eWxlOjpjcmVhdGUoc3R5bGUpOworICAgICAgICB0eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHls
ZTo6Y3JlYXRlKCpzdHlsZSk7CiAKICAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdCht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFs
ZW50KCksIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVXcml0aW5nRGlyZWN0aW9uKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA0NTgzNjNiLi5lN2ZhZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNDg2LDcgKzQ4Niw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5J
bmxpbmUoSW5zZXJ0CiAgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxT
dHlsZWRFbGVtZW50Pihub2RlLmdldCgpKTsKIAogICAgICAgICBjb25zdCBTdHlsZVByb3BlcnRp
ZXMqIGlubGluZVN0eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKLSAgICAgICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShpbmxp
bmVTdHlsZSk7CisgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5ld0lubGluZVN0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUoKmlubGluZVN0eWxlKTsKICAgICAgICAgaWYgKGlubGluZVN0
eWxlKSB7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAg
ICAgICAgICAgICAgIFZlY3RvcjxRdWFsaWZpZWROYW1lPiBhdHRyaWJ1dGVzOwpAQCAtNzg4LDcg
Kzc4OCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMo
SW5zZXJ0ZWROb2RlcyYgaW5zZXJ0ZWROb2RlcykKICAgICBpZiAoIXdyYXBwaW5nU3R5bGVTcGFu
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHdyYXBwaW5nU3R5bGVTcGFuLT5pbmxpbmVTdHlsZSgpKTsKKyAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCp3cmFw
cGluZ1N0eWxlU3Bhbi0+aW5saW5lU3R5bGUoKSk7CiAgICAgQ29udGFpbmVyTm9kZSogY29udGV4
dCA9IHdyYXBwaW5nU3R5bGVTcGFuLT5wYXJlbnROb2RlKCk7CiAKICAgICAvLyBJZiBNYWlsIHdy
YXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJsb2NrcXVvdGUsIG9y
IGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCmluZGV4IDk2MjNjMjguLjRlZmNlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+
IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woY29uc3QgTm9kZSogbgogICAgIC8v
IEZJWE1FOiBIYXZpbmcgdG8gY29uc3RfY2FzdCBoZXJlIGlzIHVnbHksIGJ1dCBpdCBpcyBxdWl0
ZSBhIGJpdCBvZiB3b3JrIHRvIHVudGFuZ2xlCiAgICAgLy8gdGhlIG5vbi1jb25zdC1uZXNzIG9m
IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQuCiAgICAgSFRNTEVsZW1lbnQqIGVsZW1l
bnQgPSBjb25zdF9jYXN0PEhUTUxFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1l
bnQqPihub2RlKSk7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5
bGU6OmNyZWF0ZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCplbGVtZW50LT5pbmxpbmVTdHlsZSgp
KTsKICAgICBzdHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlcyhlbGVtZW50KTsKICAgICByZXR1cm4g
c3R5bGUucmVsZWFzZSgpOwogfQo=
</data>
<flag name="review"
          id="265926"
          type_id="1"
          status="-"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="265927"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241349</attachid>
            <date>2014-11-11 04:06:22 -0800</date>
            <delta_ts>2014-11-11 04:09:28 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch_v14.patch</filename>
            <type>text/plain</type>
            <size>19853</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBmMGViNDhiLi40MzZi
ZmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xMjgsMTgg
KzEyOCwyMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5
UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqCiAgICAgcmV0dXJuIGNvcHlQcm9wZXJ0
aWVzRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVydGllc1RvSW5jbHVkZSk7
CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShj
b25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoY29uc3QgU3R5
bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAgIHJl
dHVybiBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpIDogUGFz
c1JlZlB0cjxDU1NWYWx1ZT4oKTsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBwcm9wZXJ0eUNT
U1ZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKSkKKyAgICAgICAg
cmV0dXJuIHByb3BlcnR5Q1NTVmFsdWUucmVsZWFzZSgpOworICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvciogY29tcHV0ZWRTdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQor
c3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKENvbXB1dGVk
U3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkK
IHsKLSAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS0+cHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsK
KyAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQq
IHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitpbnQgaWRlbnRpZmllckZvclN0eWxl
UHJvcGVydHkoVCYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIHByb3BlcnR5
SUQpOwogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKQEAgLTE0
Nyw3ICsxNDksNyBAQCBpbnQgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoVCogc3R5bGUsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQ
YXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHls
ZVByb3BlcnRpZXMqIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJhc2VTdHlsZSk7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMmIHN0eWxlV2l0aFJlZHVuZGFudFBy
b3BlcnRpZXMsIFQmIGJhc2VTdHlsZSk7CiBlbnVtIExlZ2FjeUZvbnRTaXplTW9kZSB7IEFsd2F5
c1VzZUxlZ2FjeUZvbnRTaXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVsVmFsdWVzTWF0
Y2ggfTsKIHN0YXRpYyBpbnQgbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoRG9jdW1lbnQqLCBD
U1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIExl
Z2FjeUZvbnRTaXplTW9kZSk7CiBzdGF0aWMgYm9vbCBpc1RyYW5zcGFyZW50Q29sb3JWYWx1ZShD
U1NWYWx1ZSopOwpAQCAtMzY5LDEzICszNzEsMTMgQEAgc3RhdGljIFJHQkEzMiBjc3NWYWx1ZVRv
UkdCQShDU1NWYWx1ZSogY29sb3JWYWx1ZSkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
YXRpYyBpbmxpbmUgUkdCQTMyIHRleHRDb2xvckZyb21TdHlsZShUKiBzdHlsZSkKK3N0YXRpYyBp
bmxpbmUgUkdCQTMyIHRleHRDb2xvckZyb21TdHlsZShUJiBzdHlsZSkKIHsKICAgICByZXR1cm4g
Y3NzVmFsdWVUb1JHQkEoZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Q29s
b3IpLmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgUkdC
QTMyIGJhY2tncm91bmRDb2xvckZyb21TdHlsZShUKiBzdHlsZSkKK3N0YXRpYyBpbmxpbmUgUkdC
QTMyIGJhY2tncm91bmRDb2xvckZyb21TdHlsZShUJiBzdHlsZSkKIHsKICAgICByZXR1cm4gY3Nz
VmFsdWVUb1JHQkEoZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKS5nZXQoKSk7CiB9CkBAIC00MDgsNyArNDEwLDcgQEAgc3RhdGljIGludCB0ZXh0
QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChpbnQgdGV4dEFsaWduLCBpbnQgZGlyZWN0aW9uKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIGludCB0ZXh0QWxpZ25SZXNvbHZpbmdT
dGFydEFuZEVuZChUKiBzdHlsZSkKK3N0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRB
bmRFbmQoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5k
RW5kKGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eVRleHRBbGln
biksIGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eURpcmVjdGlv
bikpOwogfQpAQCAtNjQyLDEzICs2NDQsMTMgQEAgVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlT
dGF0ZU9mU3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+bV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRl
OwotICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgp
LCBEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7CisgICAgcmV0dXJuIHRyaVN0YXRlT2ZT
dHlsZSgqc3R5bGUtPm1fbXV0YWJsZVN0eWxlLCBEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGll
cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRy
aVN0YXRlT2ZTdHlsZShUKiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9w
ZXJ0aWVzIHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QKK1RyaVN0YXRlIEVk
aXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25v
cmVUZXh0T25seVByb3BlcnRpZXMgc2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25z
dAogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBkaWZmZXJlbmNlID0gZ2V0
UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBzdHlsZVRvQ29tcGFyZSk7Cisg
ICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGRpZmZlcmVuY2UgPSBnZXRQcm9wZXJ0
aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCBzdHlsZVRvQ29tcGFyZSk7CiAKICAgICBpZiAoc2hv
dWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzID09IElnbm9yZVRleHRPbmx5UHJvcGVydGllcykK
ICAgICAgICAgZGlmZmVyZW5jZS0+cmVtb3ZlUHJvcGVydGllc0luU2V0KHRleHRPbmx5UHJvcGVy
dGllcywgV1RGX0FSUkFZX0xFTkdUSCh0ZXh0T25seVByb3BlcnRpZXMpKTsKQEAgLTY3NCw3ICs2
NzYsNyBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiAgICAgZm9yIChOb2RlKiBub2RlID0gc2Vs
ZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+
aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9y
IGNvbXB1dGVkU3R5bGUobm9kZSk7Ci0gICAgICAgICAgICBUcmlTdGF0ZSBub2RlU3RhdGUgPSB0
cmlTdGF0ZU9mU3R5bGUoJmNvbXB1dGVkU3R5bGUsIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRp
bmdTdHlsZTo6RG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Okln
bm9yZVRleHRPbmx5UHJvcGVydGllcyk7CisgICAgICAgICAgICBUcmlTdGF0ZSBub2RlU3RhdGUg
PSB0cmlTdGF0ZU9mU3R5bGUoY29tcHV0ZWRTdHlsZSwgbm9kZS0+aXNUZXh0Tm9kZSgpID8gRWRp
dGluZ1N0eWxlOjpEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA6IEVkaXRpbmdTdHlsZTo6
SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIGlmIChub2RlSXNTdGFydCkg
ewogICAgICAgICAgICAgICAgIHN0YXRlID0gbm9kZVN0YXRlOwogICAgICAgICAgICAgICAgIG5v
ZGVJc1N0YXJ0ID0gZmFsc2U7CkBAIC04NDksNyArODUxLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6
OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAg
ICAgaWYgKCFtX211dGFibGVTdHlsZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgQ29tcHV0
ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwotICAgIHJldHVybiBnZXRQcm9w
ZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksICZjb21wdXRlZFN0eWxlKS0+aXNFbXB0
eSgpOworICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCBjb21w
dXRlZFN0eWxlKS0+aXNFbXB0eSgpOwogfQogCiBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElz
U3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQoY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1lbnQpCkBA
IC05MjAsMTAgKzkyMiwxMCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdChj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIFNob3VsZFByZXNlcnZlV3JpdAogCiAgICAgcmVtb3Zl
RXF1aXZhbGVudFByb3BlcnRpZXMoKnN0eWxlQXRQb3NpdGlvbik7CiAKLSAgICBpZiAodGV4dEFs
aWduUmVzb2x2aW5nU3RhcnRBbmRFbmQobV9tdXRhYmxlU3R5bGUuZ2V0KCkpID09IHRleHRBbGln
blJlc29sdmluZ1N0YXJ0QW5kRW5kKHN0eWxlQXRQb3NpdGlvbikpCisgICAgaWYgKHRleHRBbGln
blJlc29sdmluZ1N0YXJ0QW5kRW5kKCptX211dGFibGVTdHlsZSkgPT0gdGV4dEFsaWduUmVzb2x2
aW5nU3RhcnRBbmRFbmQoKnN0eWxlQXRQb3NpdGlvbikpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbik7CiAKLSAgICBpZiAodGV4dENv
bG9yRnJvbVN0eWxlKG1fbXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0Q29sb3JGcm9tU3R5bGUo
c3R5bGVBdFBvc2l0aW9uKSkKKyAgICBpZiAodGV4dENvbG9yRnJvbVN0eWxlKCptX211dGFibGVT
dHlsZSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKCpzdHlsZUF0UG9zaXRpb24pKQogICAgICAgICBt
X211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAKICAgICBp
ZiAoaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3IobV9tdXRhYmxlU3R5bGUuZ2V0KCkpCkBA
IC0xMTYwLDggKzExNjIsOSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVs
ZXNBbmRDb250ZXh0KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIE5vZGUqCiAKICAgICAvLyAxLiBS
ZW1vdmUgc3R5bGUgZnJvbSBtYXRjaGVkIHJ1bGVzIGJlY2F1c2Ugc3R5bGUgcmVtYWluIHdpdGhv
dXQgcmVwZWF0aW5nIGl0IGluIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbgogICAgIFJlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21N
YXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIFN0eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5
Q1NTUnVsZXMpOworICAgIAogICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxl
RnJvbU1hdGNoZWRSdWxlcy0+aXNFbXB0eSgpKQotICAgICAgICBtX211dGFibGVTdHlsZSA9IGdl
dFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1
bGVzLmdldCgpKTsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4o
Km1fbXV0YWJsZVN0eWxlLCAqc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzKTsKIAogICAgIC8vIDIuIFJl
bW92ZSBzdHlsZSBwcmVzZW50IGluIGNvbnRleHQgYW5kIG5vdCBvdmVycmlkZW4gYnkgbWF0Y2hl
ZCBydWxlcy4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb21wdXRlZFN0eWxlID0gRWRpdGlu
Z1N0eWxlOjpjcmVhdGUoY29udGV4dCwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CkBAIC0x
MTcwLDE1ICsxMTczLDE1IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxl
c0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgTm9kZSoKICAgICAgICAgICAgIGNv
bXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwgQ1NTVmFsdWVUcmFuc3BhcmVudCk7CiAKICAgICAgICAgcmVtb3ZlUHJvcGVy
dGllc0luU3R5bGUoY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJv
bU1hdGNoZWRSdWxlcy5nZXQoKSk7Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVy
dGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlLT5tX211dGFibGVT
dHlsZS5nZXQoKSk7CisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdElu
KCptX211dGFibGVTdHlsZSwgKmNvbXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlKTsKICAgICB9
CiAKICAgICAvLyAzLiBJZiB0aGlzIGVsZW1lbnQgaXMgYSBzcGFuIGFuZCBoYXMgZGlzcGxheTog
aW5saW5lIG9yIGZsb2F0OiBub25lLCByZW1vdmUgdGhlbSB1bmxlc3MgdGhleSBhcmUgb3ZlcnJp
ZGVuIGJ5IHJ1bGVzLgogICAgIC8vIFRoZXNlIHJ1bGVzIGFyZSBhZGRlZCBieSBzZXJpYWxpemF0
aW9uIGNvZGUgdG8gd3JhcCB0ZXh0IG5vZGVzLgogICAgIGlmIChpc1N0eWxlU3Bhbk9yU3Bhbldp
dGhPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCkpIHsKLSAgICAgICAgaWYgKCFzdHlsZUZyb21N
YXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSAmJiBp
ZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShtX211dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVy
dHlEaXNwbGF5KSA9PSBDU1NWYWx1ZUlubGluZSkKKyAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRj
aGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXNwbGF5KSAmJiBpZGVu
dGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSgqbV9tdXRhYmxlU3R5bGUsIENTU1Byb3BlcnR5RGlzcGxh
eSkgPT0gQ1NTVmFsdWVJbmxpbmUpCiAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5KTsKLSAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRj
aGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGbG9hdCkgJiYgaWRlbnRp
ZmllckZvclN0eWxlUHJvcGVydHkobV9tdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5Rmxv
YXQpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgaWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGbG9hdCkgJiYgaWRlbnRpZmllckZvclN0
eWxlUHJvcGVydHkoKm1fbXV0YWJsZVN0eWxlLCBDU1NQcm9wZXJ0eUZsb2F0KSA9PSBDU1NWYWx1
ZU5vbmUpCiAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJv
cGVydHlGbG9hdCk7CiAgICAgfQogfQpAQCAtMTQwNSwxMSArMTQwOCwxMSBAQCBTdHlsZUNoYW5n
ZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uKQogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKIAog
ICAgIC8vIEZJWE1FOiB0YWtlIGNhcmUgb2YgYmFja2dyb3VuZC1jb2xvciBpbiBlZmZlY3QKLSAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVy
dGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCAmY29tcHV0ZWRTdHlsZSk7CisgICAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbigq
c3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29y
YXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCkpCi0gICAgICAgIGV4dHJhY3RU
ZXh0U3R5bGVzKGRvY3VtZW50LCBtdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1dGVkU3R5bGUudXNl
Rml4ZWRGb250RGVmYXVsdFNpemUoKSk7CisgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKGRvY3Vt
ZW50LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlLnVzZUZpeGVkRm9udERlZmF1bHRTaXpl
KCkpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHdoaXRlc3BhY2Ugc3R5bGUgaW4gYSB0YWIgc3Bh
biB3b3VsZCBjb2xsYXBzZSB0aGUgdGFiIGludG8gYSBzcGFjZS4KICAgICBpZiAoaXNUYWJTcGFu
VGV4dE5vZGUocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgfHwgaXNUYWJTcGFuTm9kZSgocG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpKQpAQCAtMTQyNCwzNCArMTQyNywzMiBAQCBTdHlsZUNo
YW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogICAgIG1fY3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmFzVGV4dCgpLnN0cmlwV2hp
dGVTcGFjZSgpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KE11
dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHRE
ZWNvcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgdm9pZCBzZXRUZXh0
RGVjb3JhdGlvblByb3BlcnR5KE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBjb25zdCBD
U1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CiB7CiAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5sZW5ndGgoKSkKLSAgICAgICAgc3R5bGUt
PnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1RleHREZWNvcmF0aW9uLT5jc3NUZXh0KCksIHN0
eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5SUQpKTsKKyAgICAgICAgc3R5bGUuc2V0
UHJvcGVydHkocHJvcGVydHlJRCwgbmV3VGV4dERlY29yYXRpb24tPmNzc1RleHQoKSwgc3R5bGUu
cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IHRleHQtZGVjb3JhdGlvbjogbm9uZSBpcyByZWR1bmRhbnQgc2luY2UgaXQgZG9lcyBub3QgcmVt
b3ZlIGFueSB0ZXh0IGRlY29yYXRpb25zLgotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCk7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwog
ICAgIH0KIH0KIAotdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgYm9vbCBzaG91bGRVc2VG
aXhlZEZvbnREZWZhdWx0U2l6ZSkKK3ZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVz
KERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUsIGJvb2wg
c2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpCiB7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQog
ICAgIGlmIChpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlGb250
V2VpZ2h0KSA9PSBDU1NWYWx1ZUJvbGQpIHsKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCk7CiAgICAgICAgIG1fYXBwbHlCb2xkID0gdHJ1ZTsKICAgICB9
CiAKICAgICBpbnQgZm9udFN0eWxlID0gaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoc3R5bGUs
IENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKICAgICBpZiAoZm9udFN0eWxlID09IENTU1ZhbHVlSXRh
bGljIHx8IGZvbnRTdHlsZSA9PSBDU1NWYWx1ZU9ibGlxdWUpIHsKLSAgICAgICAgc3R5bGUtPnJl
bW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKKyAgICAgICAgc3R5bGUucmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUpOwogICAgICAgICBtX2FwcGx5SXRhbGljID0g
dHJ1ZTsKICAgICB9CiAKICAgICAvLyBBc3N1bWluZyByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblBy
b3BlcnRpZXMgaGFzIGJlZW4gY2FsbGVkLCB0aGVyZSBzaG91bGQgbm90IGJlIC13ZWJraXQtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICAvLyBGdXJ0aGVybW9yZSwgdGV4dC1kZWNvcmF0
aW9uOiBub25lIGhhcyBiZWVuIHRyaW1tZWQgc28gdGhhdCB0ZXh0LWRlY29yYXRpb24gcHJvcGVy
dHkgaXMgYWx3YXlzIGEgQ1NTVmFsdWVMaXN0LgotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERl
Y29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUuZ2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKICAgICBpZiAoaXM8
Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkpIHsKICAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTGluZVRocm91Z2gpOwpAQCAtMTQ2OSwzOSArMTQ3MCwzOSBAQCB2b2lkIFN0eWxl
Q2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9jdW1lbnQsIE11dGFibGVTdHls
ZVByb3BlcnRpZXMqCiAgICAgaW50IHZlcnRpY2FsQWxpZ24gPSBpZGVudGlmaWVyRm9yU3R5bGVQ
cm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKICAgICBzd2l0Y2ggKHZl
cnRpY2FsQWxpZ24pIHsKICAgICBjYXNlIENTU1ZhbHVlU3ViOgotICAgICAgICBzdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKKyAgICAgICAgc3R5bGUucmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKICAgICAgICAgbV9hcHBseVN1
YnNjcmlwdCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVTdXBlcjoK
LSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7
CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7
CiAgICAgICAgIG1fYXBwbHlTdXBlcnNjcmlwdCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9y
KSkgeworICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3Ip
KSB7CiAgICAgICAgIG1fYXBwbHlGb250Q29sb3IgPSBDb2xvcih0ZXh0Q29sb3JGcm9tU3R5bGUo
c3R5bGUpKS5zZXJpYWxpemVkKCk7Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlD
b2xvcik7CiAgICAgfQogCi0gICAgbV9hcHBseUZvbnRGYWNlID0gc3R5bGUtPmdldFByb3BlcnR5
VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKKyAgICBtX2FwcGx5Rm9udEZhY2UgPSBzdHls
ZS5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgLy8gUmVtb3Zl
IHNpbmdsZSBxdW90ZXMgZm9yIE91dGxvb2sgMjAwNyBjb21wYXRpYmlsaXR5LiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NDQ4CiAgICAgbV9hcHBseUZvbnRG
YWNlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcnLCAiIik7Ci0gICAgc3R5bGUtPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CisgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlGb250RmFtaWx5KTsKIAotICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTaXpl
ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKKyAg
ICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250U2l6ZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKmZvbnRTaXplKSkKLSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFrZSBzZW5zZSBvZiB0aGUgbnVtYmVyLiBQdXQg
bm8gZm9udCBzaXplLgorICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250U2l6ZSk7IC8vIENhbid0IG1ha2Ugc2Vuc2Ugb2YgdGhlIG51bWJlci4gUHV0IG5vIGZv
bnQgc2l6ZS4KICAgICAgICAgZWxzZSBpZiAoaW50IGxlZ2FjeUZvbnRTaXplID0gbGVnYWN5Rm9u
dFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihm
b250U2l6ZS5nZXQoKSksCiAgICAgICAgICAgICAgICAgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVs
dFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCkpIHsKICAgICAg
ICAgICAgIG1fYXBwbHlGb250U2l6ZSA9IFN0cmluZzo6bnVtYmVyKGxlZ2FjeUZvbnRTaXplKTsK
LSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsK
KyAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKE11
dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnRJRCwgQ1NT
VmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9u
cyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQs
IENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKIHsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRl
eHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0SUQpOwogICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlv
bi5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4ocmVmVGV4dERlY29yYXRpb24pKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTE1MTQsMTQgKzE1MTUsMTQgQEAgc3RhdGljIHZvaWQgZGlmZlRleHRE
ZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm8KICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxlLCBuZXdUZXh0RGVjb3JhdGlv
bi5nZXQoKSwgcHJvcGVydElEKTsKIH0KIAotc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChD
U1NWYWx1ZSogZm9udFdlaWdodCkKK3N0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTVmFs
dWUmIGZvbnRXZWlnaHQpCiB7Ci0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFdl
aWdodCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oJmZvbnRXZWlnaHQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBCZWNhdXNlIGIgdGFnIGNhbiBvbmx5IGJvbGQg
dGV4dCwgdGhlcmUgYXJlIG9ubHkgdHdvIHN0YXRlcyBpbiBwbGFpbiBodG1sOiBib2xkIGFuZCBu
b3QgYm9sZC4KICAgICAvLyBDb2xsYXBzZSBhbGwgb3RoZXIgdmFsdWVzIHRvIGVpdGhlciBvbmUg
b2YgdGhlc2UgdHdvIHN0YXRlcyBmb3IgZWRpdGluZyBwdXJwb3Nlcy4KLSAgICBzd2l0Y2ggKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7Cisg
ICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFdlaWdodCkuZ2V0VmFs
dWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWUyMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUzMDA6CkBAIC0xNTQ0LDQxICsxNTQ1LDQwIEBA
IHN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTVmFsdWUqIGZvbnRXZWlnaHQpCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKFQqIHN0
eWxlKQorc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChUJiBzdHlsZSkKIHsKLSAgICByZXR1
cm4gZm9udFdlaWdodElzQm9sZChleHRyYWN0UHJvcGVydHlWYWx1ZShzdHlsZSwgQ1NTUHJvcGVy
dHlGb250V2VpZ2h0KS5nZXQoKSk7CisgICAgcmV0dXJuIGZvbnRXZWlnaHRJc0JvbGQoKmV4dHJh
Y3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IGV4dHJhY3RQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdp
dGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpCitzdGF0aWMgUGFzc1JlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBleHRyYWN0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVy
dGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKQogewotICAg
IEFTU0VSVChzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKLSAgICBSZWZQdHI8RWRpdGlu
Z1N0eWxlPiByZXN1bHQgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzKTsKLSAgICByZXN1bHQtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKCpiYXNl
U3R5bGUpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHJlc3VsdCA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKCZzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKKyAgICByZXN1bHQtPnJlbW92
ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGJhc2VTdHlsZSk7CiAgICAgUmVmUHRyPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IHJlc3VsdC0+c3R5bGUoKTsKIAogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0ID0gZXh0cmFjdFByb3BlcnR5
VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0
KTsKLSAgICBkaWZmVGV4dERlY29yYXRpb25zKG11dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbiwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKLSAg
ICBkaWZmVGV4dERlY29yYXRpb25zKG11dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0Lmdl
dCgpKTsKKyAgICBkaWZmVGV4dERlY29yYXRpb25zKCptdXRhYmxlU3R5bGUsIENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CisgICAg
ZGlmZlRleHREZWNvcmF0aW9ucygqbXV0YWJsZVN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0LCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwog
Ci0gICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlGb250
V2VpZ2h0KSAmJiBmb250V2VpZ2h0SXNCb2xkKG11dGFibGVTdHlsZS5nZXQoKSkgPT0gZm9udFdl
aWdodElzQm9sZChiYXNlU3R5bGUpKQorICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNl
U3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkgJiYgZm9udFdlaWdodElzQm9sZCgqbXV0YWJs
ZVN0eWxlKSA9PSBmb250V2VpZ2h0SXNCb2xkKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVT
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKIAotICAgIGlmIChl
eHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Q29sb3IpICYmIHRleHRD
b2xvckZyb21TdHlsZShtdXRhYmxlU3R5bGUuZ2V0KCkpID09IHRleHRDb2xvckZyb21TdHlsZShi
YXNlU3R5bGUpKQorICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1By
b3BlcnR5Q29sb3IpICYmIHRleHRDb2xvckZyb21TdHlsZSgqbXV0YWJsZVN0eWxlKSA9PSB0ZXh0
Q29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIAogICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1
ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5VGV4dEFsaWduKQotICAgICAgICAmJiB0ZXh0QWxpZ25S
ZXNvbHZpbmdTdGFydEFuZEVuZChtdXRhYmxlU3R5bGUuZ2V0KCkpID09IHRleHRBbGlnblJlc29s
dmluZ1N0YXJ0QW5kRW5kKGJhc2VTdHlsZSkpCisgICAgICAgICYmIHRleHRBbGlnblJlc29sdmlu
Z1N0YXJ0QW5kRW5kKCptdXRhYmxlU3R5bGUpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5k
RW5kKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlUZXh0QWxpZ24pOwogCi0gICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VT
dHlsZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICYmIGJhY2tncm91bmRDb2xvckZyb21T
dHlsZShtdXRhYmxlU3R5bGUuZ2V0KCkpID09IGJhY2tncm91bmRDb2xvckZyb21TdHlsZShiYXNl
U3R5bGUpKQorICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKSAmJiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoKm11dGFibGVT
dHlsZSkgPT0gYmFja2dyb3VuZENvbG9yRnJvbVN0eWxlKGJhc2VTdHlsZSkpCiAgICAgICAgIG11
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwog
CiAgICAgcmV0dXJuIG11dGFibGVTdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1QYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNO
b3RJbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJh
c2VTdHlsZSkKK1Bhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGll
c05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCYg
YmFzZVN0eWxlKQogewogICAgIHJldHVybiBleHRyYWN0UHJvcGVydGllc05vdEluKHN0eWxlV2l0
aFJlZHVuZGFudFByb3BlcnRpZXMsIGJhc2VTdHlsZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuaAppbmRleCA1ZTE3NjIyLi44ZWU3NTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOwogICAg
IHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9v
bCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShUKiBzdHls
ZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCYgc3R5bGVUb0Nv
bXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CiAgICAgYm9vbCBj
b25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdT
dHlsZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQ
cm9wZXJ0aWVzKSBjb25zdDsKICAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9m
RWxlbWVudChTdHlsZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRp
ZXNUb0luY2x1ZGUpOwogICAgIHZvaWQgbWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMq
LCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSk7CkBAIC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogcHJpdmF0ZToKLSAgICB2
b2lkIGV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyos
IGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpOworICAgIHZvaWQgZXh0cmFjdFRl
eHRTdHlsZXMoRG9jdW1lbnQqLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgYm9vbCBzaG91bGRV
c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7CiAKICAgICBTdHJpbmcgbV9jc3NTdHlsZTsKICAgICBi
b29sIG1fYXBwbHlCb2xkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241350</attachid>
            <date>2014-11-11 04:09:28 -0800</date>
            <delta_ts>2014-11-13 07:38:44 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch_v14.patch</filename>
            <type>text/plain</type>
            <size>21210</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzExMWRkLi40N2RhYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTQtMTEtMTEgIFRpYm9yIE1lc3phcm9zICA8dG1lc3phcm9zLnUtc3plZ2VkQHBhcnRu
ZXIuc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2lu
dGVycyBpbiBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzkxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9yRnJvbVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmJhY2tncm91bmRDb2xvckZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UHJvcGVydGllc05vdEluKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorCiAy
MDE0LTExLTA5ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgW0VGTF0gUmVtb3ZlIEdhbWVwYWREZXZpY2VFZmw6OmNyZWF0ZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggZjBlYjQ4Yi4uNDM2YmZkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTI4LDE4ICsxMjgsMjAgQEAg
c3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY29weVByb3BlcnRpZXNG
cm9tQ29tcHV0ZWRTdHlsZShOb2RlKgogICAgIHJldHVybiBjb3B5UHJvcGVydGllc0Zyb21Db21w
dXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUsIHByb3BlcnRpZXNUb0luY2x1ZGUpOwogfQogCi1zdGF0
aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoY29uc3QgU3R5bGVQ
cm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQorc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydGll
cyYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKLSAgICByZXR1cm4gc3R5bGUg
PyBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKSA6IFBhc3NSZWZQdHI8Q1NT
VmFsdWU+KCk7CisgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHlDU1NWYWx1ZSA9IHN0
eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCkpCisgICAgICAgIHJldHVybiBwcm9w
ZXJ0eUNTU1ZhbHVlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKENvbXB1dGVkU3R5bGVFeHRyYWN0
b3IqIGNvbXB1dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxlRXh0cmFj
dG9yJiBjb21wdXRlZFN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgcmV0
dXJuIGNvbXB1dGVkU3R5bGUtPnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CisgICAgcmV0dXJu
IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWludCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoraW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQm
IHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCkBAIC0xNDcsNyArMTQ5LDcg
QEAgaW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFZhbHVlSUQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0
aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBU
JiBiYXNlU3R5bGUpOwogZW51bSBMZWdhY3lGb250U2l6ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lG
b250U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQaXhlbFZhbHVlc01hdGNoIH07CiBzdGF0
aWMgaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZl
VmFsdWUqLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6
ZU1vZGUpOwogc3RhdGljIGJvb2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqKTsK
QEAgLTM2OSwxMyArMzcxLDEzIEBAIHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFs
dWUqIGNvbG9yVmFsdWUpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5l
IFJHQkEzMiB0ZXh0Q29sb3JGcm9tU3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEz
MiB0ZXh0Q29sb3JGcm9tU3R5bGUoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9S
R0JBKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKS5nZXQoKSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3Jv
dW5kQ29sb3JGcm9tU3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3Jv
dW5kQ29sb3JGcm9tU3R5bGUoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JB
KGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciku
Z2V0KCkpOwogfQpAQCAtNDA4LDcgKzQxMCw3IEBAIHN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2
aW5nU3RhcnRBbmRFbmQoaW50IHRleHRBbGlnbiwgaW50IGRpcmVjdGlvbikKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQo
VCogc3R5bGUpCitzdGF0aWMgaW50IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKFQmIHN0
eWxlKQogewogICAgIHJldHVybiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChpZGVudGlm
aWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pLCBpZGVudGlm
aWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsKIH0KQEAg
LTY0MiwxMyArNjQ0LDEzIEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KEVkaXRpbmdTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUt
Pm1fbXV0YWJsZVN0eWxlKQogICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICByZXR1
cm4gdHJpU3RhdGVPZlN0eWxlKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSwgRG9Ob3RJZ25v
cmVUZXh0T25seVByb3BlcnRpZXMpOworICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoKnN0eWxl
LT5tX211dGFibGVTdHlsZSwgRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5
bGUoVCogc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyBzaG91
bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0CitUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6
OnRyaVN0YXRlT2ZTdHlsZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQ
cm9wZXJ0aWVzIHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QKIHsKLSAgICBS
ZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNO
b3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVUb0NvbXBhcmUpOworICAgIFJlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBkaWZmZXJlbmNlID0gZ2V0UHJvcGVydGllc05vdEluKCpt
X211dGFibGVTdHlsZSwgc3R5bGVUb0NvbXBhcmUpOwogCiAgICAgaWYgKHNob3VsZElnbm9yZVRl
eHRPbmx5UHJvcGVydGllcyA9PSBJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRp
ZmZlcmVuY2UtPnJlbW92ZVByb3BlcnRpZXNJblNldCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9B
UlJBWV9MRU5HVEgodGV4dE9ubHlQcm9wZXJ0aWVzKSk7CkBAIC02NzQsNyArNjc2LDcgQEAgVHJp
U3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uKSBjb25zdAogICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFy
dCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmhhc0VkaXRhYmxl
U3R5bGUoKSkgewogICAgICAgICAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0
eWxlKG5vZGUpOwotICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0
eWxlKCZjb21wdXRlZFN0eWxlLCBub2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRv
Tm90SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0T25s
eVByb3BlcnRpZXMpOworICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVP
ZlN0eWxlKGNvbXB1dGVkU3R5bGUsIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6
RG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRP
bmx5UHJvcGVydGllcyk7CiAgICAgICAgICAgICBpZiAobm9kZUlzU3RhcnQpIHsKICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IG5vZGVTdGF0ZTsKICAgICAgICAgICAgICAgICBub2RlSXNTdGFydCA9
IGZhbHNlOwpAQCAtODQ5LDcgKzg1MSw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpzdHlsZUlzUHJl
c2VudEluQ29tcHV0ZWRTdHlsZU9mTm9kZShOb2RlKiBub2RlKSBjb25zdAogICAgIGlmICghbV9t
dXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIENvbXB1dGVkU3R5bGVFeHRy
YWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydGllc05vdElu
KG1fbXV0YWJsZVN0eWxlLmdldCgpLCAmY29tcHV0ZWRTdHlsZSktPmlzRW1wdHkoKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZSkt
PmlzRW1wdHkoKTsKIH0KIAogYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5P
ckhUTUxFcXVpdmFsZW50KGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50KQpAQCAtOTIwLDEwICs5
MjIsMTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uLCBTaG91bGRQcmVzZXJ2ZVdyaXQKIAogICAgIHJlbW92ZUVxdWl2YWxlbnRQ
cm9wZXJ0aWVzKCpzdHlsZUF0UG9zaXRpb24pOwogCi0gICAgaWYgKHRleHRBbGlnblJlc29sdmlu
Z1N0YXJ0QW5kRW5kKG1fbXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdT
dGFydEFuZEVuZChzdHlsZUF0UG9zaXRpb24pKQorICAgIGlmICh0ZXh0QWxpZ25SZXNvbHZpbmdT
dGFydEFuZEVuZCgqbV9tdXRhYmxlU3R5bGUpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5k
RW5kKCpzdHlsZUF0UG9zaXRpb24pKQogICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24pOwogCi0gICAgaWYgKHRleHRDb2xvckZyb21TdHls
ZShtX211dGFibGVTdHlsZS5nZXQoKSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKHN0eWxlQXRQb3Np
dGlvbikpCisgICAgaWYgKHRleHRDb2xvckZyb21TdHlsZSgqbV9tdXRhYmxlU3R5bGUpID09IHRl
eHRDb2xvckZyb21TdHlsZSgqc3R5bGVBdFBvc2l0aW9uKSkKICAgICAgICAgbV9tdXRhYmxlU3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogCiAgICAgaWYgKGhhc1RyYW5z
cGFyZW50QmFja2dyb3VuZENvbG9yKG1fbXV0YWJsZVN0eWxlLmdldCgpKQpAQCAtMTE2MCw4ICsx
MTYyLDkgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBOb2RlKgogCiAgICAgLy8gMS4gUmVtb3ZlIHN0eWxl
IGZyb20gbWF0Y2hlZCBydWxlcyBiZWNhdXNlIHN0eWxlIHJlbWFpbiB3aXRob3V0IHJlcGVhdGlu
ZyBpdCBpbiBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24KICAgICBSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVz
Rm9yRWxlbWVudChlbGVtZW50LCBTdHlsZVJlc29sdmVyOjpBbGxCdXRFbXB0eUNTU1J1bGVzKTsK
KyAgICAKICAgICBpZiAoc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzICYmICFzdHlsZUZyb21NYXRjaGVk
UnVsZXMtPmlzRW1wdHkoKSkKLSAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVz
Tm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy5nZXQoKSk7
CisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVT
dHlsZSwgKnN0eWxlRnJvbU1hdGNoZWRSdWxlcyk7CiAKICAgICAvLyAyLiBSZW1vdmUgc3R5bGUg
cHJlc2VudCBpbiBjb250ZXh0IGFuZCBub3Qgb3ZlcnJpZGVuIGJ5IG1hdGNoZWQgcnVsZXMuCiAg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gY29tcHV0ZWRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKGNvbnRleHQsIEVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QpOwpAQCAtMTE3MCwxNSArMTE3
MywxNSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIE5vZGUqCiAgICAgICAgICAgICBjb21wdXRlZFN0eWxl
LT5tX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Is
IENTU1ZhbHVlVHJhbnNwYXJlbnQpOwogCiAgICAgICAgIHJlbW92ZVByb3BlcnRpZXNJblN0eWxl
KGNvbXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpLCBzdHlsZUZyb21NYXRjaGVkUnVs
ZXMuZ2V0KCkpOwotICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbiht
X211dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkp
OworICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxl
U3R5bGUsICpjb21wdXRlZFN0eWxlLT5tX211dGFibGVTdHlsZSk7CiAgICAgfQogCiAgICAgLy8g
My4gSWYgdGhpcyBlbGVtZW50IGlzIGEgc3BhbiBhbmQgaGFzIGRpc3BsYXk6IGlubGluZSBvciBm
bG9hdDogbm9uZSwgcmVtb3ZlIHRoZW0gdW5sZXNzIHRoZXkgYXJlIG92ZXJyaWRlbiBieSBydWxl
cy4KICAgICAvLyBUaGVzZSBydWxlcyBhcmUgYWRkZWQgYnkgc2VyaWFsaXphdGlvbiBjb2RlIHRv
IHdyYXAgdGV4dCBub2Rlcy4KICAgICBpZiAoaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxl
QXR0cmlidXRlKGVsZW1lbnQpKSB7Ci0gICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVz
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlzcGxheSkgJiYgaWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkobV9tdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5RGlzcGxheSkg
PT0gQ1NTVmFsdWVJbmxpbmUpCisgICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlzcGxheSkgJiYgaWRlbnRpZmllckZvclN0
eWxlUHJvcGVydHkoKm1fbXV0YWJsZVN0eWxlLCBDU1NQcm9wZXJ0eURpc3BsYXkpID09IENTU1Zh
bHVlSW5saW5lKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5RGlzcGxheSk7Ci0gICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RmxvYXQpICYmIGlkZW50aWZpZXJGb3JTdHls
ZVByb3BlcnR5KG1fbXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZsb2F0KSA9PSBDU1NW
YWx1ZU5vbmUpCisgICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5RmxvYXQpICYmIGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5
KCptX211dGFibGVTdHlsZSwgQ1NTUHJvcGVydHlGbG9hdCkgPT0gQ1NTVmFsdWVOb25lKQogICAg
ICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5RmxvYXQp
OwogICAgIH0KIH0KQEAgLTE0MDUsMTEgKzE0MDgsMTEgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hh
bmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9kZSk7CiAKICAgICAvLyBGSVhN
RTogdGFrZSBjYXJlIG9mIGJhY2tncm91bmQtY29sb3IgaW4gZWZmZWN0Ci0gICAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihz
dHlsZS0+c3R5bGUoKSwgJmNvbXB1dGVkU3R5bGUpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4oKnN0eWxlLT5zdHls
ZSgpLCBjb21wdXRlZFN0eWxlKTsKIAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVy
dGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCktPmVk
aXRvcigpLnNob3VsZFN0eWxlV2l0aENTUygpKQotICAgICAgICBleHRyYWN0VGV4dFN0eWxlcyhk
b2N1bWVudCwgbXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlLnVzZUZpeGVkRm9udERl
ZmF1bHRTaXplKCkpOworICAgICAgICBleHRyYWN0VGV4dFN0eWxlcyhkb2N1bWVudCwgKm11dGFi
bGVTdHlsZSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSgpKTsKIAogICAg
IC8vIENoYW5naW5nIHRoZSB3aGl0ZXNwYWNlIHN0eWxlIGluIGEgdGFiIHNwYW4gd291bGQgY29s
bGFwc2UgdGhlIHRhYiBpbnRvIGEgc3BhY2UuCiAgICAgaWYgKGlzVGFiU3BhblRleHROb2RlKHBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpIHx8IGlzVGFiU3Bhbk5vZGUoKHBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCkpKSkKQEAgLTE0MjQsMzQgKzE0MjcsMzIgQEAgU3R5bGVDaGFuZ2U6OlN0eWxl
Q2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAg
ICBtX2Nzc1N0eWxlID0gbXV0YWJsZVN0eWxlLT5hc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsK
IH0KIAotc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzKiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiBuZXdUZXh0RGVjb3JhdGlvbiwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQorc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Q
cm9wZXJ0eShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0
KiBuZXdUZXh0RGVjb3JhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIGlm
IChuZXdUZXh0RGVjb3JhdGlvbi0+bGVuZ3RoKCkpCi0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShwcm9wZXJ0eUlELCBuZXdUZXh0RGVjb3JhdGlvbi0+Y3NzVGV4dCgpLCBzdHlsZS0+cHJvcGVy
dHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CisgICAgICAgIHN0eWxlLnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIG5ld1RleHREZWNvcmF0aW9uLT5jc3NUZXh0KCksIHN0eWxlLnByb3BlcnR5SXNJ
bXBvcnRhbnQocHJvcGVydHlJRCkpOwogICAgIGVsc2UgewogICAgICAgICAvLyB0ZXh0LWRlY29y
YXRpb246IG5vbmUgaXMgcmVkdW5kYW50IHNpbmNlIGl0IGRvZXMgbm90IHJlbW92ZSBhbnkgdGV4
dCBkZWNvcmF0aW9ucy4KLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQp
OworICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAgICB9CiB9CiAK
LXZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwg
TXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVm
YXVsdFNpemUpCit2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCog
ZG9jdW1lbnQsIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBib29sIHNob3VsZFVzZUZp
eGVkRm9udERlZmF1bHRTaXplKQogewotICAgIEFTU0VSVChzdHlsZSk7Ci0KICAgICBpZiAoaWRl
bnRpZmllckZvclN0eWxlUHJvcGVydHkoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkgPT0g
Q1NTVmFsdWVCb2xkKSB7Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQpOworICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQpOwogICAgICAgICBtX2FwcGx5Qm9sZCA9IHRydWU7CiAgICAgfQogCiAgICAgaW50
IGZvbnRTdHlsZSA9IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0
eUZvbnRTdHlsZSk7CiAgICAgaWYgKGZvbnRTdHlsZSA9PSBDU1NWYWx1ZUl0YWxpYyB8fCBmb250
U3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlKSB7Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSk7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFN0eWxlKTsKICAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7CiAgICAg
fQogCiAgICAgLy8gQXNzdW1pbmcgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzIGhh
cyBiZWVuIGNhbGxlZCwgdGhlcmUgc2hvdWxkIG5vdCBiZSAtd2Via2l0LXRleHQtZGVjb3JhdGlv
bnMtaW4tZWZmZWN0CiAgICAgLy8gRnVydGhlcm1vcmUsIHRleHQtZGVjb3JhdGlvbjogbm9uZSBo
YXMgYmVlbiB0cmltbWVkIHNvIHRoYXQgdGV4dC1kZWNvcmF0aW9uIHByb3BlcnR5IGlzIGFsd2F5
cyBhIENTU1ZhbHVlTGlzdC4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Cisg
ICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiAgICAgaWYgKGlzPENTU1ZhbHVlTGlz
dD4odGV4dERlY29yYXRpb24uZ2V0KCkpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlVW5kZXJsaW5lKTsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5l
VGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxp
bmVUaHJvdWdoKTsKQEAgLTE0NjksMzkgKzE0NzAsMzkgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0
cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
KgogICAgIGludCB2ZXJ0aWNhbEFsaWduID0gaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoc3R5
bGUsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7CiAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdu
KSB7CiAgICAgY2FzZSBDU1NWYWx1ZVN1YjoKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VmVydGljYWxBbGlnbik7CiAgICAgICAgIG1fYXBwbHlTdWJzY3JpcHQgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlU3VwZXI6Ci0gICAgICAgIHN0
eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAgICAgICBz
dHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOwogICAgICAgICBt
X2FwcGx5U3VwZXJzY3JpcHQgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBp
ZiAoc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpIHsKKyAgICBp
ZiAoc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSkgewogICAgICAg
ICBtX2FwcGx5Rm9udENvbG9yID0gQ29sb3IodGV4dENvbG9yRnJvbVN0eWxlKHN0eWxlKSkuc2Vy
aWFsaXplZCgpOwotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xv
cik7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogICAg
IH0KIAotICAgIG1fYXBwbHlGb250RmFjZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5Rm9udEZhbWlseSk7CisgICAgbV9hcHBseUZvbnRGYWNlID0gc3R5bGUuZ2V0UHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogICAgIC8vIFJlbW92ZSBzaW5nbGUgcXVv
dGVzIGZvciBPdXRsb29rIDIwMDcgY29tcGF0aWJpbGl0eS4gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTQ0OAogICAgIG1fYXBwbHlGb250RmFjZS5yZXBsYWNl
V2l0aExpdGVyYWwoJ1wnJywgIiIpOwotICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHkpOworICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dEZhbWlseSk7CiAKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250U2l6ZSA9IHN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKSB7CisgICAgaWYgKFJlZlB0
cjxDU1NWYWx1ZT4gZm9udFNpemUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udFNpemUpKSB7CiAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmb250
U2l6ZSkpCi0gICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U2l6ZSk7IC8vIENhbid0IG1ha2Ugc2Vuc2Ugb2YgdGhlIG51bWJlci4gUHV0IG5vIGZvbnQgc2l6
ZS4KKyAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUp
OyAvLyBDYW4ndCBtYWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1dCBubyBmb250IHNpemUuCiAg
ICAgICAgIGVsc2UgaWYgKGludCBsZWdhY3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNT
U1ZhbHVlKGRvY3VtZW50LCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFNpemUuZ2V0
KCkpLAogICAgICAgICAgICAgICAgIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBVc2VM
ZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVsVmFsdWVzTWF0Y2gpKSB7CiAgICAgICAgICAgICBtX2Fw
cGx5Rm9udFNpemUgPSBTdHJpbmc6Om51bWJlcihsZWdhY3lGb250U2l6ZSk7Ci0gICAgICAgICAg
ICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CisgICAgICAgICAg
ICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZU
ZXh0RGVjb3JhdGlvbikKK3N0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydElELCBDU1NWYWx1ZSog
cmVmVGV4dERlY29yYXRpb24pCiB7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlv
biA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRJRCk7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVy
dElEKTsKICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odGV4dERlY29yYXRpb24uZ2V0KCkpIHx8
ICFpczxDU1NWYWx1ZUxpc3Q+KHJlZlRleHREZWNvcmF0aW9uKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0xNTE0LDE0ICsxNTE1LDE0IEBAIHN0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMo
TXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvCiAgICAgc2V0
VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4dERlY29yYXRpb24uZ2V0KCksIHBy
b3BlcnRJRCk7CiB9CiAKLXN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTVmFsdWUqIGZv
bnRXZWlnaHQpCitzdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKENTU1ZhbHVlJiBmb250V2Vp
Z2h0KQogewotICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGZvbnRXZWlnaHQpKQorICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCZmb250V2VpZ2h0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRoZXJl
IGFyZSBvbmx5IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQuCiAg
ICAgLy8gQ29sbGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNlIHR3
byBzdGF0ZXMgZm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNoIChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRjaCAo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewog
ICAgICAgICBjYXNlIENTU1ZhbHVlMTAwOgogICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgogICAg
ICAgICBjYXNlIENTU1ZhbHVlMzAwOgpAQCAtMTU0NCw0MSArMTU0NSw0MCBAQCBzdGF0aWMgYm9v
bCBmb250V2VpZ2h0SXNCb2xkKENTU1ZhbHVlKiBmb250V2VpZ2h0KQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChUKiBzdHlsZSkKK3N0YXRp
YyBib29sIGZvbnRXZWlnaHRJc0JvbGQoVCYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGZvbnRXZWln
aHRJc0JvbGQoZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdo
dCkuZ2V0KCkpOworICAgIHJldHVybiBmb250V2VpZ2h0SXNCb2xkKCpleHRyYWN0UHJvcGVydHlW
YWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBl
eHRyYWN0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyogc3R5bGVXaXRoUmVkdW5kYW50
UHJvcGVydGllcywgVCogYmFzZVN0eWxlKQorc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gZXh0cmFjdFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMmIHN0eWxl
V2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQmIGJhc2VTdHlsZSkKIHsKLSAgICBBU1NFUlQoc3R5
bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcyk7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gcmVz
dWx0ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcyk7
Ci0gICAgcmVzdWx0LT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcygqYmFzZVN0eWxlKTsKKyAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiByZXN1bHQgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgmc3R5
bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcyk7CisgICAgcmVzdWx0LT5yZW1vdmVFcXVpdmFsZW50
UHJvcGVydGllcyhiYXNlU3R5bGUpOwogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBtdXRhYmxlU3R5bGUgPSByZXN1bHQtPnN0eWxlKCk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VT
dHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7Ci0gICAgZGlm
ZlRleHREZWNvcmF0aW9ucyhtdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7Ci0gICAgZGlmZlRleHRE
ZWNvcmF0aW9ucyhtdXRhYmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CisgICAg
ZGlmZlRleHREZWNvcmF0aW9ucygqbXV0YWJsZVN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uLCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOworICAgIGRpZmZUZXh0RGVj
b3JhdGlvbnMoKm11dGFibGVTdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKIAotICAgIGlmIChl
eHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkgJiYg
Zm9udFdlaWdodElzQm9sZChtdXRhYmxlU3R5bGUuZ2V0KCkpID09IGZvbnRXZWlnaHRJc0JvbGQo
YmFzZVN0eWxlKSkKKyAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQ
cm9wZXJ0eUZvbnRXZWlnaHQpICYmIGZvbnRXZWlnaHRJc0JvbGQoKm11dGFibGVTdHlsZSkgPT0g
Zm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAKLSAgICBpZiAoZXh0cmFjdFByb3Bl
cnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKSAmJiB0ZXh0Q29sb3JGcm9tU3R5
bGUobXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0Q29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkK
KyAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9y
KSAmJiB0ZXh0Q29sb3JGcm9tU3R5bGUoKm11dGFibGVTdHlsZSkgPT0gdGV4dENvbG9yRnJvbVN0
eWxlKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlDb2xvcik7CiAKICAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxl
LCBDU1NQcm9wZXJ0eVRleHRBbGlnbikKLSAgICAgICAgJiYgdGV4dEFsaWduUmVzb2x2aW5nU3Rh
cnRBbmRFbmQobXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFu
ZEVuZChiYXNlU3R5bGUpKQorICAgICAgICAmJiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVu
ZCgqbXV0YWJsZVN0eWxlKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChiYXNlU3R5
bGUpKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4
dEFsaWduKTsKIAotICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKSAmJiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUobXV0YWJs
ZVN0eWxlLmdldCgpKSA9PSBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKKyAg
ICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikgJiYgYmFja2dyb3VuZENvbG9yRnJvbVN0eWxlKCptdXRhYmxlU3R5bGUpID09IGJh
Y2tncm91bmRDb2xvckZyb21TdHlsZShiYXNlU3R5bGUpKQogICAgICAgICBtdXRhYmxlU3R5bGUt
PnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAogICAgIHJldHVy
biBtdXRhYmxlU3R5bGUucmVsZWFzZSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotUGFz
c1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQ
cm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpCitQ
YXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHls
ZVByb3BlcnRpZXMmIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQmIGJhc2VTdHlsZSkK
IHsKICAgICByZXR1cm4gZXh0cmFjdFByb3BlcnRpZXNOb3RJbihzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzLCBiYXNlU3R5bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmgKaW5kZXggNWUxNzYyMi4uOGVlNzU1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5oCkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZVRleHRG
aWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHNldFBy
b3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
ID0gZmFsc2UpOwogICAgIHZvaWQgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCogc3R5bGVUb0NvbXBhcmUs
IFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91
bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0OwogICAgIGJvb2wgY29uZmxpY3RzV2l0
aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqIGV4dHJh
Y3RlZFN0eWxlLCBWZWN0b3I8Q1NTUHJvcGVydHlJRD4qIGNvbmZsaWN0aW5nUHJvcGVydGllcykg
Y29uc3Q7CiAgICAgdm9pZCBtZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5
bGVkRWxlbWVudCosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRl
KTsKICAgICB2b2lkIG1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVy
dHlPdmVycmlkZU1vZGUpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIHByaXZhdGU6Ci0gICAgdm9pZCBleHRyYWN0
VGV4dFN0eWxlcyhEb2N1bWVudCosIE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBib29sIHNob3Vs
ZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKTsKKyAgICB2b2lkIGV4dHJhY3RUZXh0U3R5bGVzKERv
Y3VtZW50KiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250
RGVmYXVsdFNpemUpOwogCiAgICAgU3RyaW5nIG1fY3NzU3R5bGU7CiAgICAgYm9vbCBtX2FwcGx5
Qm9sZDsK
</data>
<flag name="review"
          id="266201"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="266202"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241485</attachid>
            <date>2014-11-13 07:38:44 -0800</date>
            <delta_ts>2014-11-14 04:44:12 -0800</delta_ts>
            <desc>Patch v4</desc>
            <filename>patch_v17.patch</filename>
            <type>text/plain</type>
            <size>21154</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZDM4ODM3Li4yMDZjODc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTQtMTEtMTMgIFRpYm9yIE1lc3phcm9zICA8dG1lc3phcm9zLnUtc3plZ2VkQHBhcnRu
ZXIuc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2lu
dGVycyBpbiBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzkxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9yRnJvbVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmJhY2tncm91bmRDb2xvckZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UHJvcGVydGllc05vdEluKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorCiAy
MDE0LTExLTEzICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgW0VGTF0gVW5leHBlY3RlZCBjcmFzaGVzIGluIGxheW91dCB0ZXN0IGFmdGVyIHIxNzU5
NTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBmMGViNDhiLi5l
ZThlZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xMjgs
MTggKzEyOCwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBj
b3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqCiAgICAgcmV0dXJuIGNvcHlQcm9w
ZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVydGllc1RvSW5jbHVk
ZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1
ZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAg
IHJldHVybiBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpIDog
UGFzc1JlZlB0cjxDU1NWYWx1ZT4oKTsKKyAgICByZXR1cm4gc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJh
Y3RQcm9wZXJ0eVZhbHVlKENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqIGNvbXB1dGVkU3R5bGUsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRy
YWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxlRXh0cmFjdG9yJiBjb21wdXRlZFN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUtPnBy
b3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUucHJvcGVy
dHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWludCBpZGVu
dGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
KQoraW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQmIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGV4dHJhY3RQcm9w
ZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZS5nZXQoKSkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgaW50IGlkZW50aWZpZXJGb3JT
dHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0
cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0
aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5bGUpOwogZW51bSBM
ZWdhY3lGb250U2l6ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwgVXNlTGVnYWN5Rm9u
dFNpemVPbmx5SWZQaXhlbFZhbHVlc01hdGNoIH07CiBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXpl
RnJvbUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIHNob3VsZFVz
ZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwogc3RhdGljIGJvb2wg
aXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqKTsKQEAgLTM2OSwxMyArMzY5LDEzIEBA
IHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFsdWUqIGNvbG9yVmFsdWUpCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29sb3JGcm9t
U3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29sb3JGcm9tU3R5bGUo
VCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGV4dHJhY3RQcm9wZXJ0eVZh
bHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKS5nZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCog
c3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCYg
c3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGV4dHJhY3RQcm9wZXJ0eVZhbHVl
KHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuZ2V0KCkpOwogfQpAQCAtNDA4LDcg
KzQwOCw3IEBAIHN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoaW50IHRl
eHRBbGlnbiwgaW50IGRpcmVjdGlvbikKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoVCogc3R5bGUpCitzdGF0aWMgaW50
IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKFQmIHN0eWxlKQogewogICAgIHJldHVybiB0
ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShz
dHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pLCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShz
dHlsZSwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsKIH0KQEAgLTY0MiwxMyArNjQyLDEzIEBAIFRy
aVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPm1fbXV0YWJsZVN0eWxlKQogICAg
ICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGVPZlN0eWxlKHN0
eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSwgRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMp
OworICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoKnN0eWxlLT5tX211dGFibGVTdHlsZSwgRG9O
b3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
VHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoVCogc3R5bGVUb0NvbXBhcmUs
IFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyBzaG91bGRJZ25vcmVUZXh0T25seVByb3Bl
cnRpZXMpIGNvbnN0CitUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShUJiBz
dHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9y
ZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QKIHsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJv
cGVydGllcz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5n
ZXQoKSwgc3R5bGVUb0NvbXBhcmUpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBkaWZmZXJlbmNlID0gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgc3R5bGVU
b0NvbXBhcmUpOwogCiAgICAgaWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9PSBJ
Z25vcmVUZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVByb3Bl
cnRpZXNJblNldCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9ubHlQ
cm9wZXJ0aWVzKSk7CkBAIC02NzQsNyArNjc0LDcgQEAgVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0
cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChu
b2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAg
ICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwotICAgICAgICAg
ICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKCZjb21wdXRlZFN0eWxlLCBu
b2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRvTm90SWdub3JlVGV4dE9ubHlQcm9w
ZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOworICAgICAg
ICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKGNvbXB1dGVkU3R5bGUs
IG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJZ25vcmVUZXh0T25seVBy
b3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7CiAgICAg
ICAgICAgICBpZiAobm9kZUlzU3RhcnQpIHsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IG5vZGVT
dGF0ZTsKICAgICAgICAgICAgICAgICBub2RlSXNTdGFydCA9IGZhbHNlOwpAQCAtODQ5LDcgKzg0
OSw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpzdHlsZUlzUHJlc2VudEluQ29tcHV0ZWRTdHlsZU9m
Tm9kZShOb2RlKiBub2RlKSBjb25zdAogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShu
b2RlKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgp
LCAmY29tcHV0ZWRTdHlsZSktPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydGllc05v
dEluKCptX211dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZSktPmlzRW1wdHkoKTsKIH0KIAogYm9v
bCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KGNvbnN0
IEhUTUxFbGVtZW50KiBlbGVtZW50KQpAQCAtOTIwLDEwICs5MjAsMTAgQEAgdm9pZCBFZGl0aW5n
U3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBTaG91bGRQ
cmVzZXJ2ZVdyaXQKIAogICAgIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKCpzdHlsZUF0UG9z
aXRpb24pOwogCi0gICAgaWYgKHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKG1fbXV0YWJs
ZVN0eWxlLmdldCgpKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChzdHlsZUF0UG9z
aXRpb24pKQorICAgIGlmICh0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCgqbV9tdXRhYmxl
U3R5bGUpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKCpzdHlsZUF0UG9zaXRpb24p
KQogICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0
QWxpZ24pOwogCi0gICAgaWYgKHRleHRDb2xvckZyb21TdHlsZShtX211dGFibGVTdHlsZS5nZXQo
KSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKHN0eWxlQXRQb3NpdGlvbikpCisgICAgaWYgKHRleHRD
b2xvckZyb21TdHlsZSgqbV9tdXRhYmxlU3R5bGUpID09IHRleHRDb2xvckZyb21TdHlsZSgqc3R5
bGVBdFBvc2l0aW9uKSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IpOwogCiAgICAgaWYgKGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9y
KG1fbXV0YWJsZVN0eWxlLmdldCgpKQpAQCAtMTE2MCw4ICsxMTYwLDkgQEAgdm9pZCBFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50LCBOb2RlKgogCiAgICAgLy8gMS4gUmVtb3ZlIHN0eWxlIGZyb20gbWF0Y2hlZCBydWxlcyBi
ZWNhdXNlIHN0eWxlIHJlbWFpbiB3aXRob3V0IHJlcGVhdGluZyBpdCBpbiBpbmxpbmUgc3R5bGUg
ZGVjbGFyYXRpb24KICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGVGcm9t
TWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBT
dHlsZVJlc29sdmVyOjpBbGxCdXRFbXB0eUNTU1J1bGVzKTsKKyAgICAKICAgICBpZiAoc3R5bGVG
cm9tTWF0Y2hlZFJ1bGVzICYmICFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmlzRW1wdHkoKSkKLSAg
ICAgICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUu
Z2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy5nZXQoKSk7CisgICAgICAgIG1fbXV0YWJsZVN0
eWxlID0gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgKnN0eWxlRnJvbU1hdGNo
ZWRSdWxlcyk7CiAKICAgICAvLyAyLiBSZW1vdmUgc3R5bGUgcHJlc2VudCBpbiBjb250ZXh0IGFu
ZCBub3Qgb3ZlcnJpZGVuIGJ5IG1hdGNoZWQgcnVsZXMuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gY29tcHV0ZWRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGNvbnRleHQsIEVkaXRpbmdQ
cm9wZXJ0aWVzSW5FZmZlY3QpOwpAQCAtMTE3MCwxNSArMTE3MSwxNSBAQCB2b2lkIEVkaXRpbmdT
dHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQsIE5vZGUqCiAgICAgICAgICAgICBjb21wdXRlZFN0eWxlLT5tX211dGFibGVTdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENTU1ZhbHVlVHJhbnNwYXJlbnQp
OwogCiAgICAgICAgIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKGNvbXB1dGVkU3R5bGUtPm1fbXV0
YWJsZVN0eWxlLmdldCgpLCBzdHlsZUZyb21NYXRjaGVkUnVsZXMuZ2V0KCkpOwotICAgICAgICBt
X211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwg
Y29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgICAgICBtX211dGFibGVT
dHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxlU3R5bGUsICpjb21wdXRlZFN0eWxl
LT5tX211dGFibGVTdHlsZSk7CiAgICAgfQogCiAgICAgLy8gMy4gSWYgdGhpcyBlbGVtZW50IGlz
IGEgc3BhbiBhbmQgaGFzIGRpc3BsYXk6IGlubGluZSBvciBmbG9hdDogbm9uZSwgcmVtb3ZlIHRo
ZW0gdW5sZXNzIHRoZXkgYXJlIG92ZXJyaWRlbiBieSBydWxlcy4KICAgICAvLyBUaGVzZSBydWxl
cyBhcmUgYWRkZWQgYnkgc2VyaWFsaXphdGlvbiBjb2RlIHRvIHdyYXAgdGV4dCBub2Rlcy4KICAg
ICBpZiAoaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpKSB7
Ci0gICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5RGlzcGxheSkgJiYgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkobV9tdXRh
YmxlU3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5RGlzcGxheSkgPT0gQ1NTVmFsdWVJbmxpbmUpCisg
ICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5RGlzcGxheSkgJiYgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoKm1fbXV0YWJs
ZVN0eWxlLCBDU1NQcm9wZXJ0eURpc3BsYXkpID09IENTU1ZhbHVlSW5saW5lKQogICAgICAgICAg
ICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSk7Ci0g
ICAgICAgIGlmICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5RmxvYXQpICYmIGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KG1fbXV0YWJsZVN0
eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUZsb2F0KSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgIGlm
ICghc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
RmxvYXQpICYmIGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KCptX211dGFibGVTdHlsZSwgQ1NT
UHJvcGVydHlGbG9hdCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5RmxvYXQpOwogICAgIH0KIH0KQEAgLTE0MDUs
MTEgKzE0MDYsMTEgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5
bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9y
IGNvbXB1dGVkU3R5bGUobm9kZSk7CiAKICAgICAvLyBGSVhNRTogdGFrZSBjYXJlIG9mIGJhY2tn
cm91bmQtY29sb3IgaW4gZWZmZWN0Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IG11dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihzdHlsZS0+c3R5bGUoKSwgJmNvbXB1
dGVkU3R5bGUpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5
bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4oKnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKTsK
IAogICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0
KCkpOwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLnNob3VsZFN0eWxlV2l0
aENTUygpKQotICAgICAgICBleHRyYWN0VGV4dFN0eWxlcyhkb2N1bWVudCwgbXV0YWJsZVN0eWxl
LmdldCgpLCBjb21wdXRlZFN0eWxlLnVzZUZpeGVkRm9udERlZmF1bHRTaXplKCkpOworICAgICAg
ICBleHRyYWN0VGV4dFN0eWxlcyhkb2N1bWVudCwgKm11dGFibGVTdHlsZSwgY29tcHV0ZWRTdHls
ZS51c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSgpKTsKIAogICAgIC8vIENoYW5naW5nIHRoZSB3aGl0
ZXNwYWNlIHN0eWxlIGluIGEgdGFiIHNwYW4gd291bGQgY29sbGFwc2UgdGhlIHRhYiBpbnRvIGEg
c3BhY2UuCiAgICAgaWYgKGlzVGFiU3BhblRleHROb2RlKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCkpIHx8IGlzVGFiU3Bhbk5vZGUoKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKSkKQEAgLTE0
MjQsMzQgKzE0MjUsMzIgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSog
c3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICBtX2Nzc1N0eWxlID0gbXV0YWJs
ZVN0eWxlLT5hc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0
VGV4dERlY29yYXRpb25Qcm9wZXJ0eShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgY29u
c3QgQ1NTVmFsdWVMaXN0KiBuZXdUZXh0RGVjb3JhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEKQorc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiBuZXdUZXh0RGVjb3JhdGlvbiwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIGlmIChuZXdUZXh0RGVjb3JhdGlvbi0+
bGVuZ3RoKCkpCi0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdUZXh0
RGVjb3JhdGlvbi0+Y3NzVGV4dCgpLCBzdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0
eUlEKSk7CisgICAgICAgIHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1RleHREZWNv
cmF0aW9uLT5jc3NUZXh0KCksIHN0eWxlLnByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHlJRCkp
OwogICAgIGVsc2UgewogICAgICAgICAvLyB0ZXh0LWRlY29yYXRpb246IG5vbmUgaXMgcmVkdW5k
YW50IHNpbmNlIGl0IGRvZXMgbm90IHJlbW92ZSBhbnkgdGV4dCBkZWNvcmF0aW9ucy4KLSAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOworICAgICAgICBzdHlsZS5yZW1v
dmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVDaGFuZ2U6OmV4
dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGll
cyogc3R5bGUsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpCit2b2lkIFN0eWxl
Q2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9jdW1lbnQsIE11dGFibGVTdHls
ZVByb3BlcnRpZXMmIHN0eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKQog
ewotICAgIEFTU0VSVChzdHlsZSk7Ci0KICAgICBpZiAoaWRlbnRpZmllckZvclN0eWxlUHJvcGVy
dHkoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkgPT0gQ1NTVmFsdWVCb2xkKSB7Ci0gICAg
ICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworICAgICAg
ICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogICAgICAgICBt
X2FwcGx5Qm9sZCA9IHRydWU7CiAgICAgfQogCiAgICAgaW50IGZvbnRTdHlsZSA9IGlkZW50aWZp
ZXJGb3JTdHlsZVByb3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSk7CiAgICAgaWYg
KGZvbnRTdHlsZSA9PSBDU1NWYWx1ZUl0YWxpYyB8fCBmb250U3R5bGUgPT0gQ1NTVmFsdWVPYmxp
cXVlKSB7Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHls
ZSk7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlKTsK
ICAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gQXNzdW1pbmcg
cmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzIGhhcyBiZWVuIGNhbGxlZCwgdGhlcmUg
c2hvdWxkIG5vdCBiZSAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0CiAgICAgLy8g
RnVydGhlcm1vcmUsIHRleHQtZGVjb3JhdGlvbjogbm9uZSBoYXMgYmVlbiB0cmltbWVkIHNvIHRo
YXQgdGV4dC1kZWNvcmF0aW9uIHByb3BlcnR5IGlzIGFsd2F5cyBhIENTU1ZhbHVlTGlzdC4KLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB0
ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbik7CiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odGV4dERlY29yYXRpb24uZ2V0
KCkpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKQEAgLTE0Njks
MzkgKzE0NjgsMzkgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKgogICAgIGludCB2ZXJ0aWNhbEFs
aWduID0gaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoc3R5bGUsIENTU1Byb3BlcnR5VmVydGlj
YWxBbGlnbik7CiAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7CiAgICAgY2FzZSBDU1NWYWx1
ZVN1YjoKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VmVydGljYWxB
bGlnbik7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VmVydGljYWxB
bGlnbik7CiAgICAgICAgIG1fYXBwbHlTdWJzY3JpcHQgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENTU1ZhbHVlU3VwZXI6Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOwogICAgICAgICBtX2FwcGx5U3VwZXJzY3JpcHQgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpIHsKKyAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSkgewogICAgICAgICBtX2FwcGx5Rm9udENvbG9yID0g
Q29sb3IodGV4dENvbG9yRnJvbVN0eWxlKHN0eWxlKSkuc2VyaWFsaXplZCgpOwotICAgICAgICBz
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CisgICAgICAgIHN0eWxlLnJl
bW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogICAgIH0KIAotICAgIG1fYXBwbHlGb250
RmFjZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7Cisg
ICAgbV9hcHBseUZvbnRGYWNlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRGYW1pbHkpOwogICAgIC8vIFJlbW92ZSBzaW5nbGUgcXVvdGVzIGZvciBPdXRsb29rIDIwMDcg
Y29tcGF0aWJpbGl0eS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03OTQ0OAogICAgIG1fYXBwbHlGb250RmFjZS5yZXBsYWNlV2l0aExpdGVyYWwoJ1wnJywgIiIp
OwotICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOworICAg
IHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAKLSAgICBpZiAo
UmVmUHRyPENTU1ZhbHVlPiBmb250U2l6ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5Rm9udFNpemUpKSB7CisgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9udFNpemUg
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKSB7CiAgICAg
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmb250U2l6ZSkpCi0gICAgICAgICAgICBz
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7IC8vIENhbid0IG1ha2Ug
c2Vuc2Ugb2YgdGhlIG51bWJlci4gUHV0IG5vIGZvbnQgc2l6ZS4KKyAgICAgICAgICAgIHN0eWxl
LnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBtYWtlIHNlbnNl
IG9mIHRoZSBudW1iZXIuIFB1dCBubyBmb250IHNpemUuCiAgICAgICAgIGVsc2UgaWYgKGludCBs
ZWdhY3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3VtZW50LCBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFNpemUuZ2V0KCkpLAogICAgICAgICAgICAgICAg
IHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJZlBp
eGVsVmFsdWVzTWF0Y2gpKSB7CiAgICAgICAgICAgICBtX2FwcGx5Rm9udFNpemUgPSBTdHJpbmc6
Om51bWJlcihsZWdhY3lGb250U2l6ZSk7Ci0gICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CisgICAgICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKK3N0YXRp
YyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUs
IENTU1Byb3BlcnR5SUQgcHJvcGVydElELCBDU1NWYWx1ZSogcmVmVGV4dERlY29yYXRpb24pCiB7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnRJRCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlv
biA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKICAgICBpZiAoIWlzPENT
U1ZhbHVlTGlzdD4odGV4dERlY29yYXRpb24uZ2V0KCkpIHx8ICFpczxDU1NWYWx1ZUxpc3Q+KHJl
ZlRleHREZWNvcmF0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNTE0LDE0ICsxNTEzLDE0
IEBAIHN0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvCiAgICAgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0
eShzdHlsZSwgbmV3VGV4dERlY29yYXRpb24uZ2V0KCksIHByb3BlcnRJRCk7CiB9CiAKLXN0YXRp
YyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTVmFsdWUqIGZvbnRXZWlnaHQpCitzdGF0aWMgYm9v
bCBmb250V2VpZ2h0SXNCb2xkKENTU1ZhbHVlJiBmb250V2VpZ2h0KQogewogICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KGZvbnRXZWlnaHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBCZWNhdXNlIGIgdGFnIGNhbiBvbmx5IGJvbGQgdGV4dCwgdGhlcmUgYXJlIG9ubHkg
dHdvIHN0YXRlcyBpbiBwbGFpbiBodG1sOiBib2xkIGFuZCBub3QgYm9sZC4KICAgICAvLyBDb2xs
YXBzZSBhbGwgb3RoZXIgdmFsdWVzIHRvIGVpdGhlciBvbmUgb2YgdGhlc2UgdHdvIHN0YXRlcyBm
b3IgZWRpdGluZyBwdXJwb3Nlcy4KLSAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqZm9udFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CisgICAgc3dpdGNoIChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oZm9udFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNh
c2UgQ1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUyMDA6CiAgICAgICAgIGNhc2Ug
Q1NTVmFsdWUzMDA6CkBAIC0xNTQ0LDQxICsxNTQzLDQxIEBAIHN0YXRpYyBib29sIGZvbnRXZWln
aHRJc0JvbGQoQ1NTVmFsdWUqIGZvbnRXZWlnaHQpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1zdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKFQqIHN0eWxlKQorc3RhdGljIGJvb2wgZm9u
dFdlaWdodElzQm9sZChUJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gZm9udFdlaWdodElzQm9sZChl
eHRyYWN0UHJvcGVydHlWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250V2VpZ2h0ID0gZXh0cmFjdFByb3BlcnR5VmFsdWUo
c3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCk7CisgICAgcmV0dXJuIGZvbnRXZWln
aHQgPyBmb250V2VpZ2h0SXNCb2xkKCpmb250V2VpZ2h0KSA6IGZhbHNlOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4g
ZXh0cmFjdFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlV2l0aFJlZHVuZGFu
dFByb3BlcnRpZXMsIFQqIGJhc2VTdHlsZSkKK3N0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IGV4dHJhY3RQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHls
ZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5bGUpCiB7Ci0gICAgQVNTRVJUKHN0
eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMpOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHJl
c3VsdCA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMp
OwotICAgIHJlc3VsdC0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoKmJhc2VTdHlsZSk7Cisg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gcmVzdWx0ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoJnN0
eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMpOworICAgIHJlc3VsdC0+cmVtb3ZlRXF1aXZhbGVu
dFByb3BlcnRpZXMoYmFzZVN0eWxlKTsKICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gbXV0YWJsZVN0eWxlID0gcmVzdWx0LT5zdHlsZSgpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVl
PiBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QgPSBleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNl
U3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwotICAgIGRp
ZmZUZXh0RGVjb3JhdGlvbnMobXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uLCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwotICAgIGRpZmZUZXh0
RGVjb3JhdGlvbnMobXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNv
cmF0aW9uc0luRWZmZWN0LCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOworICAg
IGRpZmZUZXh0RGVjb3JhdGlvbnMoKm11dGFibGVTdHlsZSwgQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbiwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKKyAgICBkaWZmVGV4dERl
Y29yYXRpb25zKCptdXRhYmxlU3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CiAKLSAgICBpZiAo
ZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpICYm
IGZvbnRXZWlnaHRJc0JvbGQobXV0YWJsZVN0eWxlLmdldCgpKSA9PSBmb250V2VpZ2h0SXNCb2xk
KGJhc2VTdHlsZSkpCisgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NT
UHJvcGVydHlGb250V2VpZ2h0KSAmJiBmb250V2VpZ2h0SXNCb2xkKCptdXRhYmxlU3R5bGUpID09
IGZvbnRXZWlnaHRJc0JvbGQoYmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogCi0gICAgaWYgKGV4dHJhY3RQcm9w
ZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlDb2xvcikgJiYgdGV4dENvbG9yRnJvbVN0
eWxlKG11dGFibGVTdHlsZS5nZXQoKSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKGJhc2VTdHlsZSkp
CisgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlDb2xv
cikgJiYgdGV4dENvbG9yRnJvbVN0eWxlKCptdXRhYmxlU3R5bGUpID09IHRleHRDb2xvckZyb21T
dHlsZShiYXNlU3R5bGUpKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5Q29sb3IpOwogCiAgICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHls
ZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pCi0gICAgICAgICYmIHRleHRBbGlnblJlc29sdmluZ1N0
YXJ0QW5kRW5kKG11dGFibGVTdHlsZS5nZXQoKSkgPT0gdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRB
bmRFbmQoYmFzZVN0eWxlKSkKKyAgICAgICAgJiYgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRF
bmQoKm11dGFibGVTdHlsZSkgPT0gdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoYmFzZVN0
eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRl
eHRBbGlnbik7CiAKLSAgICBpZiAoZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcikgJiYgYmFja2dyb3VuZENvbG9yRnJvbVN0eWxlKG11dGFi
bGVTdHlsZS5nZXQoKSkgPT0gYmFja2dyb3VuZENvbG9yRnJvbVN0eWxlKGJhc2VTdHlsZSkpCisg
ICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpICYmIGJhY2tncm91bmRDb2xvckZyb21TdHlsZSgqbXV0YWJsZVN0eWxlKSA9PSBi
YWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAKICAgICByZXR1
cm4gbXV0YWJsZVN0eWxlLnJlbGVhc2UoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVBh
c3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxl
UHJvcGVydGllcyogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCogYmFzZVN0eWxlKQor
UGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5
bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5bGUp
CiB7CiAgICAgcmV0dXJuIGV4dHJhY3RQcm9wZXJ0aWVzTm90SW4oc3R5bGVXaXRoUmVkdW5kYW50
UHJvcGVydGllcywgYmFzZVN0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5oCmluZGV4IDVlMTc2MjIuLjhlZTc1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuaApAQCAtMTU3LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVUZXh0
RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBzZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFu
dCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlKFQqIHN0eWxlVG9Db21wYXJl
LCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hv
dWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25zdDsKICAgICBib29sIGNvbmZsaWN0c1dp
dGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgRWRpdGluZ1N0eWxlKiBleHRy
YWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3BlcnR5SUQ+KiBjb25mbGljdGluZ1Byb3BlcnRpZXMp
IGNvbnN0OwogICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxlT2ZFbGVtZW50KFN0
eWxlZEVsZW1lbnQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwgUHJvcGVydGllc1RvSW5jbHVk
ZSk7CiAgICAgdm9pZCBtZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIENTU1Byb3Bl
cnR5T3ZlcnJpZGVNb2RlKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiBwcml2YXRlOgotICAgIHZvaWQgZXh0cmFj
dFRleHRTdHlsZXMoRG9jdW1lbnQqLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgYm9vbCBzaG91
bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7CisgICAgdm9pZCBleHRyYWN0VGV4dFN0eWxlcyhE
b2N1bWVudCosIE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBib29sIHNob3VsZFVzZUZpeGVkRm9u
dERlZmF1bHRTaXplKTsKIAogICAgIFN0cmluZyBtX2Nzc1N0eWxlOwogICAgIGJvb2wgbV9hcHBs
eUJvbGQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241580</attachid>
            <date>2014-11-14 04:44:12 -0800</date>
            <delta_ts>2014-11-25 06:46:27 -0800</delta_ts>
            <desc>Patch v5</desc>
            <filename>patch_v17.patch</filename>
            <type>text/plain</type>
            <size>21152</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZjdhMjU3Li43Mzk2OTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTQtMTEtMTQgIFRpYm9yIE1lc3phcm9zICA8dG1lc3phcm9zLnUtc3plZ2VkQHBhcnRu
ZXIuc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2lu
dGVycyBpbiBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzkxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9yRnJvbVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmJhY2tncm91bmRDb2xvckZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UHJvcGVydGllc05vdEluKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorCiAy
MDE0LTExLTE0ICBBbmRyemVqIEJhZG93c2tpICA8YS5iYWRvd3NraUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBBWDogSW1wcm92ZSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsIGlzQ29sdW1uSGVhZGVy
Q2VsbCBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRl
eCBmMGViNDhiLi5kNDkyZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCkBAIC0xMjgsMTggKzEyOCwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqCiAgICAgcmV0
dXJuIGNvcHlQcm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVy
dGllc1RvSW5jbHVkZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5
VmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEKQogewotICAgIHJldHVybiBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHBy
b3BlcnR5SUQpIDogUGFzc1JlZlB0cjxDU1NWYWx1ZT4oKTsKKyAgICByZXR1cm4gc3R5bGUuZ2V0
UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqIGNvbXB1
dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxlRXh0cmFjdG9yJiBjb21w
dXRlZFN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgcmV0dXJuIGNvbXB1
dGVkU3R5bGUtPnByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGNvbXB1dGVk
U3R5bGUucHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWludCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlEKQoraW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQmIHN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgaW50IGlk
ZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZh
bHVlSUQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdp
dGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4o
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5
bGUpOwogZW51bSBMZWdhY3lGb250U2l6ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwg
VXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQaXhlbFZhbHVlc01hdGNoIH07CiBzdGF0aWMgaW50IGxl
Z2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBi
b29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwog
c3RhdGljIGJvb2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqKTsKQEAgLTM2OSwx
MyArMzY5LDEzIEBAIHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFsdWUqIGNvbG9y
VmFsdWUpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiB0
ZXh0Q29sb3JGcm9tU3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29s
b3JGcm9tU3R5bGUoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGV4dHJh
Y3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKS5nZXQoKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3JG
cm9tU3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3JG
cm9tU3R5bGUoVCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGV4dHJhY3RQ
cm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuZ2V0KCkpOwog
fQpAQCAtNDA4LDcgKzQwOCw3IEBAIHN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRB
bmRFbmQoaW50IHRleHRBbGlnbiwgaW50IGRpcmVjdGlvbikKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoVCogc3R5bGUp
CitzdGF0aWMgaW50IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKFQmIHN0eWxlKQogewog
ICAgIHJldHVybiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChpZGVudGlmaWVyRm9yU3R5
bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pLCBpZGVudGlmaWVyRm9yU3R5
bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsKIH0KQEAgLTY0MiwxMyAr
NjQyLDEzIEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdT
dHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPm1fbXV0YWJs
ZVN0eWxlKQogICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICByZXR1cm4gdHJpU3Rh
dGVPZlN0eWxlKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSwgRG9Ob3RJZ25vcmVUZXh0T25s
eVByb3BlcnRpZXMpOworICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoKnN0eWxlLT5tX211dGFi
bGVTdHlsZSwgRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoVCogc3R5
bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyBzaG91bGRJZ25vcmVU
ZXh0T25seVByb3BlcnRpZXMpIGNvbnN0CitUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRl
T2ZTdHlsZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVz
IHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QKIHsKLSAgICBSZWZQdHI8TXV0
YWJsZVN0eWxlUHJvcGVydGllcz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211
dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVUb0NvbXBhcmUpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBkaWZmZXJlbmNlID0gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVT
dHlsZSwgc3R5bGVUb0NvbXBhcmUpOwogCiAgICAgaWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJv
cGVydGllcyA9PSBJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2Ut
PnJlbW92ZVByb3BlcnRpZXNJblNldCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5H
VEgodGV4dE9ubHlQcm9wZXJ0aWVzKSk7CkBAIC02NzQsNyArNjc0LDcgQEAgVHJpU3RhdGUgRWRp
dGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKSBjb25zdAogICAgIGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAg
ICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKSkg
ewogICAgICAgICAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUp
OwotICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKCZjb21w
dXRlZFN0eWxlLCBub2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRvTm90SWdub3Jl
VGV4dE9ubHlQcm9wZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0T25seVByb3BlcnRp
ZXMpOworICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKGNv
bXB1dGVkU3R5bGUsIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJZ25v
cmVUZXh0T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJvcGVy
dGllcyk7CiAgICAgICAgICAgICBpZiAobm9kZUlzU3RhcnQpIHsKICAgICAgICAgICAgICAgICBz
dGF0ZSA9IG5vZGVTdGF0ZTsKICAgICAgICAgICAgICAgICBub2RlSXNTdGFydCA9IGZhbHNlOwpA
QCAtODQ5LDcgKzg0OSw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpzdHlsZUlzUHJlc2VudEluQ29t
cHV0ZWRTdHlsZU9mTm9kZShOb2RlKiBub2RlKSBjb25zdAogICAgIGlmICghbV9tdXRhYmxlU3R5
bGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29t
cHV0ZWRTdHlsZShub2RlKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJs
ZVN0eWxlLmdldCgpLCAmY29tcHV0ZWRTdHlsZSktPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZ2V0
UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZSktPmlzRW1wdHko
KTsKIH0KIAogYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVp
dmFsZW50KGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50KQpAQCAtOTIwLDEwICs5MjAsMTAgQEAg
dm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uLCBTaG91bGRQcmVzZXJ2ZVdyaXQKIAogICAgIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVz
KCpzdHlsZUF0UG9zaXRpb24pOwogCi0gICAgaWYgKHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5k
RW5kKG1fbXV0YWJsZVN0eWxlLmdldCgpKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVu
ZChzdHlsZUF0UG9zaXRpb24pKQorICAgIGlmICh0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVu
ZCgqbV9tdXRhYmxlU3R5bGUpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKCpzdHls
ZUF0UG9zaXRpb24pKQogICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlUZXh0QWxpZ24pOwogCi0gICAgaWYgKHRleHRDb2xvckZyb21TdHlsZShtX211dGFi
bGVTdHlsZS5nZXQoKSkgPT0gdGV4dENvbG9yRnJvbVN0eWxlKHN0eWxlQXRQb3NpdGlvbikpCisg
ICAgaWYgKHRleHRDb2xvckZyb21TdHlsZSgqbV9tdXRhYmxlU3R5bGUpID09IHRleHRDb2xvckZy
b21TdHlsZSgqc3R5bGVBdFBvc2l0aW9uKSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogCiAgICAgaWYgKGhhc1RyYW5zcGFyZW50QmFj
a2dyb3VuZENvbG9yKG1fbXV0YWJsZVN0eWxlLmdldCgpKQpAQCAtMTE2MSw3ICsxMTYxLDcgQEAg
dm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChTdHlsZWRF
bGVtZW50KiBlbGVtZW50LCBOb2RlKgogICAgIC8vIDEuIFJlbW92ZSBzdHlsZSBmcm9tIG1hdGNo
ZWQgcnVsZXMgYmVjYXVzZSBzdHlsZSByZW1haW4gd2l0aG91dCByZXBlYXRpbmcgaXQgaW4gaW5s
aW5lIHN0eWxlIGRlY2xhcmF0aW9uCiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IHN0eWxlRnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQo
ZWxlbWVudCwgU3R5bGVSZXNvbHZlcjo6QWxsQnV0RW1wdHlDU1NSdWxlcyk7CiAgICAgaWYgKHN0
eWxlRnJvbU1hdGNoZWRSdWxlcyAmJiAhc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0
eWxlLmdldCgpLCBzdHlsZUZyb21NYXRjaGVkUnVsZXMuZ2V0KCkpOworICAgICAgICBtX211dGFi
bGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxlU3R5bGUsICpzdHlsZUZyb21N
YXRjaGVkUnVsZXMpOwogCiAgICAgLy8gMi4gUmVtb3ZlIHN0eWxlIHByZXNlbnQgaW4gY29udGV4
dCBhbmQgbm90IG92ZXJyaWRlbiBieSBtYXRjaGVkIHJ1bGVzLgogICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IGNvbXB1dGVkU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShjb250ZXh0LCBFZGl0
aW5nUHJvcGVydGllc0luRWZmZWN0KTsKQEAgLTExNzAsMTUgKzExNzAsMTUgQEAgdm9pZCBFZGl0
aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChTdHlsZWRFbGVtZW50KiBl
bGVtZW50LCBOb2RlKgogICAgICAgICAgICAgY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBDU1NWYWx1ZVRyYW5zcGFy
ZW50KTsKIAogICAgICAgICByZW1vdmVQcm9wZXJ0aWVzSW5TdHlsZShjb21wdXRlZFN0eWxlLT5t
X211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKLSAgICAg
ICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0
KCksIGNvbXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKTsKKyAgICAgICAgbV9tdXRh
YmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCAqY29tcHV0ZWRT
dHlsZS0+bV9tdXRhYmxlU3R5bGUpOwogICAgIH0KIAogICAgIC8vIDMuIElmIHRoaXMgZWxlbWVu
dCBpcyBhIHNwYW4gYW5kIGhhcyBkaXNwbGF5OiBpbmxpbmUgb3IgZmxvYXQ6IG5vbmUsIHJlbW92
ZSB0aGVtIHVubGVzcyB0aGV5IGFyZSBvdmVycmlkZW4gYnkgcnVsZXMuCiAgICAgLy8gVGhlc2Ug
cnVsZXMgYXJlIGFkZGVkIGJ5IHNlcmlhbGl6YXRpb24gY29kZSB0byB3cmFwIHRleHQgbm9kZXMu
CiAgICAgaWYgKGlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZShlbGVtZW50
KSkgewotICAgICAgICBpZiAoIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eURpc3BsYXkpICYmIGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KG1f
bXV0YWJsZVN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eURpc3BsYXkpID09IENTU1ZhbHVlSW5saW5l
KQorICAgICAgICBpZiAoIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eURpc3BsYXkpICYmIGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KCptX211
dGFibGVTdHlsZSwgQ1NTUHJvcGVydHlEaXNwbGF5KSA9PSBDU1NWYWx1ZUlubGluZSkKICAgICAg
ICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXkp
OwotICAgICAgICBpZiAoIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZsb2F0KSAmJiBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShtX211dGFi
bGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlGbG9hdCkgPT0gQ1NTVmFsdWVOb25lKQorICAgICAg
ICBpZiAoIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZsb2F0KSAmJiBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSgqbV9tdXRhYmxlU3R5bGUs
IENTU1Byb3BlcnR5RmxvYXQpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIG1fbXV0YWJs
ZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0KTsKICAgICB9CiB9CkBAIC0x
NDA1LDExICsxNDA1LDExIEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUq
IHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgQ29tcHV0ZWRTdHlsZUV4dHJh
Y3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwogCiAgICAgLy8gRklYTUU6IHRha2UgY2FyZSBvZiBi
YWNrZ3JvdW5kLWNvbG9yIGluIGVmZmVjdAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBtdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4oc3R5bGUtPnN0eWxlKCksICZj
b21wdXRlZFN0eWxlKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJs
ZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKCpzdHlsZS0+c3R5bGUoKSwgY29tcHV0ZWRTdHls
ZSk7CiAKICAgICByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxl
LmdldCgpKTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHls
ZVdpdGhDU1MoKSkKLSAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoZG9jdW1lbnQsIG11dGFibGVT
dHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS51c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSgpKTsKKyAg
ICAgICAgZXh0cmFjdFRleHRTdHlsZXMoZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVk
U3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKICAgICAvLyBDaGFuZ2luZyB0aGUg
d2hpdGVzcGFjZSBzdHlsZSBpbiBhIHRhYiBzcGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50
byBhIHNwYWNlLgogICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSB8fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCkBA
IC0xNDI0LDM0ICsxNDI0LDMyIEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5
bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgbV9jc3NTdHlsZSA9IG11
dGFibGVTdHlsZS0+YXNUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiB9CiAKLXN0YXRpYyB2b2lk
IHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUs
IGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29yYXRpb24sIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCkKK3N0YXRpYyB2b2lkIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYgc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29yYXRp
b24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBpZiAobmV3VGV4dERlY29yYXRp
b24tPmxlbmd0aCgpKQotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgbmV3
VGV4dERlY29yYXRpb24tPmNzc1RleHQoKSwgc3R5bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQocHJv
cGVydHlJRCkpOworICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdUZXh0
RGVjb3JhdGlvbi0+Y3NzVGV4dCgpLCBzdHlsZS5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5
SUQpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gdGV4dC1kZWNvcmF0aW9uOiBub25lIGlzIHJl
ZHVuZGFudCBzaW5jZSBpdCBkb2VzIG5vdCByZW1vdmUgYW55IHRleHQgZGVjb3JhdGlvbnMuCi0g
ICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgc3R5bGUu
cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAgfQogfQogCi12b2lkIFN0eWxlQ2hhbmdl
OjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9jdW1lbnQsIE11dGFibGVTdHlsZVByb3Bl
cnRpZXMqIHN0eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKQordm9pZCBT
dHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6
ZSkKIHsKLSAgICBBU1NFUlQoc3R5bGUpOwotCiAgICAgaWYgKGlkZW50aWZpZXJGb3JTdHlsZVBy
b3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpID09IENTU1ZhbHVlQm9sZCkgewot
ICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKKyAg
ICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKICAgICAg
ICAgbV9hcHBseUJvbGQgPSB0cnVlOwogICAgIH0KIAogICAgIGludCBmb250U3R5bGUgPSBpZGVu
dGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlGb250U3R5bGUpOwogICAg
IGlmIChmb250U3R5bGUgPT0gQ1NTVmFsdWVJdGFsaWMgfHwgZm9udFN0eWxlID09IENTU1ZhbHVl
T2JsaXF1ZSkgewotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U3R5bGUpOworICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHls
ZSk7CiAgICAgICAgIG1fYXBwbHlJdGFsaWMgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEFzc3Vt
aW5nIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyBoYXMgYmVlbiBjYWxsZWQsIHRo
ZXJlIHNob3VsZCBub3QgYmUgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdAogICAg
IC8vIEZ1cnRoZXJtb3JlLCB0ZXh0LWRlY29yYXRpb246IG5vbmUgaGFzIGJlZW4gdHJpbW1lZCBz
byB0aGF0IHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0eSBpcyBhbHdheXMgYSBDU1NWYWx1ZUxpc3Qu
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb24pOwogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHRleHREZWNvcmF0aW9u
LmdldCgpKSkgewogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHVuZGVybGluZSA9
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7
CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CkBAIC0x
NDY5LDM5ICsxNDY3LDM5IEBAIHZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERv
Y3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyoKICAgICBpbnQgdmVydGlj
YWxBbGlnbiA9IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KHN0eWxlLCBDU1NQcm9wZXJ0eVZl
cnRpY2FsQWxpZ24pOwogICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewogICAgIGNhc2UgQ1NT
VmFsdWVTdWI6Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZlcnRp
Y2FsQWxpZ24pOworICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZlcnRp
Y2FsQWxpZ24pOwogICAgICAgICBtX2FwcGx5U3Vic2NyaXB0ID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDU1NWYWx1ZVN1cGVyOgotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKKyAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKICAgICAgICAgbV9hcHBseVN1cGVyc2NyaXB0
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpKSB7CisgICAgaWYgKHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpIHsKICAgICAgICAgbV9hcHBseUZvbnRDb2xv
ciA9IENvbG9yKHRleHRDb2xvckZyb21TdHlsZShzdHlsZSkpLnNlcmlhbGl6ZWQoKTsKLSAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOworICAgICAgICBzdHls
ZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICB9CiAKLSAgICBtX2FwcGx5
Rm9udEZhY2UgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkp
OworICAgIG1fYXBwbHlGb250RmFjZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5KTsKICAgICAvLyBSZW1vdmUgc2luZ2xlIHF1b3RlcyBmb3IgT3V0bG9vayAy
MDA3IGNvbXBhdGliaWxpdHkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzk0NDgKICAgICBtX2FwcGx5Rm9udEZhY2UucmVwbGFjZVdpdGhMaXRlcmFsKCdcJycs
ICIiKTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsK
KyAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogCi0gICAg
aWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9udFNpemUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRTaXplKSkgeworICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRT
aXplID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKSkgewog
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFNpemUpKQotICAgICAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBt
YWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1dCBubyBmb250IHNpemUuCisgICAgICAgICAgICBz
dHlsZS5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFrZSBz
ZW5zZSBvZiB0aGUgbnVtYmVyLiBQdXQgbm8gZm9udCBzaXplLgogICAgICAgICBlbHNlIGlmIChp
bnQgbGVnYWN5Rm9udFNpemUgPSBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwg
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZvbnRTaXplLmdldCgpKSwKICAgICAgICAgICAg
ICAgICBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5
SWZQaXhlbFZhbHVlc01hdGNoKSkgewogICAgICAgICAgICAgbV9hcHBseUZvbnRTaXplID0gU3Ry
aW5nOjpudW1iZXIobGVnYWN5Rm9udFNpemUpOwotICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOworICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRp
YyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUs
IENTU1Byb3BlcnR5SUQgcHJvcGVydElELCBDU1NWYWx1ZSogcmVmVGV4dERlY29yYXRpb24pCitz
dGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0
eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9u
KQogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29y
YXRpb24gPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRJRCk7CiAgICAgaWYgKCFp
czxDU1NWYWx1ZUxpc3Q+KHRleHREZWNvcmF0aW9uLmdldCgpKSB8fCAhaXM8Q1NTVmFsdWVMaXN0
PihyZWZUZXh0RGVjb3JhdGlvbikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTUxNCwxNCArMTUx
MiwxNCBAQCBzdGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHBybwogICAgIHNldFRleHREZWNvcmF0aW9uUHJv
cGVydHkoc3R5bGUsIG5ld1RleHREZWNvcmF0aW9uLmdldCgpLCBwcm9wZXJ0SUQpOwogfQogCi1z
dGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKENTU1ZhbHVlKiBmb250V2VpZ2h0KQorc3RhdGlj
IGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NWYWx1ZSYgZm9udFdlaWdodCkKIHsKICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPihmb250V2VpZ2h0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRoZXJlIGFyZSBv
bmx5IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQuCiAgICAgLy8g
Q29sbGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNlIHR3byBzdGF0
ZXMgZm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRjaCAoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICBjYXNlIENTU1ZhbHVlMTAwOgogICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgogICAgICAgICBj
YXNlIENTU1ZhbHVlMzAwOgpAQCAtMTU0NCw0MSArMTU0Miw0MSBAQCBzdGF0aWMgYm9vbCBmb250
V2VpZ2h0SXNCb2xkKENTU1ZhbHVlKiBmb250V2VpZ2h0KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChUKiBzdHlsZSkKK3N0YXRpYyBib29s
IGZvbnRXZWlnaHRJc0JvbGQoVCYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGZvbnRXZWlnaHRJc0Jv
bGQoZXh0cmFjdFByb3BlcnR5VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0
KCkpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IGV4dHJhY3RQcm9wZXJ0eVZh
bHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworICAgIHJldHVybiBmb250V2VpZ2h0
ID8gZm9udFdlaWdodElzQm9sZCgqZm9udFdlaWdodCkgOiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXN0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4
dHJhY3RQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpCitzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBleHRyYWN0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVX
aXRoUmVkdW5kYW50UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKQogewotICAgIEFTU0VSVChzdHls
ZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiByZXN1
bHQgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsK
LSAgICByZXN1bHQtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKCpiYXNlU3R5bGUpOworICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHJlc3VsdCA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCZzdHls
ZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKKyAgICByZXN1bHQtPnJlbW92ZUVxdWl2YWxlbnRQ
cm9wZXJ0aWVzKGJhc2VTdHlsZSk7CiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IG11dGFibGVTdHlsZSA9IHJlc3VsdC0+c3R5bGUoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
YmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0ID0gZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0
eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICBkaWZm
VGV4dERlY29yYXRpb25zKG11dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbiwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKLSAgICBkaWZmVGV4dERl
Y29yYXRpb25zKG11dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKKyAgICBk
aWZmVGV4dERlY29yYXRpb25zKCptdXRhYmxlU3R5bGUsIENTU1Byb3BlcnR5VGV4dERlY29yYXRp
b24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CisgICAgZGlmZlRleHREZWNv
cmF0aW9ucygqbXV0YWJsZVN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0lu
RWZmZWN0LCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwogCi0gICAgaWYgKGV4
dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSAmJiBm
b250V2VpZ2h0SXNCb2xkKG11dGFibGVTdHlsZS5nZXQoKSkgPT0gZm9udFdlaWdodElzQm9sZChi
YXNlU3R5bGUpKQorICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1By
b3BlcnR5Rm9udFdlaWdodCkgJiYgZm9udFdlaWdodElzQm9sZCgqbXV0YWJsZVN0eWxlKSA9PSBm
b250V2VpZ2h0SXNCb2xkKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKIAotICAgIGlmIChleHRyYWN0UHJvcGVy
dHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Q29sb3IpICYmIHRleHRDb2xvckZyb21TdHls
ZShtdXRhYmxlU3R5bGUuZ2V0KCkpID09IHRleHRDb2xvckZyb21TdHlsZShiYXNlU3R5bGUpKQor
ICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Q29sb3Ip
ICYmIHRleHRDb2xvckZyb21TdHlsZSgqbXV0YWJsZVN0eWxlKSA9PSB0ZXh0Q29sb3JGcm9tU3R5
bGUoYmFzZVN0eWxlKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUNvbG9yKTsKIAogICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUs
IENTU1Byb3BlcnR5VGV4dEFsaWduKQotICAgICAgICAmJiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFy
dEFuZEVuZChtdXRhYmxlU3R5bGUuZ2V0KCkpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5k
RW5kKGJhc2VTdHlsZSkpCisgICAgICAgICYmIHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5k
KCptdXRhYmxlU3R5bGUpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKGJhc2VTdHls
ZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0
QWxpZ24pOwogCi0gICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpICYmIGJhY2tncm91bmRDb2xvckZyb21TdHlsZShtdXRhYmxl
U3R5bGUuZ2V0KCkpID09IGJhY2tncm91bmRDb2xvckZyb21TdHlsZShiYXNlU3R5bGUpKQorICAg
IGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSAmJiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoKm11dGFibGVTdHlsZSkgPT0gYmFj
a2dyb3VuZENvbG9yRnJvbVN0eWxlKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgcmV0dXJu
IG11dGFibGVTdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1QYXNz
UmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJhc2VTdHlsZSkKK1Bh
c3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxl
UHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKQog
ewogICAgIHJldHVybiBleHRyYWN0UHJvcGVydGllc05vdEluKHN0eWxlV2l0aFJlZHVuZGFudFBy
b3BlcnRpZXMsIGJhc2VTdHlsZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
aAppbmRleCA1ZTE3NjIyLi44ZWU3NTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlVGV4dEZp
bGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgc2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQg
PSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShUKiBzdHlsZVRvQ29tcGFyZSwg
U2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCYgc3R5bGVUb0NvbXBhcmUsIFNob3Vs
ZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRo
SW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFj
dGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBj
b25zdDsKICAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHls
ZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUp
OwogICAgIHZvaWQgbWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0
eU92ZXJyaWRlTW9kZSk7CkBAIC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogcHJpdmF0ZToKLSAgICB2b2lkIGV4dHJhY3RU
ZXh0U3R5bGVzKERvY3VtZW50KiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGJvb2wgc2hvdWxk
VXNlRml4ZWRGb250RGVmYXVsdFNpemUpOworICAgIHZvaWQgZXh0cmFjdFRleHRTdHlsZXMoRG9j
dW1lbnQqLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnRE
ZWZhdWx0U2l6ZSk7CiAKICAgICBTdHJpbmcgbV9jc3NTdHlsZTsKICAgICBib29sIG1fYXBwbHlC
b2xkOwo=
</data>
<flag name="review"
          id="266442"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242194</attachid>
            <date>2014-11-25 06:46:27 -0800</date>
            <delta_ts>2014-12-02 09:58:52 -0800</delta_ts>
            <desc>Patch v6</desc>
            <filename>patch_v21.patch</filename>
            <type>text/plain</type>
            <size>21191</size>
            <attacher name="Tibor Mészáros">mtiborinf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNjVjNzNmLi4xNjIzNzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTQtMTEtMjUgIFRpYm9yIE1lc3phcm9zICA8dG1lc3phcm9zLnUtc3plZ2VkQHBhcnRu
ZXIuc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2lu
dGVycyBpbiBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzkxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRlbnRpZmllckZv
clN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9yRnJvbVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmJhY2tncm91bmRDb2xvckZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UHJvcGVydGllc05vdEluKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorCiAy
MDE0LTExLTI0ICBFdmEgQmFsYXpzZmFsdmkgIDxldmFiLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgRml4IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIGluIEJpcXVhZC5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBmMGViNDhiLi5l
ZjFjNDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xMjgs
MTggKzEyOCwxOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBj
b3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqCiAgICAgcmV0dXJuIGNvcHlQcm9w
ZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVydGllc1RvSW5jbHVk
ZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1
ZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZXh0cmFjdFByb3BlcnR5VmFsdWUoY29uc3Qg
U3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewotICAg
IHJldHVybiBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpIDog
UGFzc1JlZlB0cjxDU1NWYWx1ZT4oKTsKKyAgICByZXR1cm4gc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJh
Y3RQcm9wZXJ0eVZhbHVlKENvbXB1dGVkU3R5bGVFeHRyYWN0b3IqIGNvbXB1dGVkU3R5bGUsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRy
YWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxlRXh0cmFjdG9yJiBjb21wdXRlZFN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUtPnBy
b3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUucHJvcGVy
dHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWludCBpZGVu
dGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
KQoraW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQmIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGV4dHJhY3RQcm9w
ZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZS5nZXQoKSkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgaW50IGlkZW50aWZpZXJGb3JT
dHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0
cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0
aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5bGUpOwogZW51bSBM
ZWdhY3lGb250U2l6ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwgVXNlTGVnYWN5Rm9u
dFNpemVPbmx5SWZQaXhlbFZhbHVlc01hdGNoIH07CiBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXpl
RnJvbUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIHNob3VsZFVz
ZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwogc3RhdGljIGJvb2wg
aXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqKTsKQEAgLTM2OSwxMyArMzY5LDEzIEBA
IHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFsdWUqIGNvbG9yVmFsdWUpCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29sb3JGcm9t
U3R5bGUoVCogc3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiB0ZXh0Q29sb3JGcm9tU3R5bGUo
VCYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGV4dHJhY3RQcm9wZXJ0eVZh
bHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKS5nZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCog
c3R5bGUpCitzdGF0aWMgaW5saW5lIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3JGcm9tU3R5bGUoVCYg
c3R5bGUpCiB7CiAgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKGV4dHJhY3RQcm9wZXJ0eVZhbHVl
KHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuZ2V0KCkpOwogfQpAQCAtNDA4LDcg
KzQwOCw3IEBAIHN0YXRpYyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoaW50IHRl
eHRBbGlnbiwgaW50IGRpcmVjdGlvbikKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBpbnQgdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoVCogc3R5bGUpCitzdGF0aWMgaW50
IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKFQmIHN0eWxlKQogewogICAgIHJldHVybiB0
ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShz
dHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pLCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShz
dHlsZSwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsKIH0KQEAgLTY0MiwxMyArNjQyLDE2IEBAIFRy
aVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUp
IGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPm1fbXV0YWJsZVN0eWxlKQogICAg
ICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKLSAgICByZXR1cm4gdHJpU3RhdGVPZlN0eWxlKHN0
eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSwgRG9Ob3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMp
OworICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoKnN0eWxlLT5tX211dGFibGVTdHlsZSwgRG9O
b3RJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
VHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoVCogc3R5bGVUb0NvbXBhcmUs
IFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyBzaG91bGRJZ25vcmVUZXh0T25seVByb3Bl
cnRpZXMpIGNvbnN0CitUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShUJiBz
dHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHNob3VsZElnbm9y
ZVRleHRPbmx5UHJvcGVydGllcykgY29uc3QKIHsKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJv
cGVydGllcz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5n
ZXQoKSwgc3R5bGVUb0NvbXBhcmUpOworICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgICAg
IHJldHVybiBUcnVlVHJpU3RhdGU7CisKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gZGlmZmVyZW5jZSA9IGdldFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxlU3R5bGUsIHN0eWxl
VG9Db21wYXJlKTsKIAogICAgIGlmIChzaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgPT0g
SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKQogICAgICAgICBkaWZmZXJlbmNlLT5yZW1vdmVQcm9w
ZXJ0aWVzSW5TZXQodGV4dE9ubHlQcm9wZXJ0aWVzLCBXVEZfQVJSQVlfTEVOR1RIKHRleHRPbmx5
UHJvcGVydGllcykpOwpAQCAtNjc0LDcgKzY3Nyw3IEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6
dHJpU3RhdGVPZlN0eWxlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgp
OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAg
ICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKLSAgICAgICAg
ICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZSgmY29tcHV0ZWRTdHlsZSwg
bm9kZS0+aXNUZXh0Tm9kZSgpID8gRWRpdGluZ1N0eWxlOjpEb05vdElnbm9yZVRleHRPbmx5UHJv
cGVydGllcyA6IEVkaXRpbmdTdHlsZTo6SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZShjb21wdXRlZFN0eWxl
LCBub2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRvTm90SWdub3JlVGV4dE9ubHlQ
cm9wZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwogICAg
ICAgICAgICAgaWYgKG5vZGVJc1N0YXJ0KSB7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBub2Rl
U3RhdGU7CiAgICAgICAgICAgICAgICAgbm9kZUlzU3RhcnQgPSBmYWxzZTsKQEAgLTg0OSw3ICs4
NTIsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVP
Zk5vZGUoTm9kZSogbm9kZSkgY29uc3QKICAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUo
bm9kZSk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQo
KSwgJmNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGdldFByb3BlcnRpZXNO
b3RJbigqbV9tdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CiB9CiAKIGJv
b2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChjb25z
dCBIVE1MRWxlbWVudCogZWxlbWVudCkKQEAgLTkyMCwxMCArOTIzLDEwIEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgU2hvdWxk
UHJlc2VydmVXcml0CiAKICAgICByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcygqc3R5bGVBdFBv
c2l0aW9uKTsKIAotICAgIGlmICh0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChtX211dGFi
bGVTdHlsZS5nZXQoKSkgPT0gdGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoc3R5bGVBdFBv
c2l0aW9uKSkKKyAgICBpZiAodGV4dEFsaWduUmVzb2x2aW5nU3RhcnRBbmRFbmQoKm1fbXV0YWJs
ZVN0eWxlKSA9PSB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZCgqc3R5bGVBdFBvc2l0aW9u
KSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4
dEFsaWduKTsKIAotICAgIGlmICh0ZXh0Q29sb3JGcm9tU3R5bGUobV9tdXRhYmxlU3R5bGUuZ2V0
KCkpID09IHRleHRDb2xvckZyb21TdHlsZShzdHlsZUF0UG9zaXRpb24pKQorICAgIGlmICh0ZXh0
Q29sb3JGcm9tU3R5bGUoKm1fbXV0YWJsZVN0eWxlKSA9PSB0ZXh0Q29sb3JGcm9tU3R5bGUoKnN0
eWxlQXRQb3NpdGlvbikpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUNvbG9yKTsKIAogICAgIGlmIChoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xv
cihtX211dGFibGVTdHlsZS5nZXQoKSkKQEAgLTExNjEsNyArMTE2NCw3IEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgTm9kZSoKICAgICAvLyAxLiBSZW1vdmUgc3R5bGUgZnJvbSBtYXRjaGVkIHJ1bGVzIGJl
Y2F1c2Ugc3R5bGUgcmVtYWluIHdpdGhvdXQgcmVwZWF0aW5nIGl0IGluIGlubGluZSBzdHlsZSBk
ZWNsYXJhdGlvbgogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21N
YXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIFN0
eWxlUmVzb2x2ZXI6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIGlmIChzdHlsZUZyb21NYXRj
aGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+aXNFbXB0eSgpKQotICAgICAgICBt
X211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwg
c3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBn
ZXRQcm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCAqc3R5bGVGcm9tTWF0Y2hlZFJ1bGVz
KTsKIAogICAgIC8vIDIuIFJlbW92ZSBzdHlsZSBwcmVzZW50IGluIGNvbnRleHQgYW5kIG5vdCBv
dmVycmlkZW4gYnkgbWF0Y2hlZCBydWxlcy4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb21w
dXRlZFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoY29udGV4dCwgRWRpdGluZ1Byb3BlcnRp
ZXNJbkVmZmVjdCk7CkBAIC0xMTcwLDE1ICsxMTczLDE1IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpy
ZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgTm9k
ZSoKICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGUtPm1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ1NTVmFsdWVUcmFuc3BhcmVudCk7CiAKICAg
ICAgICAgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoY29tcHV0ZWRTdHlsZS0+bV9tdXRhYmxlU3R5
bGUuZ2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy5nZXQoKSk7Ci0gICAgICAgIG1fbXV0YWJs
ZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRl
ZFN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSk7CisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0g
Z2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgKmNvbXB1dGVkU3R5bGUtPm1fbXV0
YWJsZVN0eWxlKTsKICAgICB9CiAKICAgICAvLyAzLiBJZiB0aGlzIGVsZW1lbnQgaXMgYSBzcGFu
IGFuZCBoYXMgZGlzcGxheTogaW5saW5lIG9yIGZsb2F0OiBub25lLCByZW1vdmUgdGhlbSB1bmxl
c3MgdGhleSBhcmUgb3ZlcnJpZGVuIGJ5IHJ1bGVzLgogICAgIC8vIFRoZXNlIHJ1bGVzIGFyZSBh
ZGRlZCBieSBzZXJpYWxpemF0aW9uIGNvZGUgdG8gd3JhcCB0ZXh0IG5vZGVzLgogICAgIGlmIChp
c1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCkpIHsKLSAgICAg
ICAgaWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlEaXNwbGF5KSAmJiBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShtX211dGFibGVTdHls
ZS5nZXQoKSwgQ1NTUHJvcGVydHlEaXNwbGF5KSA9PSBDU1NWYWx1ZUlubGluZSkKKyAgICAgICAg
aWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlEaXNwbGF5KSAmJiBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSgqbV9tdXRhYmxlU3R5bGUs
IENTU1Byb3BlcnR5RGlzcGxheSkgPT0gQ1NTVmFsdWVJbmxpbmUpCiAgICAgICAgICAgICBtX211
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5KTsKLSAgICAgICAg
aWYgKCFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGbG9hdCkgJiYgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkobV9tdXRhYmxlU3R5bGUuZ2V0
KCksIENTU1Byb3BlcnR5RmxvYXQpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgaWYgKCFzdHls
ZUZyb21NYXRjaGVkUnVsZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGbG9hdCkg
JiYgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoKm1fbXV0YWJsZVN0eWxlLCBDU1NQcm9wZXJ0
eUZsb2F0KSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGbG9hdCk7CiAgICAgfQogfQpAQCAtMTQwNSwxMSArMTQw
OCwxMSBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0
ZWRTdHlsZShub2RlKTsKIAogICAgIC8vIEZJWE1FOiB0YWtlIGNhcmUgb2YgYmFja2dyb3VuZC1j
b2xvciBpbiBlZmZlY3QKLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbXV0YWJs
ZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgpLCAmY29tcHV0ZWRTdHls
ZSk7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IGdl
dFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpOwogCiAgICAg
cmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7CiAg
ICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCkp
Ci0gICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKGRvY3VtZW50LCBtdXRhYmxlU3R5bGUuZ2V0KCks
IGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CisgICAgICAgIGV4dHJh
Y3RUZXh0U3R5bGVzKGRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlLnVzZUZp
eGVkRm9udERlZmF1bHRTaXplKCkpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHdoaXRlc3BhY2Ug
c3R5bGUgaW4gYSB0YWIgc3BhbiB3b3VsZCBjb2xsYXBzZSB0aGUgdGFiIGludG8gYSBzcGFjZS4K
ICAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgfHwg
aXNUYWJTcGFuTm9kZSgocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpKQpAQCAtMTQyNCwzNCAr
MTQyNywzMiBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwg
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIG1fY3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUt
PmFzVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRUZXh0RGVj
b3JhdGlvblByb3BlcnR5KE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBjb25zdCBDU1NW
YWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitz
dGF0aWMgdm9pZCBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmIHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5sZW5ndGgo
KSkKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1RleHREZWNvcmF0
aW9uLT5jc3NUZXh0KCksIHN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5SUQpKTsK
KyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgbmV3VGV4dERlY29yYXRpb24t
PmNzc1RleHQoKSwgc3R5bGUucHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpcyByZWR1bmRhbnQgc2lu
Y2UgaXQgZG9lcyBub3QgcmVtb3ZlIGFueSB0ZXh0IGRlY29yYXRpb25zLgotICAgICAgICBzdHls
ZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5SUQpOwogICAgIH0KIH0KIAotdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRl
eHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkKK3ZvaWQgU3R5bGVDaGFuZ2U6
OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYgc3R5bGUsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpCiB7Ci0gICAg
QVNTRVJUKHN0eWxlKTsKLQogICAgIGlmIChpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHls
ZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSA9PSBDU1NWYWx1ZUJvbGQpIHsKLSAgICAgICAgc3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CisgICAgICAgIHN0eWxl
LnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAgICAgICAgIG1fYXBwbHlC
b2xkID0gdHJ1ZTsKICAgICB9CiAKICAgICBpbnQgZm9udFN0eWxlID0gaWRlbnRpZmllckZvclN0
eWxlUHJvcGVydHkoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKICAgICBpZiAoZm9udFN0
eWxlID09IENTU1ZhbHVlSXRhbGljIHx8IGZvbnRTdHlsZSA9PSBDU1NWYWx1ZU9ibGlxdWUpIHsK
LSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKKyAg
ICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUpOwogICAgICAg
ICBtX2FwcGx5SXRhbGljID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBBc3N1bWluZyByZWNvbmNp
bGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMgaGFzIGJlZW4gY2FsbGVkLCB0aGVyZSBzaG91bGQg
bm90IGJlIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICAvLyBGdXJ0aGVy
bW9yZSwgdGV4dC1kZWNvcmF0aW9uOiBub25lIGhhcyBiZWVuIHRyaW1tZWQgc28gdGhhdCB0ZXh0
LWRlY29yYXRpb24gcHJvcGVydHkgaXMgYWx3YXlzIGEgQ1NTVmFsdWVMaXN0LgotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNv
cmF0aW9uID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uKTsKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkpIHsK
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwpAQCAtMTQ2OSwzOSArMTQ3
MCwzOSBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9j
dW1lbnQsIE11dGFibGVTdHlsZVByb3BlcnRpZXMqCiAgICAgaW50IHZlcnRpY2FsQWxpZ24gPSBp
ZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShzdHlsZSwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWdu
KTsKICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKICAgICBjYXNlIENTU1ZhbHVlU3ViOgot
ICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsK
KyAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsK
ICAgICAgICAgbV9hcHBseVN1YnNjcmlwdCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTVmFsdWVTdXBlcjoKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3Bl
cnR5VmVydGljYWxBbGlnbik7CisgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1Byb3Bl
cnR5VmVydGljYWxBbGlnbik7CiAgICAgICAgIG1fYXBwbHlTdXBlcnNjcmlwdCA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUNvbG9yKSkgeworICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Q29sb3IpKSB7CiAgICAgICAgIG1fYXBwbHlGb250Q29sb3IgPSBDb2xvcih0
ZXh0Q29sb3JGcm9tU3R5bGUoc3R5bGUpKS5zZXJpYWxpemVkKCk7Ci0gICAgICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgc3R5bGUucmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgfQogCi0gICAgbV9hcHBseUZvbnRGYWNlID0g
c3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKKyAgICBtX2Fw
cGx5Rm9udEZhY2UgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWls
eSk7CiAgICAgLy8gUmVtb3ZlIHNpbmdsZSBxdW90ZXMgZm9yIE91dGxvb2sgMjAwNyBjb21wYXRp
YmlsaXR5LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5NDQ4
CiAgICAgbV9hcHBseUZvbnRGYWNlLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXCcnLCAiIik7Ci0gICAg
c3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CisgICAgc3R5bGUu
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKIAotICAgIGlmIChSZWZQdHI8
Q1NTVmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250U2l6ZSkpIHsKKyAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250U2l6ZSA9IHN0eWxl
LmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKICAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRTaXplKSkKLSAgICAgICAgICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFrZSBzZW5zZSBv
ZiB0aGUgbnVtYmVyLiBQdXQgbm8gZm9udCBzaXplLgorICAgICAgICAgICAgc3R5bGUucmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7IC8vIENhbid0IG1ha2Ugc2Vuc2Ugb2YgdGhl
IG51bWJlci4gUHV0IG5vIGZvbnQgc2l6ZS4KICAgICAgICAgZWxzZSBpZiAoaW50IGxlZ2FjeUZv
bnRTaXplID0gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAgICAgICAgICAgc2hvdWxk
VXNlRml4ZWRGb250RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1
ZXNNYXRjaCkpIHsKICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9IFN0cmluZzo6bnVtYmVy
KGxlZ2FjeUZvbnRTaXplKTsKLSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTaXplKTsKKyAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFNpemUpOwogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBkaWZm
VGV4dERlY29yYXRpb25zKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9uKQorc3RhdGljIHZvaWQg
ZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKIHsKLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcGVydElEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOwogICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4ocmVmVGV4dERl
Y29yYXRpb24pKQogICAgICAgICByZXR1cm47CiAKQEAgLTE1MTQsMTQgKzE1MTUsMTQgQEAgc3Rh
dGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm8KICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxl
LCBuZXdUZXh0RGVjb3JhdGlvbi5nZXQoKSwgcHJvcGVydElEKTsKIH0KIAotc3RhdGljIGJvb2wg
Zm9udFdlaWdodElzQm9sZChDU1NWYWx1ZSogZm9udFdlaWdodCkKK3N0YXRpYyBib29sIGZvbnRX
ZWlnaHRJc0JvbGQoQ1NTVmFsdWUmIGZvbnRXZWlnaHQpCiB7CiAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oZm9udFdlaWdodCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IEJlY2F1c2UgYiB0YWcgY2FuIG9ubHkgYm9sZCB0ZXh0LCB0aGVyZSBhcmUgb25seSB0d28gc3Rh
dGVzIGluIHBsYWluIGh0bWw6IGJvbGQgYW5kIG5vdCBib2xkLgogICAgIC8vIENvbGxhcHNlIGFs
bCBvdGhlciB2YWx1ZXMgdG8gZWl0aGVyIG9uZSBvZiB0aGVzZSB0d28gc3RhdGVzIGZvciBlZGl0
aW5nIHB1cnBvc2VzLgotICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpm
b250V2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihmb250V2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NW
YWx1ZTEwMDoKICAgICAgICAgY2FzZSBDU1NWYWx1ZTIwMDoKICAgICAgICAgY2FzZSBDU1NWYWx1
ZTMwMDoKQEAgLTE1NDQsNDEgKzE1NDUsNDEgQEAgc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9s
ZChDU1NWYWx1ZSogZm9udFdlaWdodCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBib29sIGZvbnRXZWlnaHRJc0JvbGQoVCogc3R5bGUpCitzdGF0aWMgYm9vbCBmb250V2VpZ2h0
SXNCb2xkKFQmIHN0eWxlKQogewotICAgIHJldHVybiBmb250V2VpZ2h0SXNCb2xkKGV4dHJhY3RQ
cm9wZXJ0eVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBleHRyYWN0UHJvcGVydHlWYWx1ZShzdHlsZSwg
Q1NTUHJvcGVydHlGb250V2VpZ2h0KTsKKyAgICByZXR1cm4gZm9udFdlaWdodCAmJiBmb250V2Vp
Z2h0SXNCb2xkKCpmb250V2VpZ2h0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4dHJhY3RQcm9wZXJ0aWVzTm90
SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNl
U3R5bGUpCitzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBleHRyYWN0
UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVy
dGllcywgVCYgYmFzZVN0eWxlKQogewotICAgIEFTU0VSVChzdHlsZVdpdGhSZWR1bmRhbnRQcm9w
ZXJ0aWVzKTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiByZXN1bHQgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzKTsKLSAgICByZXN1bHQtPnJlbW92
ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKCpiYXNlU3R5bGUpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IHJlc3VsdCA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCZzdHlsZVdpdGhSZWR1bmRhbnRQcm9w
ZXJ0aWVzKTsKKyAgICByZXN1bHQtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGJhc2VTdHls
ZSk7CiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IHJl
c3VsdC0+c3R5bGUoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gYmFzZVRleHREZWNvcmF0aW9u
c0luRWZmZWN0ID0gZXh0cmFjdFByb3BlcnR5VmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICBkaWZmVGV4dERlY29yYXRpb25zKG11
dGFibGVTdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgYmFzZVRleHREZWNv
cmF0aW9uc0luRWZmZWN0LmdldCgpKTsKLSAgICBkaWZmVGV4dERlY29yYXRpb25zKG11dGFibGVT
dHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgYmFz
ZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKKyAgICBkaWZmVGV4dERlY29yYXRpb25z
KCptdXRhYmxlU3R5bGUsIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGJhc2VUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdC5nZXQoKSk7CisgICAgZGlmZlRleHREZWNvcmF0aW9ucygqbXV0YWJsZVN0
eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCBiYXNlVGV4dERl
Y29yYXRpb25zSW5FZmZlY3QuZ2V0KCkpOwogCi0gICAgaWYgKGV4dHJhY3RQcm9wZXJ0eVZhbHVl
KGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSAmJiBmb250V2VpZ2h0SXNCb2xkKG11
dGFibGVTdHlsZS5nZXQoKSkgPT0gZm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQorICAgIGlm
IChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCkg
JiYgZm9udFdlaWdodElzQm9sZCgqbXV0YWJsZVN0eWxlKSA9PSBmb250V2VpZ2h0SXNCb2xkKGJh
c2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250V2VpZ2h0KTsKIAotICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUs
IENTU1Byb3BlcnR5Q29sb3IpICYmIHRleHRDb2xvckZyb21TdHlsZShtdXRhYmxlU3R5bGUuZ2V0
KCkpID09IHRleHRDb2xvckZyb21TdHlsZShiYXNlU3R5bGUpKQorICAgIGlmIChleHRyYWN0UHJv
cGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Q29sb3IpICYmIHRleHRDb2xvckZyb21T
dHlsZSgqbXV0YWJsZVN0eWxlKSA9PSB0ZXh0Q29sb3JGcm9tU3R5bGUoYmFzZVN0eWxlKSkKICAg
ICAgICAgbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIAog
ICAgIGlmIChleHRyYWN0UHJvcGVydHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5VGV4dEFs
aWduKQotICAgICAgICAmJiB0ZXh0QWxpZ25SZXNvbHZpbmdTdGFydEFuZEVuZChtdXRhYmxlU3R5
bGUuZ2V0KCkpID09IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKGJhc2VTdHlsZSkpCisg
ICAgICAgICYmIHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKCptdXRhYmxlU3R5bGUpID09
IHRleHRBbGlnblJlc29sdmluZ1N0YXJ0QW5kRW5kKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFi
bGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24pOwogCi0gICAgaWYg
KGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpICYmIGJhY2tncm91bmRDb2xvckZyb21TdHlsZShtdXRhYmxlU3R5bGUuZ2V0KCkpID09IGJh
Y2tncm91bmRDb2xvckZyb21TdHlsZShiYXNlU3R5bGUpKQorICAgIGlmIChleHRyYWN0UHJvcGVy
dHlWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAmJiBiYWNrZ3Jv
dW5kQ29sb3JGcm9tU3R5bGUoKm11dGFibGVTdHlsZSkgPT0gYmFja2dyb3VuZENvbG9yRnJvbVN0
eWxlKGJhc2VTdHlsZSkpCiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgcmV0dXJuIG11dGFibGVTdHlsZS5yZWxl
YXNlKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlV2l0
aFJlZHVuZGFudFByb3BlcnRpZXMsIFQqIGJhc2VTdHlsZSkKK1Bhc3NSZWZQdHI8TXV0YWJsZVN0
eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVX
aXRoUmVkdW5kYW50UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKQogewogICAgIHJldHVybiBleHRy
YWN0UHJvcGVydGllc05vdEluKHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIGJhc2VTdHls
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAppbmRleCA1ZTE3NjIyLi44
ZWU3NTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKQEAgLTE1Nyw3ICsx
NTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJ
Zk5lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9p
ZCBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0
YXRlIHRyaVN0YXRlT2ZTdHlsZShUKiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9u
bHlQcm9wZXJ0aWVzKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUcmlTdGF0ZSB0
cmlTdGF0ZU9mU3R5bGUoVCYgc3R5bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJv
cGVydGllcykgY29uc3Q7CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1l
bnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxD
U1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBjb25zdDsKICAgICB2b2lkIG1l
cmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQ1NTUHJv
cGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUpOwogICAgIHZvaWQgbWVyZ2VT
dHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSk7CkBA
IC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CiAgICAgfQogcHJpdmF0ZToKLSAgICB2b2lkIGV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50
KiwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVs
dFNpemUpOworICAgIHZvaWQgZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqLCBNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzJiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7CiAKICAg
ICBTdHJpbmcgbV9jc3NTdHlsZTsKICAgICBib29sIG1fYXBwbHlCb2xkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>