<?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>108563</bug_id>
          
          <creation_ts>2013-01-31 18:49:02 -0800</creation_ts>
          <short_desc>[Refactoring] StyleResolver::State should have methods to access its member variables.</short_desc>
          <delta_ts>2013-02-13 09:28:28 -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>CSS</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>
          
          <blocked>89879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Takashi Sakamoto">tasak</reporter>
          <assigned_to name="Takashi Sakamoto">tasak</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>822224</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-01-31 18:49:02 -0800</bug_when>
    <thetext>We need suitable methods to access StyleResolver::State&apos;s member variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825312</commentid>
    <comment_count>1</comment_count>
      <attachid>186583</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-05 02:39:47 -0800</bug_when>
    <thetext>Created attachment 186583
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825320</commentid>
    <comment_count>2</comment_count>
      <attachid>186583</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-05 02:48:46 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16367684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825321</commentid>
    <comment_count>3</comment_count>
      <attachid>186583</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-05 02:49:00 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16371689</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825322</commentid>
    <comment_count>4</comment_count>
      <attachid>186583</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-05 02:49:11 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16374620</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825328</commentid>
    <comment_count>5</comment_count>
      <attachid>186583</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 02:52:34 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16366720</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825336</commentid>
    <comment_count>6</comment_count>
      <attachid>186583</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-05 03:10:57 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16376619</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825341</commentid>
    <comment_count>7</comment_count>
      <attachid>186583</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 03:18:15 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16369684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825346</commentid>
    <comment_count>8</comment_count>
      <attachid>186583</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-05 03:27:10 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16379540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825348</commentid>
    <comment_count>9</comment_count>
      <attachid>186583</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-05 03:36:40 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16378551</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825351</commentid>
    <comment_count>10</comment_count>
      <attachid>186583</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-02-05 03:41:05 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16384001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825451</commentid>
    <comment_count>11</comment_count>
      <attachid>186583</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-05 06:58:28 -0800</bug_when>
    <thetext>Comment on attachment 186583
WIP

Attachment 186583 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16365817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826066</commentid>
    <comment_count>12</comment_count>
      <attachid>186753</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-05 21:40:18 -0800</bug_when>
    <thetext>Created attachment 186753
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827013</commentid>
    <comment_count>13</comment_count>
      <attachid>186981</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-06 19:45:10 -0800</bug_when>
    <thetext>Created attachment 186981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827216</commentid>
    <comment_count>14</comment_count>
      <attachid>186981</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 02:43:48 -0800</bug_when>
    <thetext>Comment on attachment 186981
Patch

Attachment 186981 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16416113

New failing tests:
inspector/styles/region-style-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827232</commentid>
    <comment_count>15</comment_count>
      <attachid>186981</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 02:57:51 -0800</bug_when>
    <thetext>Comment on attachment 186981
Patch

Attachment 186981 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16445063

New failing tests:
inspector/styles/region-style-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828268</commentid>
    <comment_count>16</comment_count>
      <attachid>187254</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-08 00:22:06 -0800</bug_when>
    <thetext>Created attachment 187254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828273</commentid>
    <comment_count>17</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-08 00:23:39 -0800</bug_when>
    <thetext>I filed https://bugs.webkit.org/show_bug.cgi?id=109258 to fix &quot;New failing: inspector/styles/region-style-crash.html&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828372</commentid>
    <comment_count>18</comment_count>
      <attachid>187254</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-08 03:00:57 -0800</bug_when>
    <thetext>Comment on attachment 187254
Patch

Attachment 187254 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16430545

New failing tests:
inspector/styles/region-style-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828380</commentid>
    <comment_count>19</comment_count>
      <attachid>187254</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-08 03:13:12 -0800</bug_when>
    <thetext>Comment on attachment 187254
Patch

Attachment 187254 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16445637

New failing tests:
inspector/styles/region-style-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828902</commentid>
    <comment_count>20</comment_count>
      <attachid>187254</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-08 20:32:11 -0800</bug_when>
    <thetext>Comment on attachment 187254
Patch

Attachment 187254 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16472025

New failing tests:
inspector/styles/region-style-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829912</commentid>
    <comment_count>21</comment_count>
      <attachid>187254</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-11 11:18:28 -0800</bug_when>
    <thetext>Comment on attachment 187254
Patch

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

This looks fairly mechanical and straightforward. Are you blocked on landing a fix for bug 108563?

&gt; Source/WebCore/ChangeLog:3
&gt; +        [Refectoring] StyleResolver::State should have methods to access its member variables.

fect -&gt; fact</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829954</commentid>
    <comment_count>22</comment_count>
      <attachid>187254</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-11 11:46:55 -0800</bug_when>
    <thetext>Comment on attachment 187254
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:543
&gt; -    if (state.matchedRules.isEmpty())
&gt; +    Vector&lt;const RuleData*, 32&gt;&amp; matchedRules = state.matchedRules();
&gt; +    if (matchedRules.isEmpty())
&gt;          return;
&gt;  
&gt;      sortMatchedRules();

It&apos;s counter intuitive to have a reference to matchedRules, and the call sortMatchedRules() that takes no argument to sort it.
It would have been better if the state object had isMatchedRulesEmpty() function and sortMatchedRules().
Also, this appears the only place where the matchedRules is ever meaningfully used, and we can probably get rid of it if we added clearMatchesRules().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830551</commentid>
    <comment_count>23</comment_count>
      <attachid>187770</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-11 21:55:49 -0800</bug_when>
    <thetext>Created attachment 187770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830552</commentid>
    <comment_count>24</comment_count>
      <attachid>187254</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-11 21:56:31 -0800</bug_when>
    <thetext>Comment on attachment 187254
Patch

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

Thank you for reviewing.

&gt; Are you blocked on landing a fix for bug 108563?

If possible, I would like to rebase layout test results. Because inspector/styles/region-style-crash.html doesn&apos;t crash.

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        [Refectoring] StyleResolver::State should have methods to access its member variables.
&gt; 
&gt; fect -&gt; fact

Done.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:543
&gt;&gt;      sortMatchedRules();
&gt; 
&gt; It&apos;s counter intuitive to have a reference to matchedRules, and the call sortMatchedRules() that takes no argument to sort it.
&gt; It would have been better if the state object had isMatchedRulesEmpty() function and sortMatchedRules().
&gt; Also, this appears the only place where the matchedRules is ever meaningfully used, and we can probably get rid of it if we added clearMatchesRules().

I would like to try such refactoring in another patch, because this patch is large, i.e. about 139kb. I think, it would be better to keep this patch mechanical and straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831008</commentid>
    <comment_count>25</comment_count>
      <attachid>187770</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-12 09:28:40 -0800</bug_when>
    <thetext>Comment on attachment 187770
Patch

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

&gt; Source/WebCore/css/StyleResolver.h:464
&gt;          State()
&gt; -        : element(0)
&gt; -        , styledElement(0)
&gt; -        , parentNode(0)
&gt; -        , parentStyle(0)
&gt; -        , rootElementStyle(0)
&gt; -        , regionForStyling(0)
&gt; -        , sameOriginOnly(false)
&gt; -        , pseudoStyle(NOPSEUDO)
&gt; -        , elementLinkState(NotInsideLink)
&gt; -        , distributedToInsertionPoint(false)
&gt; -        , elementAffectedByClassRules(false)
&gt; -        , applyPropertyToRegularStyle(true)
&gt; -        , applyPropertyToVisitedLinkStyle(false)
&gt; +        : m_element(0)
&gt; +        , m_styledElement(0)
&gt; +        , m_parentNode(0)
&gt; +        , m_parentStyle(0)
&gt; +        , m_rootElementStyle(0)
&gt; +        , m_regionForStyling(0)
&gt; +        , m_sameOriginOnly(false)
&gt; +        , m_pseudoStyle(NOPSEUDO)
&gt; +        , m_elementLinkState(NotInsideLink)
&gt; +        , m_distributedToInsertionPoint(false)
&gt; +        , m_elementAffectedByClassRules(false)
&gt; +        , m_applyPropertyToRegularStyle(true)
&gt; +        , m_applyPropertyToVisitedLinkStyle(false)
&gt; +#if ENABLE(CSS_SHADERS)
&gt; +        , m_hasPendingShaders(false)
&gt; +#endif
&gt; +        , m_lineHeightValue(0)
&gt; +        , m_fontDirty(false)
&gt; +        , m_hasUAAppearance(false)
&gt; +        , m_backgroundData(BackgroundFillLayer) { }
&gt; +
&gt; +    public:
&gt; +        void initElement(Element*);
&gt; +        void initForStyleResolve(Document*, Element*, RenderStyle* parentStyle = 0, PseudoId = NOPSEUDO, RenderRegion* regionForStyling = 0);
&gt; +        void clear()
&gt; +        {
&gt; +            m_element = 0;
&gt; +            m_styledElement = 0;
&gt; +            m_parentStyle = 0;
&gt; +            m_parentNode = 0;
&gt; +            m_regionForStyling = 0;
&gt; +            m_ruleList = 0;
&gt; +            m_matchedRules.clear();
&gt; +            m_pendingImageProperties.clear();
&gt;  #if ENABLE(CSS_SHADERS)
&gt; -        , hasPendingShaders(false)
&gt; +            m_hasPendingShaders = false;
&gt;  #endif
&gt; -        , lineHeightValue(0)
&gt; -        , fontDirty(false)
&gt; -        , hasUAAppearance(false)
&gt; -        , backgroundData(BackgroundFillLayer) { }
&gt; +#if ENABLE(CSS_FILTERS) &amp;&amp; ENABLE(SVG)
&gt; +            m_pendingSVGDocuments.clear();
&gt; +#endif
&gt; +        }

You should move functions with more than one line to cpp (constructor, clear(), ensureRuleList(), cacheBorderAndBackground(),..).

&gt; Source/WebCore/css/StyleResolver.h:470
&gt; +        Document* document() const { return m_element-&gt;document(); }
&gt; +        Element* element() const { return m_element; }
&gt; +        StyledElement* styledElement() const { return m_styledElement; }
&gt; +        void setStyle(PassRefPtr&lt;RenderStyle&gt; style) { m_style = style; }
&gt; +        RenderStyle* style() const { return m_style.get(); }

Would it be possible to follow proper const here? 
const Foo* foo() const
or/and
Foo* foo() {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831699</commentid>
    <comment_count>26</comment_count>
      <attachid>188028</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-13 00:12:41 -0800</bug_when>
    <thetext>Created attachment 188028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831710</commentid>
    <comment_count>27</comment_count>
      <attachid>188028</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-13 00:55:26 -0800</bug_when>
    <thetext>Comment on attachment 188028
Patch

Attachment 188028 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16541016

New failing tests:
inspector/styles/region-style-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831712</commentid>
    <comment_count>28</comment_count>
      <attachid>188031</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-13 01:01:26 -0800</bug_when>
    <thetext>Created attachment 188031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831715</commentid>
    <comment_count>29</comment_count>
      <attachid>187770</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2013-02-13 01:05:00 -0800</bug_when>
    <thetext>Comment on attachment 187770
Patch

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

Thank you for reviewing.

I rebaselined inspector/styles/region-style-crash.html, because, I think, it will take much time to make inspector support CSS regions.

&gt;&gt; Source/WebCore/css/StyleResolver.h:464
&gt;&gt; +        }
&gt; 
&gt; You should move functions with more than one line to cpp (constructor, clear(), ensureRuleList(), cacheBorderAndBackground(),..).

I see. Done.

&gt;&gt; Source/WebCore/css/StyleResolver.h:470
&gt;&gt; +        RenderStyle* style() const { return m_style.get(); }
&gt; 
&gt; Would it be possible to follow proper const here? 
&gt; const Foo* foo() const
&gt; or/and
&gt; Foo* foo() {}

I tried... but I found that I need much more refactoring to follow proper const. I will try this in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831971</commentid>
    <comment_count>30</comment_count>
      <attachid>188031</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-13 09:28:21 -0800</bug_when>
    <thetext>Comment on attachment 188031
Patch

Clearing flags on attachment: 188031

Committed r142757: &lt;http://trac.webkit.org/changeset/142757&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831972</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-13 09:28:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186583</attachid>
            <date>2013-02-05 02:39:47 -0800</date>
            <delta_ts>2013-02-05 21:40:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-108563-20130205193625.patch</filename>
            <type>text/plain</type>
            <size>141405</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzllMWIyZjg2OThmNzNk
MTM1ZjQ1MTgxZWEwY2M4YjZkYjdmNzgwMC4uZjgzZWQ0MjMyM2M0OTQ1ZGVlZTZlNTI0MTgyNGY2
YjIyYWJmYWYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAxMy0wMi0wNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmVjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcy4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
Ojppbml0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxl
bWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlm
IGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAgICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3Rh
dGUncyBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6Omlu
aXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0
eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAg
Q2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0
eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9uZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZp
b3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxs
IGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNl
dWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMgb24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eVRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNl
U1ZHWm9vbVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21W
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXpl
QWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5
bGVTaGFkZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNl
Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnJvb3RFbGVtZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpoYXNQ
YXJlbnROb2RlKToKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcik6CisgICAgICAgIE1vZGlmaWVk
IHRvIHVzZSBjbGVhciBhdCB0aGUgZW5kIG9mIHN0eWxlRm9yRWxlbWVudC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpkb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjp0YWtlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmVuc3VyZVJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
Ojp0YWtlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OnBhcmVudE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNl
dFBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpw
YXJlbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6cm9v
dEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6
c2V0UmVnaW9uRm9yU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6cmVnaW9uRm9yU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6c2V0U2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OmlzU2FtZU9yaWdpbk9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjpwc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6ZWxlbWVudExpbmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNz
UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRB
ZmZlY3RlZEJ5Q2xhc3NSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjphcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnBlbmRpbmdJbWFnZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBlbmRpbmdTVkdEb2N1bWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEhhc1BlbmRpbmdTaGFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpoYXNQZW5kaW5nU2hhZGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0TGluZUhlaWdo
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpsaW5lSGVp
Z2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEZv
bnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Zm9udERp
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjYWNoZUJvcmRl
ckFuZEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
Omhhc1VBQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0
ZTo6Ym9yZGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6
YmFja2dyb3VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0
ZTo6Zm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6c2V0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpTdGF0ZTo6c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6c2V0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRUZXh0T3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6Om1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnREZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisKIDIwMTMtMDItMDQgIFdlaSBKYW1lcyAgPGphbWVz
LndlaUBpbnRlbC5jb20+CiAKICAgICAgICAgSGVhcC1idWZmZXItb3ZlcmZsb3cgaW4gV2ViQ29y
ZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggYWI1NmY2NjExNzk3ZmQ5NDc3OTZmNDhmMzEzOWU3
ODEzYTk3ZTgzZC4uYTdkNzhhM2ZkZmJmMDI2MjNjY2NmMGYyYzUyOWNmMDFmNThjNGVmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNDksNyArNDks
NyBAQAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0
KSBcCiB7IFwKLSAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxlLT5zdmdT
dHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyAgICAgICBcCiAgICAgcmV0dXJuOyBcCiB9CiAK
QEAgLTExMCwxMCArMTEwLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICBjb25z
dCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9
IHN0YXRlLnN0eWxlLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIFNWR1JlbmRlclN0eWxlKiBzdmdz
dHlsZSA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CiAKLSAgICBib29sIGlzSW5o
ZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAg
ICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFy
ZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJp
dCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAg
IGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJl
bnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICAvLyBXaGF0IGZv
bGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpcgog
ICAgIC8vIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRo
YW5kcyhlLmcuIGJvcmRlciwKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlz
SW5oZXJpdCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJl
bnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxl
KCktPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChz
dmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50
Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yNDAsMTQgKzI0MCwxNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NW
R1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNf
Y2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmls
bFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShz
dmdQYWludCwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50
VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgp
LT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJv
a2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRT
dHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tl
UGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVu
dFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAg
ICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50
LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUu
c3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9y
RnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBz
dmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAg
ICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVm
ZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXJrZXJNaWQ6CkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAg
ICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7
CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJl
bmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJrZXJFbmQ6CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAg
ICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAg
c3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7Cisg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNl
OjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlT
dHJva2VMaW5lY2FwOgpAQCAtNDI5LDcgKzQyOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAg
ICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoK
QEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0
TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJ
U3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmll
ckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRoOgpAQCAtNDU3LDcg
KzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVz
b3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMs
IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRD
bGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJ
U3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QW5jaG9yOgpAQCAtNDc4LDE0ICs0Nzgs
MTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwoc3RvcENvbG9yLCBTdG9wQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZh
bHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xv
cihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUp
LCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRT
dG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+
KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvcjoKICAgICAgICAg
ewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGlnaHRpbmdDb2xvciwg
TGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xv
ckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+Y29s
b3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9y
RnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRl
LnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01MTAsNyArNTEwLDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoZmxvb2RDb2xvciwgRmxvb2RDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlz
U1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0
ZS5zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENv
bG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1
ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoK
QEAgLTU1MCw3ICs1NTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFkb3c6IHsKICAgICAgICAgICAgIGlm
IChpc0luaGVyaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3co
YWRvcHRQdHIoc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNo
YWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIoc3Rh
dGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgq
c3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOwogICAgICAg
ICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUK
ICAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhudWxscHRyKTsKIApA
QCAtNTY1LDkgKzU2NSw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAoIWZpcnN0
VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oZmlyc3RW
YWx1ZSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpLAotICAg
ICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVt
LT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSA6IDA7CisgICAgICAgICAgICBJbnRQb2ludCBsb2Nh
dGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpKSwKKyAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSk7CisgICAgICAg
ICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSA6IDA7CiAgICAgICAg
ICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKICAgICAgICAg
ICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxODI5MGYzODU2NDg5NTM3
NmU1ODk2YWNhMjQwYTgwMDc3MjYyNzNjLi42MThiYmI3MmZhZmRiOGM2OTkwMGY0ZTAwYWYxM2Vh
ZjU0ZTZkNjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xOTQsMTQg
KzE5NCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjZGVmaW5lIEhBTkRMRV9J
TkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAotICAgIG1fc3RhdGUuc3R5
bGUtPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0eWxlLT5wcm9wKCkpOyBcCisgICAgbV9zdGF0
ZS5zdHlsZSgpLT5zZXQjI1Byb3AobV9zdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyAgXAog
ICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHBy
b3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwp
IHsgXAotICAgIG1fc3RhdGUuc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMj
UHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjpp
bml0aWFsIyNQcm9wKCkpOyAgIFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtNDc1LDExICs0NzUs
MTEgQEAgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxz
ZTsKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hS
ZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VS
VChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCk7Cisg
ICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCgpKTsKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQ7Ci0gICAgU3R5bGVkRWxl
bWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQ7CisgICAgRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVt
ZW50ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNl
dWRvSWQgPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlmICghcHNldWRvSWQuaXNF
bXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsKQEAgLTUxOSwxMyArNTE5
LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0
Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVl
c3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewotICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKQorICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdp
b25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0
b3IgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5h
dChpKS5zZWxlY3RvcjsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2Vs
ZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmctPm5v
ZGUoKSkpKSB7CisgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9y
LCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUo
KSkpKSB7CiAgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IG1hdGNoUmVxdWVzdC5y
dWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7
CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwogICAgICAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVk
ZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CkBAIC01MzYsMjQg
KzUzNiwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZQogdm9pZCBTdHlsZVJlc29sdmVyOjpz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0
eSgpKQorICAgIGlmIChzdGF0ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAogICAgIGlmIChtX3NlbGVjdG9yQ2hl
Y2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKLSAgICAg
ICAgaWYgKCFzdGF0ZS5ydWxlTGlzdCkKLSAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0ID0gU3Rh
dGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3RhdGUubWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgc3RhdGUucnVs
ZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVh
dGVDU1NPTVdyYXBwZXIoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
ZS5tYXRjaGVkUnVsZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0YXRlLmVuc3VyZVJ1
bGVMaXN0KCktPnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRSdWxlcygpW2ldLT5ydWxlKCkt
PmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBv
ZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNo
ZWRSdWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoc3RhdGUuc3R5bGUgJiYgc3RhdGUu
bWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFBy
b3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGll
cygpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ld
LT5saW5rTWF0Y2hUeXBlKCksIHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxp
c3RUeXBlKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5tYXRjaGVkUnVs
ZXMoKS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKSAmJiBzdGF0ZS5t
YXRjaGVkUnVsZXMoKVtpXS0+Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tYXRjaGVkUnVsZXMoKVtpXS0+cnVsZSgpLT5wcm9w
ZXJ0aWVzKCksIHN0YXRlLm1hdGNoZWRSdWxlcygpW2ldLT5ydWxlKCksIHN0YXRlLm1hdGNoZWRS
dWxlcygpW2ldLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRlLm1hdGNoZWRSdWxlcygpW2ldLT5wcm9w
ZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CiAgICAgfQogfQogCkBAIC01NjQsMTIgKzU2MiwxMiBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBz
Y29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNr
IChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVz
b2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tD
b25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JT
dHlsZXMgPSBtX3N0YXRlLmVsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygp
OworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVS
ZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKKyAg
ICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2Nv
cGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0g
dHJ1ZTsKICAgICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFj
a1NpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAg
ICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
OwogCiAgICAgICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZy
YW1lID0gbV9zY29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC02MDAsNyArNTk4LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJMRShTSEFE
T1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5z
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCk7Cisg
ICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkpOwogI2Vsc2UKICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTYxMSwxNyArNjA5LDE3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJl
c29sdmVyKTsKIAotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxS
dWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVs
ZXMobV9zdGF0ZS5lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+
bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYg
KG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVs
ZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0x
KSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0x
KSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKICAg
ICB9CiAgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQpAQCAt
NjMyLDEwICs2MzAsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKIHsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1f
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAo
IW1fc3RhdGUuZWxlbWVudCkKKyAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgpAQCAtNjUzLDcgKzY1
MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBpZiAoIW1fdXNlclN0eWxlKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAg
ICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxh
c3RVc2VyUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1h
dGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKQEAgLTY2Niw3ICs2NjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQq
IHJ1bGVzKQogewotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVB
UnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIFJ1bGVSYW5n
ZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7CkBAIC02ODMsNyArNjgx
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZv
ciByYW5kb20gZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29s
dmUuCiAgICAgLy8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0
ZSBpbiB0aGF0IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wg
Y2FuVXNlRmFzdFJlamVjdCA9IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3Rl
bnQoc3RhdGUucGFyZW50Tm9kZSk7CisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxl
Y3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKCkpOwog
CiAgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtNjkzLDcgKzY5MSw4IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBjCiAKICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwog
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwot
ICAgICAgICBpZiAocnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSkpIHsK
KyAgICAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBpZiAo
cnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSwgZHluYW1pY1BzZXVkbykp
IHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5
LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAg
ICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1h
dGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcykpIHsKQEAgLTcwMSwxOSArNzAwLDE5IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBn
ZXRNYXRjaGVkQ1NTUnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBu
ZWVkZWQuCi0gICAgICAgICAgICBpZiAoc3RhdGUuc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRh
Lmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmlz
U2FtZU9yaWdpbk9ubHkoKSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigp
KSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1
bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBh
IHBzZXVkbyBiaXQgaWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBw
c2V1ZG8tZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvICE9IE5P
UFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICBp
ZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpID09IE5P
UFNFVURPKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9
PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURP
SUQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShz
dGF0ZS5keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyA8
IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRIYXNQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNl
cyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1bGVSYW5n
ZS5sYXN0UnVsZUluZGV4OwpAQCAtNzIxLDcgKzcyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVz
LCBjCiAgICAgICAgICAgICAgICAgICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1bGVS
YW5nZS5sYXN0UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0
byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRS
dWxlKCZydWxlRGF0YSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgm
cnVsZURhdGEpOwogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
TWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CkBAIC03MzksNyArNzM4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVS
dWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBTdHls
ZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0ZS5t
YXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVS
dWxlcyk7CisgICAgc3RkOjpzb3J0KG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuYmVnaW4oKSwgbV9z
dGF0ZS5tYXRjaGVkUnVsZXMoKS5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZVNNSUxQcm9wZXJ0aWVzKQpAQCAtNzUxLDE3ICs3NTAsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9w
ZXJ0aWUKICAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBO
b3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25h
bCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxl
bWVudCkgewotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBpZiAo
bV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQg
ZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFu
IGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8g
YWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9u
IHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9w
ZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVu
dCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAg
ICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRl
LnN0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1
dG8pOworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxl
bWVudChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRv
QXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAg
ICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBs
ZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAg
ICAgICB9CkBAIC03NzIsMTggKzc3MSwxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxs
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAg
ICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNr
IG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYm
IG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxp
bmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9u
ZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVkaWEg
Y29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4K
LSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxl
bWVudC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVu
dC0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxl
ID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAm
JiAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8v
IEZJWE1FOiBDb25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1
bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNh
Y2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJs
ZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmlt
YXRpb24gb3ZlcnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBt
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9z
dGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0
eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRlLnN0
eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXND
YWNoZWFibGUgKi8pOworICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVk
RWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2Fj
aGVhYmxlICovKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGll
cyk7CiAjZW5kaWYKQEAgLTc5OCwxMiArNzk3LDE3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xh
c3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVz
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0
ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBtX2VsZW1lbnQgPSBlOworICAgIG1f
c3R5bGVkRWxlbWVudCA9IGUgJiYgZS0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4oZSkgOiAwOworICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBlLT5k
b2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6IE5v
SW5zaWRlTGluazsKK30KKwogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQo
RWxlbWVudCogZSkKIHsKLSAgICBpZiAobV9zdGF0ZS5lbGVtZW50ICE9IGUpIHsKLSAgICAgICAg
bV9zdGF0ZS5lbGVtZW50ID0gZTsKLSAgICAgICAgbV9zdGF0ZS5zdHlsZWRFbGVtZW50ID0gbV9z
dGF0ZS5lbGVtZW50ICYmIG1fc3RhdGUuZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0
aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9zdGF0ZS5lbGVtZW50KSA6IDA7Ci0gICAgICAgIG1f
c3RhdGUuZWxlbWVudExpbmtTdGF0ZSA9IGRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+
ZGV0ZXJtaW5lTGlua1N0YXRlKGUpOworICAgIGlmIChtX3N0YXRlLmVsZW1lbnQoKSAhPSBlKSB7
CisgICAgICAgIG1fc3RhdGUuaW5pdEVsZW1lbnQoZG9jdW1lbnQoKSwgZSk7CiAgICAgICAgIGlm
IChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAg
ICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNl
KTsKICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVu
dEVsZW1lbnQoZmFsc2UpOwpAQCAtODExLDM1ICs4MTUsMzEgQEAgaW5saW5lIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKICAgICB9CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKK2lubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiBkb2N1bWVudCwgRWxl
bWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsK
LSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHN0YXRlLnBzZXVkb1N0eWxlID0gcHNl
dWRvSUQ7CisgICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lkOwogCiAgICAgaWYgKGUpIHsKICAg
ICAgICAgTm9kZVJlbmRlcmluZ0NvbnRleHQgY29udGV4dChlKTsKLSAgICAgICAgc3RhdGUucGFy
ZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7Ci0gICAg
ICAgIHN0YXRlLnBhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKSA/
IDAgOgorICAgICAgICBtX3BhcmVudE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJp
bmdBbmRTdHlsZSgpOworICAgICAgICBtX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxl
SW5oZXJpdGFuY2UoKSA/IDAgOgogICAgICAgICAgICAgcGFyZW50U3R5bGUgPyBwYXJlbnRTdHls
ZSA6Ci0gICAgICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID8gc3RhdGUucGFyZW50Tm9kZS0+cmVu
ZGVyU3R5bGUoKSA6IDA7Ci0gICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dCA9IGNvbnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKKyAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/
IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CisgICAgICAgIG1fZGlzdHJpYnV0ZWRU
b0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPSAwOwotICAgICAgICBzdGF0ZS5wYXJlbnRTdHls
ZSA9IHBhcmVudFN0eWxlOwotICAgICAgICBzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQgPSBmYWxzZTsKKyAgICAgICAgbV9wYXJlbnROb2RlID0gMDsKKyAgICAgICAgbV9wYXJlbnRT
dHlsZSA9IHBhcmVudFN0eWxlOworICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dCA9IGZhbHNlOwogICAgIH0KIAogICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9
IGRvY3VtZW50KCktPnJlbmRlclN0eWxlKCk7Ci0gICAgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSA9
IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5bGUo
KSA6IGRvY1N0eWxlOwotCi0gICAgc3RhdGUuc3R5bGUgPSAwOwotCi0gICAgc3RhdGUucGVuZGlu
Z0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAgc3RhdGUucnVsZUxpc3QgPSAwOworICAg
IFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IGRvY3VtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIG1f
cm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxl
bWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwogCi0gICAgc3RhdGUuZm9udERpcnR5ID0g
ZmFsc2U7CisgICAgbV9zdHlsZSA9IDA7CisgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNs
ZWFyKCk7CisgICAgbV9ydWxlTGlzdCA9IDA7CisgICAgbV9mb250RGlydHkgPSBmYWxzZTsKIH0K
IAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpAQCAt
OTAyLDE2ICs5MDIsMTYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNldCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7
CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogCiAgICAgbV9zZWxlY3RvckNo
ZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CiAgICAgaW50IGZp
cnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKICAgICBSdWxlUmFuZ2UgcnVs
ZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5nZSk7CiAgICAgbV9zZWxlY3Rv
ckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLSAgICBp
ZiAobV9zdGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIGlmIChtX3N0YXRlLm1hdGNo
ZWRSdWxlcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUu
bWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MTksNyArOTE5LDcgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKIHsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIEhUTUxJbnB1
dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVu
dCA9IHN0YXRlLmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKIAogICAgIGlmICghdGhpc0lu
cHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTk0MCwyNSArOTQwLDI1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdp
dGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJbnB1
dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVkRm9y
bUNvbnRyb2woKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQorICAg
IGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+
aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0Rl
ZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKKyAgICBpZiAoc3RhdGUuZG9jdW1lbnQo
KS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgewogICAgICAgICBib29sIHdpbGxWYWxp
ZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOwogCi0gICAgICAgIGlmICh3aWxsVmFsaWRh
dGUgIT0gc3RhdGUuZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3aWxsVmFs
aWRhdGUgIT0gc3RhdGUuZWxlbWVudCgpLT53aWxsVmFsaWRhdGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1Zh
bGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNW
YWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
ZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNJblJhbmdlKCkpCisg
ICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzSW5S
YW5nZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50
LT5pc091dE9mUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRP
ZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05NzQsMjUg
Kzk3NCwyNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxl
bWVudCogZWxlbWVudCkKIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lk
ZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2Fu
ZGlkYXRlKSBjb25zdAogewogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAg
aWYgKHN0YXRlLmVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5h
dHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+YXR0cmlidXRlRGF0YSgp
ID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjps
YW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdGF0ZS5l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5m
YXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmli
dXRlKGxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzdGF0ZS5l
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZl
Y3RlZEJ5Q2xhc3NSdWxlcygpKSB7CiAgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXND
bGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xh
c3NOYW1lcygpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKHNo
YXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkpIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICAv
LyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9u
IGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgotICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2FuZGlk
YXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQo
KS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0ZShj
bGFzc0F0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNl
IHsKICNlbmRpZgotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSAh
PSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCisgICAgICAgICAgICBpZiAoc3RhdGUu
ZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAg
ICB9CkBAIC0xMDAwLDEyICsxMDAwLDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0Nh
bmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAg
fSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVt
ZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQo
KS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+aGFzVGFnTmFt
ZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0Vs
ZW1lbnQqPihzdGF0ZS5lbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhU
TUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQor
ICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc3RhdGUuZWxlbWVudCgp
KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihz
aGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29u
c3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5l
bGVtZW50LT50YWdRTmFtZSgpKQorICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRl
LmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChl
bGVtZW50LT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDMyLDIx
ICsxMDMyLDIxIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxl
bWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0ZWRTTUlM
U3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBpZiAo
ZWxlbWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxlbWVu
dC0+aG92ZXJlZCgpKQorICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxlbWVu
dCgpLT5ob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+
YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFj
dGl2ZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+YWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmZvY3VzZWQo
KSkKKyAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+Zm9jdXNl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVk
b0lkKCkgIT0gc3RhdGUuZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICBpZiAoZWxlbWVu
dC0+c2hhZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1BzZXVkb0lkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1
bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc2hh
cmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50LT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoZWxlbWVudC0+YWRkaXRp
b25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1
bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKQEAg
LTEwNjIsNyArMTA2Miw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBib29sIGlzQ29udHJv
bCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250cm9s
ICE9IHN0YXRlLmVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29u
dHJvbCAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRo
Q29udHJvbChlbGVtZW50KSkKQEAgLTEwODYsMjAgKzEwODYsMjAgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29u
c3QKICAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50
TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGlu
aygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLy8g
RGVueSBzaGFyaW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4K
LSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNX
ZWJWVFRFbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9IHN0
YXRlLmVsZW1lbnQoKS0+aXNXZWJWVFRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUo
KSAhPSB0b1dlYlZUVEVsZW1lbnQoc3RhdGUuZWxlbWVudCktPmlzUGFzdE5vZGUoKSkKKyAgICBp
ZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1dlYlZU
VEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0
b1dlYlZUVEVsZW1lbnQoc3RhdGUuZWxlbWVudCgpKS0+aXNQYXN0Tm9kZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBp
ZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVl
bkVsZW1lbnQoKSB8fCBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50ID09IGVs
ZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0
YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVl
bkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMTIxLDM3ICsxMTIxLDM3IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJl
c29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiBSZW5k
ZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewogICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50IHx8ICFzdGF0
ZS5wYXJlbnRTdHlsZSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3RhdGUu
cGFyZW50U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBJZiB0aGUgZWxlbWVu
dCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAoc3RhdGUu
c3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVu
dCgpLT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQot
ICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4oc3RhdGUuc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgp
ICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAg
ICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVz
aGVldHMuCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJl
cy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVSZXNv
bHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNJRCgp
ICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVt
ZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIGlmIChzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1l
bnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChlbGVtZW50SGFz
RGlyZWN0aW9uQXV0byhzdGF0ZS5lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlv
bkF1dG8oc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBDYWNo
ZSB3aGV0aGVyIHN0YXRlLmVsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNl
bGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFyaWFi
bGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0eWxl
UmVzb2x2ZXIuCi0gICAgc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gc3RhdGUu
ZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3Rl
ZEJ5UnVsZXMoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpKTsKKyAgICBzdGF0ZS5zZXRFbGVt
ZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQo
KS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQo
KS0+Y2xhc3NOYW1lcygpKSk7CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQg
dGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWduZWQgdmlz
aXRlZE5vZGVDb3VudCA9IDA7CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsK
LSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgTm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJl
dmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKICAgICAgICAgc2hhcmVF
bGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQpOwog
ICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQpAQCAtMTE3Myw3ICsxMTczLDcgQEAgUmVuZGVyU3R5
bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAoc3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQogICAgICAgICByZXR1cm4gMDsKICAgICAv
LyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9k
ZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgotICAg
IGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxl
bWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
c2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQpAQCAtMTM5NSw5ICsxMzk1LDkgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIFJlbmRlclMKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAg
aW5pdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBk
ZWZhdWx0UGFyZW50KTsKLSAgICBzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5
bGluZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFz
dGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKKyAgICBzdGF0ZS5pbml0Rm9yU3R5
bGVSZXNvbHZlKGRvY3VtZW50KCksIGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOworICAgIHN0YXRl
LnNldFJlZ2lvbkZvclN0eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7CisgICAgaWYgKHNoYXJpbmdC
ZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2Vy
dGlvblBvaW50KCkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRl
U2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0
dXJuIHNoYXJlZFN0eWxlOwpAQCAtMTQwNSwzMiArMTQwNSwzMiBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwg
UmVuZGVyUwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAg
IGlmIChzdGF0ZS5wYXJlbnRTdHlsZSkgewotICAgICAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBh
cmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRT
aGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICBp
ZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJT
dHlsZTo6Y3JlYXRlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0
ZS5wYXJlbnRTdHlsZSgpLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHls
ZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsK
ICAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1l
bnQoKTsKLSAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUu
c3R5bGUuZ2V0KCkpOwotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50
LmdldCgpOworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkp
OworICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHls
ZSgpKTsKKyAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkp
OwogICAgIH0KICAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBi
eSAtd2Via2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20g
c2hhZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KLSAgICBpZiAoc3RhdGUuZGlzdHJpYnV0
ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRp
b25Qb2ludCgpKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRv
d0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9z
dC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5p
c0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SXNMaW5rKHRydWUpOwotICAgICAg
ICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5rIGxp
bmtTdGF0ZSA9IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKICAgICAgICAgaWYgKGxpbmtTdGF0
ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxl
Y3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAg
ICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0g
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBib29s
IG5lZWRzQ29sbGVjdGlvbiA9IGZhbHNlOwpAQCAtMTQ0NywxNyArMTQ0NywxNCBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgUmVuZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQs
IGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkg
YW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVu
ZGVyU3R5bGUoc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlLCBlbGVtZW50KTsK
KyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgp
LCBlbGVtZW50KTsKIAotICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBu
ZXh0IHJlc29sdmUuCi0KLSAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIHN0YXRlLnBh
cmVudFN0eWxlID0gMDsKKyAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBu
ZXh0IHJlc29sdmUuCiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7
CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gc3RhdGUuc3R5bGUu
cmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5
ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKQEAgLTE0NjYsMTQgKzE0NjMsMTMgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBS
ZW5kZXJTdHlsZSogZWxlbWUKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAg
ICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsK
IAotICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSk7CisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxl
KCkpOwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUg
c3R5bGUKLSAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUp
OwotCi0gICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRTdHlsZShS
ZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKDApOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0
YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBu
b3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KQEAg
LTE0ODUsOCArMTQ4MSw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9u
dCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVj
aWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkp
OwogCiAgICAgLy8gTm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZy
YW1lLT5wcm9wZXJ0aWVzKCkpCkBAIC0xNTEzLDcgKzE1MDksNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KiBlbGVtZQogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0g
ICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0
eWxlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRp
b24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVM
aXN0JiBsaXN0KQpAQCAtMTUzNyw3ICsxNTMzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlm
cmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBz
aW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAogICAgICAg
ICBpbml0RWxlbWVudChlKTsKLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKKyAgICAg
ICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwogCiAgICAgICAg
IGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCkBA
IC0xNTgxLDcgKzE1NzcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9y
QW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRv
SWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAg
QVNTRVJUKG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAg
ICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTU4OSw5ICsxNTg1LDkgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KFBzZXVkb0lkIHBzZXVkbywgRWwKIAogICAgIGluaXRFbGVtZW50KGUpOwogCi0gICAgaW5pdEZv
clN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBzdGF0ZS5zdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20obV9z
dGF0ZS5wYXJlbnRTdHlsZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVu
dCgpLCBlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJT
dHlsZTo6Y3JlYXRlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUu
cGFyZW50U3R5bGUoKSk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1l
bnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2Fz
dGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhvc2UgcnVsZXMuCkBAIC0xNjA4LDEyICsxNjA0LDEy
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9y
RWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzdGF0ZS5zdHls
ZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVUeXBl
KHBzZXVkbyk7CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsK
IAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRl
Y29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0
YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5k
ZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAgICAg
Ly8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAg
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CkBAIC0xNjIxLDE1ICsxNjE3LDE1IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1
ZG9JZCBwc2V1ZG8sIEVsCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigp
OwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIHN0YXRlLnN0eWxl
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4
KQogewotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0
eWxlLgorICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNl
dCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOwotICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCkpOwogCiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRl
eCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKQEAg
LTE2NDAsNyArMTYzNiw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwg
bV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBj
b25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVy
IHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHls
ZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX3N0YXRlLmxpbmVIZWlnaHRW
YWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgYm9vbCBp
bmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAw
LCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBA
IC0xNjUxLDggKzE2NDcsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAv
LyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBm
b250LXNpemUuCi0gICAgaWYgKG1fc3RhdGUubGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUp
OworICAgIGlmIChtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAK
ICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0
LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRl
ZE9ubHkpOwogCkBAIC0xNjYyLDIwICsxNjU4LDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIGRvY3VtZW50
KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0
eWxlLgotICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9z
dGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgbV9zdGF0ZS5zdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpj
cmVhdGUoKSk7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYg
d2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4KICAgICBpZiAoU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7CiAgICAgICAgIGluaXRpYWxp
emVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZS0+
Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRl
KDApOwogCi0gICAgcmV0dXJuIG1fc3RhdGUuc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBt
X3N0YXRlLnRha2VTdHlsZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xOTYzLDcgKzE5NTksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNvIGhh
dmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgogICAgIGlmIChzdHlsZS0+aGFzQXBw
ZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0
eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSwgbV9zdGF0ZS5ib3Jk
ZXJEYXRhLCBtX3N0YXRlLmJhY2tncm91bmREYXRhLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcik7
CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywg
c3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgp
LCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwog
CiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hh
cmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRF
UikpCkBAIC0yMDQ2LDI2ICsyMDQyLDE2IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRp
b25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0
ZUZvbnQoKQogewotICAgIGlmICghbV9zdGF0ZS5mb250RGlydHkpCisgICAgaWYgKCFtX3N0YXRl
LmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjaGVja0ZvclRleHRTaXplQWRq
dXN0KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsKLSAg
ICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUp
OwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSk7Cisg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOworICAgIGNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVj
a0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tG
b3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7Ci0gICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVw
ZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgbV9zdGF0ZS5mb250RGlydHkgPSBmYWxzZTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQotewotICAg
IG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlID0gbV9zdGF0ZS5zdHlsZS0+aGFzQXBwZWFyYW5jZSgp
OwotICAgIGlmIChtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX3N0YXRlLmJv
cmRlckRhdGEgPSBtX3N0YXRlLnN0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9zdGF0ZS5iYWNr
Z3JvdW5kRGF0YSA9ICptX3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAg
IG1fc3RhdGUuYmFja2dyb3VuZENvbG9yID0gbV9zdGF0ZS5zdHlsZS0+YmFja2dyb3VuZENvbG9y
KCk7Ci0gICAgfQorICAgIHN0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAg
ICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVsZUxp
c3Q+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVuc2ln
bmVkIHJ1bGVzVG9JbmNsdWRlKQpAQCAtMjA4MSw3ICsyMDY3LDcgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVu
dCogZSwgUHMKICAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6
Q29sbGVjdGluZ1J1bGVzKTsKIAogICAgIGluaXRFbGVtZW50KGUpOwotICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOworICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2
ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9JZCk7CiAKICAgICBNYXRjaFJlc3VsdCBkdW1teTsK
ICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewpAQCAtMjA5NCw1
MSArMjA4MCw1MCBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwogICAgIH0KIAogICAgIGlmICht
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NS
dWxlcykpIHsKLSAgICAgICAgbV9zdGF0ZS5zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1
ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2lu
T25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOwogCiAgICAgICAg
IC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBtYXRjaEF1dGhv
clJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCi0gICAgICAg
IG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAgICAgICAgbV9zdGF0ZS5zZXRTYW1l
T3JpZ2luT25seShmYWxzZSk7CiAgICAgfQogCiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9k
ZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKIAotICAgIHJldHVybiBtX3N0YXRl
LnJ1bGVMaXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS50YWtlUnVsZUxpc3QoKTsK
IH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURh
dGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK2lubGluZSBib29sIFN0
eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKQogewogICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgc3RhdGUuZHluYW1pY1BzZXVkbyA9IE5PUFNFVURP
OwogCiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CiAgICAg
ICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8g
ZWxlbWVudHMuCi0gICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAg
ICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNp
bmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJv
bSB0aGUgcnVsZSBoYXNoLgogICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5
IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1
bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkg
JiYgc3RhdGUuZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChydWxlRGF0
YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIHN0
YXRlLmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVE
YXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVs
ZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQorICAgICAgICBpZiAocnVs
ZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxlY3Rv
ckNoZWNrZXI6OnRhZ01hdGNoZXMoc3RhdGUuZWxlbWVudCgpLCBydWxlRGF0YS5zZWxlY3Rvcigp
LT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFT
ZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRl
LmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQorICAgICAgICBpZiAoIVNlbGVjdG9yQ2hl
Y2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3Ioc3RhdGUuZWxlbWVudCgp
LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9y
KCksIHN0YXRlLmVsZW1lbnQpOworICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFz
dENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgfQogCiAg
ICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
ID0gc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSwg
U2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVsZW1l
bnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwotICAg
IGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgc3Rh
dGUuZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAgIGNv
bnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZSgpOworICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2ggbWF0Y2ggPSBtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBkeW5h
bWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSk7CiAgICAgaWYgKG1hdGNo
ICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVk
b1N0eWxlICE9IHN0YXRlLmR5bmFtaWNQc2V1ZG8pCisgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxl
KCkgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5bGUoKSAhPSBkeW5hbWljUHNldWRvKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMTQ4LDcgKzIx
MzMsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3Ig
fHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fc3RhdGUu
cHNldWRvU3R5bGUgPSBOT1BTRVVETzsKKyAgICBtX3N0YXRlLnNldFBzZXVkb1N0eWxlKE5PUFNF
VURPKTsKIAogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3Rvcjsg
czsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKICAgICAgICAgaWYgKG1fc2VsZWN0b3JD
aGVja2VyLm1hdGNoZXMocywgcmVnaW9uRWxlbWVudCkpCkBAIC0yMTczLDcgKzIxNTgsNyBAQCBM
ZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlLCBSZQogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBw
bGljYXRpb25QYXNzIHBhc3M+CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wg
aXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHBy
b3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlw
ZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5n
KTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlz
dFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOwogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKIAogICAgIHVuc2lnbmVkIHBy
b3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7CkBAIC0yMjE3LDcgKzIy
MDIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgLy8gd2Ug
YXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09
IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLmxpbmVIZWln
aHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldExp
bmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYgKHByb3BlcnR5
ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjIzNCwxOCArMjIxOSwxOCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0LCBib29sCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7Ci0gICAgaWYgKHN0YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGlu
aykgeworICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGlu
aykgewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytp
KSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRp
ZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKICAgICAgICAgICAgIHVuc2ln
bmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlOwogICAg
ICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJn
dW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0gICAgICAg
ICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYg
U2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAgICAgICBzdGF0ZS5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAg
ICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGxpbmtNYXRj
aFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CiAKICAgICAgICAgICAgIGFw
cGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBt
YXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBz
dGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRl
bGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlID0gZmFsc2U7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSh0cnVlKTsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZShmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChpbnQgaSA9IHN0
YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewpAQCAtMjM2MSwxNSArMjM0NiwxNSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBXZSBjYW4gYnVpbGQgdXAgdGhlIHN0
eWxlIGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4gZWFybGllciBz
dHlsZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhhY3QKICAgICAgICAgLy8gc3R5bGUg
ZGVjbGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5oZXJpdGVkIHBy
b3BlcnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24gdGhlIAogICAg
ICAgICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMgbWVtb3J5IGJ5
IHJldXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgICAgc3RhdGUuc3R5bGUt
PmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAg
ICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVt
LT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50
KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0YXRlLnN0eWxlLT5p
bnNpZGVMaW5rKCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNvcHlOb25Jbmhlcml0ZWRGcm9t
KGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUucGFyZW50
U3R5bGUoKS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxl
LmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBF
SW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygpOwogICAg
ICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBpZGVudGljYWwg
aW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxlIHRoZW4gdGhl
CiAgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGljYWwgdG9vLiBX
ZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNhY2hlIGFuZCBh
cmUgZG9uZS4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0t
PnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRG
cm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVkIHBy
b3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KLSAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAKQEAgLTIzODcs
MTQgKzIzNzIsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBoaWdoLXByaW9y
aXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBw
cm9wZXJ0aWVzIGRlcGVuZCBvbi4KICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3Jp
dHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFs
IG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCi0gICAgc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7
CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRj
aFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdo
UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBs
eUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5
UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVz
ZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAKLSAgICBpZiAo
Y2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBz
dGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIHN0YXRlLmZvbnREaXJ0eSA9
IHRydWU7CisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5lZmZl
Y3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAg
IHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0g
ZmFsc2U7CiAgICAgfQogCkBAIC0yNDAyLDE4ICsyMzg3LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQs
IGNvbnN0CiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdo
ZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQg
b24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4K
LSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpICE9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKKyAgICBpZiAoY2FjaGVJ
dGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRl
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkg
PSBmYWxzZTsKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRp
ZXMuCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1h
dGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICAKICAgICAv
LyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUg
dGhlbSBsYXRlci4KLSAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICBzdGF0ZS5j
YWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKICAgICAKICAgICAvLyBOb3cgZG8gdGhlIGF1dGhv
ciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1wb3J0
YW50IHByb3BlcnRpZXMuCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVBy
b3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1
bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUlu
aGVyaXRlZE9ubHkpOwpAQCAtMjQyNCwxMyArMjQwOSwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBj
b25zdAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBz
dHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogICAgIAotICAgIEFTU0VSVCghc3Rh
dGUuZm9udERpcnR5KTsKKyAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKICAgICAKICAg
ICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
IWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLmVsZW1lbnQsIHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSkpCisgICAgaWYgKCFpc0NhY2hlYWJsZUlu
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50KCksIHN0YXRlLnN0eWxlKCksIHN0
YXRlLnBhcmVudFN0eWxlKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJv
cGVydGllc0NhY2hlKHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSwgY2FjaGVI
YXNoLCBtYXRjaFJlc3VsdCk7CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRl
LnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBTdHlsZVJ1bGVQ
YWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBAIC0yNDk1LDcgKzI0ODAsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxl
UGFnZSo+JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UoaW50
IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwot
ICAgIGlmICghbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpCisgICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAgICAgcmV0dXJu
IChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBAIC0yNTE2LDgg
KzI1MDEsOCBAQCBTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJbmRl
eCAqLykgY29uc3QKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAg
ICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBzdHlsZSk7Ci0g
ICAgbV9zdGF0ZS5zdHlsZSA9IHN0eWxlOworICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2
ZShkb2N1bWVudCgpLCAwLCBzdHlsZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShzdHlsZSk7CiAg
ICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7CiB9CiAKQEAgLTI2Mjks
NyArMjYxNCw3IEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxv
d2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNw
YWNpbmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkK
IHsKLSAgICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50ICYmIG1fc3RhdGUuZWxlbWVudC0+aXNTVkdF
bGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpICYmIG1fc3RhdGUuZWxlbWVu
dCgpLT5pc1NWR0VsZW1lbnQoKTsKIH0KIAogc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQpAQCAtMjY0NCw3ICsyNjI5
LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWwKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8
Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJj
ZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSwgc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAg
d29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRl
Z2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29u
dmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgaWYgKHdvcmtp
bmdMZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzUw
LDcgKzI3MzUsNyBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShDU1NWYWx1ZSog
dmFsdWUpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQogewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0
eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJp
YWJsZXMoKm1fc3RhdGUuc3R5bGUtPnZhcmlhYmxlcygpKSk7CisgICAgc3RkOjpwYWlyPENTU1By
b3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmlu
Z1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJsZXMoKSkpOwogCiAgICAgaWYgKGtu
b3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikpCiAgICAgICAgIHJldHVybjsgLy8g
Y3ljbGUgZGV0ZWN0ZWQuCkBAIC0yNzgzLDE5ICsyNzY4LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAjZW5k
aWYKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgYm9vbCBpc0luaGVyaXQgPSBz
dGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBp
c0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5vZGUg
JiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0
ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlz
SW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgp
ICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAgQVNTRVJUKCFpc0luaGVyaXQg
fHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAt
PiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUg
JiYgc3RhdGUucGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChzdGF0ZS5wYXJlbnROb2Rl
ICYmIHN0YXRlLnBhcmVudFN0eWxlKQorICAgIEFTU0VSVCghaXNJbmhlcml0IHx8IChzdGF0ZS5w
YXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUoKSkpOyAvLyBpc0luaGVyaXQgLT4gKHN0
YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSgpKQogCi0gICAgaWYgKCFzdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7Cisg
ICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIXN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJv
cGVydHkoaWQpKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBi
ZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxl
LT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJ
bmhlcml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlLT5zZXRIYXNF
eHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgIGlmIChpc0luaGVyaXQgJiYgIXN0
YXRlLnBhcmVudFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYg
IUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKKyAgICAgICAgc3RhdGUucGFy
ZW50U3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKIAogI2lm
IEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxl
KSB7CkBAIC0yODAzLDcgKzI3ODgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBDU1NWYXJpYWJs
ZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlVmFsdWUqPih2YWx1ZSk7
CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5pc0VtcHR5KCkpOwogICAgICAgICBB
U1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxl
LT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMjgyMiw3ICsy
ODA3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUuc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3RhdGUuc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0
IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGluZyBmcm9udC1l
bmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBi
YWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTI4MzYsNyArMjgy
MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhh
dCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAgICAgICAg
ICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJD
b250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0yODQ4LDE5ICsy
ODMzLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBp
LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSkt
PmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0
YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQp
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVl
Kj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRp
Y19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBA
IC0yODcxLDE3ICsyODU2LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oaXRlbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvbnRlbnRW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQg
Zm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCkt
PnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQtPmdldEF0dHJpYnV0ZShh
dHRyKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQodmFsdWUu
aXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0ZS5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMg
dGhlIHN0eWxlCiAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmFk
ZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC0yODkyLDI0ICsyODc3LDI0IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1
ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nh
c3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAg
ICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIo
bmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVU
eXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVl
LT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVv
dGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChPUEVO
X1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENv
bnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FV
T1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI5MTksMTYgKzI5MDQsMTYgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWRpZFNl
dCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5UXVvdGVzOgogICAgICAgICBpZiAo
aXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHN0YXRlLnBh
cmVudFN0eWxlLT5xdW90ZXMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90
ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMo
MCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7CkBAIC0yOTQ2LDE5ICsyOTMxLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy0+
YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOwor
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVh
dGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnRE
ZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAg
ICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVy
aWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZv
bnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTI5NjgsNyAr
Mjk1Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMg
ZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9z
cGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBm
b250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQpAQCAtMjk4Miw3ICsyOTY3LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFt
aWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMDYwLDI0
ICszMDQ1LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAvLyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEJhY2tncm91
bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+
YmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEJh
Y2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGUucGFy
ZW50U3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlh
bCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChp
c0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0
YXRlLnBhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlKCktPm1hc2tMYXllcnMoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKICAgICAgICAgaWYg
KGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5l
SGVpZ2h0KCkpOwotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExp
bmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAg
ICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKICAgICAgICAgICAgIHNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5p
dGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5n
cygpOwpAQCAtMzA4Niw4ICszMDcxLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgICAg
ICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAg
ICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogCiAgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250
RGVzY3JpcHRpb24pOwpAQCAtMzEwMyw3ICszMDg4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwog
CiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21T
cGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRp
b24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNl
U1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0
YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CkBAIC0zMTIxLDcgKzMx
MDYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBkYXRlRm9udCgpOwogICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsK
IAotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5n
ZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVp
Z2h0LmdldCgpKTsKIAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KQEAgLTMxMzMsMTEgKzMxMTgs
MTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7
CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9w
ZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5zZXRU
ZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcg
U2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNldEJveFNoYWRvdyhzdGF0ZS5wYXJl
bnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFy
ZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0
U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+
dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHls
ZSgpLT5zZXRCb3hTaGFkb3coc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkpKSA6
IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZl
VmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJv
cGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBz
dGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlk
ID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3co
bnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMx
NDcsMjkgKzMxMzIsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVl
LT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVl
KTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAg
ICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdl
dCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGlu
dCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0
ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwot
ICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21G
YWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0
b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5z
cHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRv
d1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAg
ICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChzdGF0ZS5zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlLT5jb2xv
cigpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5bGUoKSkKKyAgICAgICAgICAgICAg
ICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAKICAgICAgICAgICAgIE93blB0cjxT
aGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQo
eCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkp
OwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwg
aS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBl
bnRyeQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc2hhZG93
RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlz
IG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkp
OyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFz
ZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZp
cnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxl
Ojppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJv
eFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMxODAsMTMgKzMxNjUsMTMgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVj
dGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVj
dFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgp
KQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0
KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZl
cnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNl
dE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRl
Z2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwog
ICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0
cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFs
dWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAK
LSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFz
ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAv
LyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KQEAgLTMxOTUsMjkgKzMxODAsMjkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29s
b3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBz
dGF0ZS5wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0g
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKHN0YXRlLnBhcmVudFN0
eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNW
YWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENv
bHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlU3R5bGUoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUucGFyZW50
U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlh
bCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAgICAgICAgIGlmICghaXNJbmhlcml0
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZURp
cmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAg
c3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1
ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3Rh
dGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7
Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5
bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVl
ZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlRGlyZWN0aW9uKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KHN0YXRlLnBhcmVudFN0eWxl
KCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1
ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlU3BlZWQoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFy
cXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUJlaGF2
aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVCZWhhdmlvcigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjogewogICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVl
TG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJ
bmZpbml0ZSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0x
KTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCiAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZh
bHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChw
cmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpAQCAtMzIyNywxOSArMzIx
MiwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRN
YXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUg
ZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQo
ODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMu
IFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4K
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUt
PmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNw
ZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzI0
OSwxOSArMzIzNCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8g
MXB4LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQo
TGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklF
IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3Jl
bWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZp
eGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVl
ZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5n
dGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVu
Z3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAo
IW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjcwLDExICszMjU1LDExIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8p
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9tKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUtPmxv
Y2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlv
bihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkpOwogICAgICAgICBzZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyOTMsNyArMzI3
OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9h
cmRSZWdpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVn
aW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzMwMywxMCArMzI4OCwxMCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
CiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxl
IChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgo
cmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUp
OwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+
cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwotICAg
ICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRv
bSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVu
Z3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0g
Y29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0
VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCkpOwogCiAgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAg
ICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zMzE4LDEzICszMzAzLDEzIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9u
LT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRS
ZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3As
IHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFz
aGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxz
ZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVn
aW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/
IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJv
YXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJl
bCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRy
dWUpOwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRS
ZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRS
ZWdpb25zKHRydWUpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzMzLDggKzMzMTgs
OCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246IHsK
ICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXREcmFnZ2Fi
bGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/
IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOwotICAgICAgICBz
dGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBE
cmFnZ2FibGVSZWdpb25Ob0RyYWcpOworICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNB
bm5vdGF0ZWRSZWdpb25zKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBA
IC0zMzUwLDIxICszMzM1LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0
ICo9IDM7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAg
ICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVy
YXRpb25zKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsK
KyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZTogewpAQCAtMzM3NCwzNCArMzM1
OSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFBlcnNwZWN0aXZlKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVl
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQg
Y29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAgICAg
ICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4w
ZikKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZh
bHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0
aXZlVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5j
bGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKHN0YXRlLnBhcmVudFN0eWxlLT5hbmlt
YXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEFuaW1hdGlvbnMo
c3RhdGUucGFyZW50U3R5bGUoKS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFs
KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyVHJhbnNpdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhz
dGF0ZS5wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+dHJhbnNpdGlvbnMo
KSk7CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogewpAQCAtMzQxMCw3ICszMzk1LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIENvbG9yIGNvbCA9
IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3RhdGUu
c3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYKQEAgLTM0MTksNyArMzQwNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZs
b3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5n
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCkBAIC0zNDYyLDcgKzM0NDcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
eExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NT
UHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZS0+
ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAgQ1NTUHJv
cGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0
eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlKCktPndyaXRpbmdN
b2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQpOwogICAgICAgICByZXR1cm4gYXBw
bHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwogICAgIH0KQEAgLTM0OTcsOCArMzQ4Miw4IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRl
IHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCAmJiBzdGF0
ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
KQotICAgICAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVT
ZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKKyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAm
JiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkp
CisgICAgICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1l
bnRFbGVtZW50KHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTE0LDcgKzM0
OTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29u
dGFpbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFp
biwgTGluZUJveENvbnRhaW4pCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zNTIyLDIxICszNTA3LDIxIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTTGluZUJveENv
bnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0YXRpY19jYXN0PENTU0xpbmVCb3hD
b250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29u
dGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDU1MgRm9udHMgTW9kdWxlIExldmVsIDMKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczogewogICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5t
YWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIENT
U1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAg
ICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVT
ZXR0aW5nczo6Y3JlYXRlKCk7CiAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKQEAg
LTM1NTYsOCArMzU0MSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZp
bHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYg
KGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlv
bnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNTY1LDE0ICszNTUwLDE0IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwogICAg
ICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRDb2x1bW5z
KHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQ29sdW1ucyh0cmFj
a1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7
CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3Rh
dGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZFJv
d3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRSb3dzKHRyYWNr
U2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTgwLDE0ICszNTY1LDE0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAgICAgICAgIGlmICgh
Y3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewogICAgICAgICBH
cmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwg
cm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRJ
dGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJdGVtUm93KHJvdyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1w
bGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCkBAIC0zOTA5LDE0ICsz
ODk0LDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1h
Z2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGlu
Z0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFn
ZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkp
IHsKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwg
dmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJv
cGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUo
dmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZh
bHVlKTsKQEAgLTM5MjcsNyArMzkxMiw3IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVS
ZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVyCiB7CiAg
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdl
U2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwg
dmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJv
cGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBA
IC0zOTM2LDEzICszOTIxLDEzIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZl
cjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3Vt
ZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAg
ICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOwor
ICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZh
bHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG1fc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5z
dHlsZSgpOwogCiAgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1
cm47CkBAIC00MDE0LDE1ICszOTk5LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6
ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgfQogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwog
ICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3Vt
ZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwotICAgIG1fc3RhdGUuc3R5bGUtPnNldExp
bmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgIG1fc3RhdGUu
bGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQo
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIG1fc3RhdGUuc2V0TGluZUhl
aWdodFZhbHVlKDApOwogICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
fQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZS5n
ZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21S
dWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxlKCksIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwog
fQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRl
U2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC00MjMx
LDE1ICs0MjE2LDE1IEBAIENvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWCiAgICAgY2FzZSAwOgogICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAg
ICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigpOworICAgICAg
ICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudC0+aXNMaW5rKCkgJiYg
Zm9yVmlzaXRlZExpbmspID8gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtD
b2xvcigpIDogc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAg
IHJldHVybiAoc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBz
dGF0ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBzdGF0ZS5kb2N1bWVudCgpLT5s
aW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAg
cmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAg
ICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAg
ICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5jb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUu
c3R5bGUoKS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gY29sb3JGb3JD
U1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDU3NCwxNyArNDU1OSwxNyBAQCBzdGF0aWMgRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0
Q1NTRmlsdGVyVmFsdQogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50
cygpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoIXN0YXRlLnN0eWxl
LT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAg
ICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1
bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9w
ZXJhdGlvbnMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIFZlY3Rv
cjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5
bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkp
OwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmls
dGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKICAgICAgICAgICAgIFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKIAotICAgICAgICAgICAgV2ViS2l0Q1NT
U1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmdldChy
ZWZlcmVuY2VGaWx0ZXIpLmdldCgpOworICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRW
YWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuZ2V0KHJlZmVyZW5jZUZp
bHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGNhY2hlZERvY3VtZW50ID0g
dmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwpAQCAtNDU5NSw3ICs0NTgwLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiAgICAgICAgICAg
ICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRy
KG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVudCkpKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CisgICAg
c3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmNsZWFyKCk7CiB9CiAjZW5kaWYKIApAQCAtNDYx
MSwxOCArNDU5NiwxOCBAQCBTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVgogewogICAgIFN0eWxlU2hh
ZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYgKHNo
YWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX3N0YXRlLmhhc1Bl
bmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVy
cyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnN0eWxlLT5oYXNGaWx0ZXIo
KSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIW1fc3RhdGUuc3R5bGUo
KS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
ID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwor
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUu
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZS0+bXV0
YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRl
cigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3Bl
cmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBm
aWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmls
dGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNU
T00pIHsKQEAgLTQ2MzksNyArNDYyNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBtX3N0YXRl
Lmhhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hh
ZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFy
YXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIpCkBAIC00NjgxLDcgKzQ2NjYsNyBAQCBQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0
ZXJUcmFuc2Zvcm1QYXJhbQogewogICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJh
bWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRl
cjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAg
ICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0ZS5zdHlsZS5nZXQoKSwg
bV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICBjcmVhdGVUcmFuc2Zv
cm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRp
b25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgp
OwogfQpAQCAtNDkzMSwxMiArNDkxNiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVu
dFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1l
bnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5lbGVt
ZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7Cisg
ICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3Zn
RG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVy
YXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxV
UklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZWxlbWVudC0+ZG9j
dW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxV
UklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZG9jdW1lbnQoKSkp
IHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChv
cGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1
bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdEb2N1bWVudFZhbHVlLT5j
YWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPnNldENh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKSkpOwogICAgICAg
ICAgICAgfQpAQCAtNTA0MCw3ICs1MDI1LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAog
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0
eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRS
ZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KTsKIAogICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKSkgewogICAgICAgICBD
U1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7
CkBAIC01MDcwLDIzICs1MDU1LDIzIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluCiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogewotICAgIGlmIChtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRp
bmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdl
UHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBQZW5k
aW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0lt
YWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0
Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0g
bV9zdGF0ZS5zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7
IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAg
ICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nl
c3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0g
YmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3Vu
ZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1h
Z2UoKSkKICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExh
eWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZv
ciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1f
c3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBj
b250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250
ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0YXRlLnN0eWxlKCktPmNvbnRl
bnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRl
bnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUwOTksNyArNTA4NCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYg
KEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxlLT5jdXJzb3JzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdGF0ZS5zdHlsZSgpLT5j
dXJzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNv
ckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1
cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CkBAIC01MTExLDE3
ICs1MDk2LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RT
dHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+bGlzdFN0eWxlSW1h
Z2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxl
LT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+
bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlz
UGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaXN0
U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdl
Kj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNl
OiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAm
JiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQ
ZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxl
LT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUo
KS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291
cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgp
LT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChT
dHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlKCktPmJveFJlZmxlY3Qo
KSkgewogICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSBy
ZWZsZWN0aW9uLT5tYXNrKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgp
ICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwpAQCAt
NTEzMSwxMiArNTExNiwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Vz
KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0
eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VT
b3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxl
LT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHls
ZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwor
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYg
bV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
KyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShs
b2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5z
dHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAg
ICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlLT5hY2Nlc3NN
YXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsK
KyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCkt
PmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5l
eHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xh
eWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNr
TGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MTQ3LDcg
KzUxMzIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigp
OworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKIHZv
aWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKaW5kZXggODRjM2NkMWZjMDM3ZGFiMGRmZDc1YThmZmQ3ZDhiOWE1YzQ5NzNm
OC4uODY1MWVkY2E4NWZkMTNiMjZkYWM2ZDcyNDIyN2NlZjMzMzhiNmY5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xNjQsMjAgKzE2NCwxMiBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCos
IENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVt
ZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5lbGVtZW50OyB9CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHlsZSgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVt
ZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQor
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsg
fQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0K
LSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBw
YXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBzZXRab29tKGZs
b2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShmKTsgfQotICAg
IHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0
KGJvb2wgYikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVz
dChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUp
IHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRP
cmllbnRhdGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0T3JpZW50
YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZTsgfQorICAgIGJvb2wgaGFzUGFyZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZSgpOyB9CiAKICAgICB2b2lkIHJlc2V0
QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVk
IGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mKTsKQEAgLTIw
MSw3ICsxOTMsNiBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9pZCBpbml0Rm9y
U3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1
ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2
b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHls
ZSgpOwpAQCAtMzA5LDggKzMwMCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkanVzdFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEq
IHJ1bGUpIHsgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9Ci0KICAgICBzdHJ1
Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFzdFJ1
bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KICAgICAgICAgaW50JiBmaXJzdFJ1bGVJbmRleDsK
QEAgLTM4Miw3ICszNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygp
OwogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAK
LSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmKTsKICAgICBib29sIGNoZWNrUmVnaW9uU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25F
bGVtZW50KTsKICAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1
bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHlsZUFwcGxpY2F0aW9uUGFzcyB7CkBA
IC00MzIsNzIgKzQyMSwxNjcgQEAgcHVibGljOgogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdGF0ZSk7CiAgICAgcHVibGljOgogICAgICAgICBTdGF0ZSgpCi0gICAgICAgIDogZWxlbWVu
dCgwKQotICAgICAgICAsIHN0eWxlZEVsZW1lbnQoMCkKLSAgICAgICAgLCBwYXJlbnROb2RlKDAp
Ci0gICAgICAgICwgcGFyZW50U3R5bGUoMCkKLSAgICAgICAgLCByb290RWxlbWVudFN0eWxlKDAp
Ci0gICAgICAgICwgcmVnaW9uRm9yU3R5bGluZygwKQotICAgICAgICAsIHNhbWVPcmlnaW5Pbmx5
KGZhbHNlKQotICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQotICAgICAgICAsIGVsZW1l
bnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAgICAgLCBkaXN0cmlidXRlZFRvSW5zZXJ0
aW9uUG9pbnQoZmFsc2UpCi0gICAgICAgICwgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGZh
bHNlKQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQotICAgICAg
ICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisgICAgICAgIDogbV9l
bGVtZW50KDApCisgICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCisgICAgICAgICwgbV9wYXJl
bnROb2RlKDApCisgICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQorICAgICAgICAsIG1fcm9vdEVs
ZW1lbnRTdHlsZSgwKQorICAgICAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAgICAgICAs
IG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwgbV9wc2V1ZG9TdHlsZShOT1BTRVVE
TykKKyAgICAgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKKyAgICAgICAg
LCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAgICAgLCBtX2VsZW1l
bnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBtX2FwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZShmYWxzZSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgICwgbV9oYXNQ
ZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIG1fbGluZUhlaWdodFZhbHVl
KDApCisgICAgICAgICwgbV9mb250RGlydHkoZmFsc2UpCisgICAgICAgICwgbV9oYXNVQUFwcGVh
cmFuY2UoZmFsc2UpCisgICAgICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExh
eWVyKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50
Kik7CisgICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCosIEVsZW1lbnQq
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKKyAg
ICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZWxlbWVudCA9IDA7
CisgICAgICAgICAgICBtX3N0eWxlZEVsZW1lbnQgPSAwOworICAgICAgICAgICAgbV9wYXJlbnRT
dHlsZSA9IDA7CisgICAgICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAgICAgICAgbV9y
ZWdpb25Gb3JTdHlsaW5nID0gMDsKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSAwOworICAgICAg
ICAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllcy5jbGVhcigpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgLCBo
YXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMg
PSBmYWxzZTsKICNlbmRpZgotICAgICAgICAsIGxpbmVIZWlnaHRWYWx1ZSgwKQotICAgICAgICAs
IGZvbnREaXJ0eShmYWxzZSkKLSAgICAgICAgLCBoYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAg
ICAgICwgYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikgeyB9CisjaWYgRU5BQkxF
KENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9j
dW1lbnRzLmNsZWFyKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsgfQorICAgICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgICAg
IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlZEVs
ZW1lbnQ7IH0KKyAgICAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZSkgeyBtX3N0eWxlID0gc3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiB0YWtlU3R5bGUoKSB7IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsgfQorCisgICAg
ICAgIFN0YXRpY0NTU1J1bGVMaXN0KiBlbnN1cmVSdWxlTGlzdCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3Rh
dGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fcnVsZUxpc3Qu
Z2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiB0YWtl
UnVsZUxpc3QoKSB7IHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsgfQorCisgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0K
KyAgICAgICAgdm9pZCBzZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIHsg
bV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOyB9CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5
bGU7IH0KKworICAgICAgICB2b2lkIHNldFJlZ2lvbkZvclN0eWxpbmcoUmVuZGVyUmVnaW9uKiBy
ZW5kZXJSZWdpb24pIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVuZGVyUmVnaW9uOyB9CisgICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
aW9uRm9yU3R5bGluZzsgfQorICAgICAgICB2b2lkIHNldFNhbWVPcmlnaW5Pbmx5KGJvb2wgaXNT
YW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gaXNTYW1lT3JpZ2luT25seTsgfQor
ICAgICAgICBib29sIGlzU2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7IHJldHVybiBtX3NhbWVPcmln
aW5Pbmx5OyB9CisgICAgICAgIHZvaWQgc2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvSWQp
IHsgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lkOyB9CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9TdHlsZTsgfQorICAgICAgICBFSW5zaWRlTGlu
ayBlbGVtZW50TGlua1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9
CisgICAgICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IH0KKyAgICAgICAgdm9pZCBzZXRFbGVt
ZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoYm9vbCBpc0FmZmVjdGVkKSB7IG1fZWxlbWVudEFmZmVj
dGVkQnlDbGFzc1J1bGVzID0gaXNBZmZlY3RlZDsgfQorICAgICAgICBib29sIGVsZW1lbnRBZmZl
Y3RlZEJ5Q2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzOyB9CiAgICAgICAgIAotcHVibGljOgorICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUgPSBpc0FwcGx5OyB9CisgICAgICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlID0gaXNBcHBseTsgfQorICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAg
ICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAgICAgICBQZW5kaW5nSW1h
Z2VQcm9wZXJ0eU1hcCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsgcmV0dXJuIG1fcGVuZGlu
Z0ltYWdlUHJvcGVydGllczsgfQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNW
RykKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwJiBwZW5kaW5nU1ZHRG9jdW1lbnRzKCkg
eyByZXR1cm4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgICAgIHZvaWQgc2V0SGFzUGVuZGluZ1NoYWRlcnMoYm9vbCBoYXNQZW5k
aW5nU2hhZGVycykgeyBtX2hhc1BlbmRpbmdTaGFkZXJzID0gaGFzUGVuZGluZ1NoYWRlcnM7IH0K
KyAgICAgICAgYm9vbCBoYXNQZW5kaW5nU2hhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUGVu
ZGluZ1NoYWRlcnM7IH0KKyNlbmRpZgorCisgICAgICAgIHZvaWQgc2V0TGluZUhlaWdodFZhbHVl
KENTU1ZhbHVlKiB2YWx1ZSkgeyBtX2xpbmVIZWlnaHRWYWx1ZSA9IHZhbHVlOyB9CisgICAgICAg
IENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xpbmVIZWlnaHRW
YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEZvbnREaXJ0eShib29sIGlzRGlydHkpIHsgbV9mb250
RGlydHkgPSBpc0RpcnR5OyB9CisgICAgICAgIGJvb2wgZm9udERpcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGlydHk7IH0KKworICAgICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3Vu
ZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+
aGFzQXBwZWFyYW5jZSgpOworICAgICAgICAgICAgaWYgKG1faGFzVUFBcHBlYXJhbmNlKSB7Cisg
ICAgICAgICAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7CisgICAgICAg
ICAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7
CisgICAgICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBib29sIGhhc1VBQXBw
ZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgICAgIEJv
cmRlckRhdGEgYm9yZGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQorICAg
ICAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91
bmREYXRhOyB9CisgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2dyb3VuZENvbG9yOyB9CisKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQor
ICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsg
cmV0dXJuIG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIHZvaWQg
c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOyB9CisgICAgICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9
IG1fc3R5bGUtPnNldFpvb20oZik7IH0KKyAgICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZs
b2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQor
ICAgICAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBt
X3N0eWxlLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgICAgICB2b2lkIHNldFdyaXRpbmdN
b2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNl
dFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgICAgICB2b2lkIHNldFRleHRPcmllbnRh
dGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1f
c3R5bGUtPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisKKyAgICAgICAg
VmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21h
dGNoZWRSdWxlczsgfQorICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRh
KiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgogICAgICAgICAvLyBGSVhNRShidWcgMTA4NTYzKTogdG8gbWFrZSBpdCBlYXNpZXIg
dG8gcmV2aWV3LCB0aGVzZSBtZW1iZXIKICAgICAgICAgLy8gdmFyaWFibGVzIGFyZSBwdWJsaWMu
IEhvd2V2ZXIgd2Ugc2hvdWxkIGFkZCBtZXRob2RzIHRvIGFjY2VzcwogICAgICAgICAvLyB0aGVz
ZSB2YXJpYWJsZXMuCi0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGU7Ci0gICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQ7
Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGU7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGU7Cisg
ICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBt
X3N0eWxlOworICAgICAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisgICAgICAg
IENvbnRhaW5lck5vZGUqIG1fcGFyZW50Tm9kZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIG1fcGFy
ZW50U3R5bGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CiAgICAg
ICAgIAotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgICAgIGJv
b2wgc2FtZU9yaWdpbk9ubHk7Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOwotCi0gICAg
ICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGU7CisgICAgICAgIFJlbmRlclJlZ2lvbiog
bV9yZWdpb25Gb3JTdHlsaW5nOworICAgICAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7CisgICAg
ICAgIFBzZXVkb0lkIG1fcHNldWRvU3R5bGU7CiAKLSAgICAgICAgYm9vbCBkaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQ7CisgICAgICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsK
IAotICAgICAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsKKyAgICAgICAgYm9v
bCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAotICAgICAgICBQc2V1ZG9JZCBkeW5h
bWljUHNldWRvOworICAgICAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOwog
CiAgICAgICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgZm9yIGFuIGVsZW1lbnQsCiAgICAgICAgIC8vIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNl
ZCBmb3IgbWVyZ2Ugc29ydGluZy4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+
IG1hdGNoZWRSdWxlczsKLSAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlz
dDsKKyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwor
ICAgICAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CiAKLSAgICAgICAg
Ym9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGU7CiAKLSAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgcGVuZGluZ0ltYWdlUHJvcGVy
dGllczsKKyAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5n
U2hhZGVyczsKKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwogI2VuZGlmCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgICAgICBQZW5kaW5nU1ZHRG9j
dW1lbnRNYXAgcGVuZGluZ1NWR0RvY3VtZW50czsKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50
TWFwIG1fcGVuZGluZ1NWR0RvY3VtZW50czsKICNlbmRpZgotICAgICAgICBDU1NWYWx1ZSogbGlu
ZUhlaWdodFZhbHVlOwotICAgICAgICBib29sIGZvbnREaXJ0eTsKKyAgICAgICAgQ1NTVmFsdWUq
IG1fbGluZUhlaWdodFZhbHVlOworICAgICAgICBib29sIG1fZm9udERpcnR5OwogCi0gICAgICAg
IGJvb2wgaGFzVUFBcHBlYXJhbmNlOwotICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGE7Ci0g
ICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yOworICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgICAgICBCb3JkZXJE
YXRhIG1fYm9yZGVyRGF0YTsKKyAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Cisg
ICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogICAgIH07CiAKICAgICBzdGF0aWMgUmVu
ZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2
YWlsYWJsZTsgfQpAQCAtNTEwLDE1ICs1OTQsMjMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwogCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAg
IGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0lu
dExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogCiAgICAgQ1NTVG9TdHls
ZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNT
U09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckNTU09NV3JhcHBlcnM7IH0KLQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0
ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX3N0YXRlLnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAg
dm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNl
dFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9u
KFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50
YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorICAgIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186753</attachid>
            <date>2013-02-05 21:40:18 -0800</date>
            <delta_ts>2013-02-06 19:45:06 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-108563-20130206143655.patch</filename>
            <type>text/plain</type>
            <size>142229</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjY1ZTMyNWZiZWI1ZDYy
MDljZmFjNDU1YmM5OWQ2NzA3NTYxNWQ5OC4uNGZlZmVmOTg5MzhmMmJkZWNiODczNzBjMWZiYTVm
ZGI0ZTU4YjhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMi0wNSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmVjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcywgYmVjYXVzZSBtb3N0IG9mIHRo
ZSBtZW1iZXIgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuCisgICAgICAgIFdlIGRvbid0IG5lZWQg
dG8gdXBkYXRlIHRob3NlIHJlYWQtb25seSB2YXJpYWJsZXMgd2hpbGUgcmVzb2x2aW5nCisgICAg
ICAgIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRv
IGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAg
ICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3RhdGUncyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAg
ICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0
IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9u
ZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZpb3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAg
ICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxsIGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50
U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNldWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMg
b24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgZHluYW1pY1BzZXVkbywg
YmVjYXVzZSBkeW5hbWljUHNldWRvIGluCisgICAgICAgIFN0YXRlIGNsYXNzIGlzIGp1c3QgdXNl
ZCBmb3IgcmV0dXJuaW5nIG1hdGNoZWQgcHNldWRvIHN0eWxlIGZyb20KKyAgICAgICAgdGhpcyBy
dWxlTWF0Y2hlcyB0byBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIE5vIG5lZWQgdG8ga2Vl
cAorICAgICAgICBkeW5hbWljUHNldWRvIHdoaWxlIHJlc29sdmluZyBzdHlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
UmVtb3ZlZCBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE8sIGJlY2F1c2UgdGhpcyBtZXRob2QgdXNl
cyBqdXN0CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlZC4gU2VsZWN0b3JDaGVja2Vy
IGRvZXNuJ3Qgc2VlIFN0eWxlUmVzb2x2ZXIncworICAgICAgICBtX3BzZXVkb1N0eWxlIGRpcmVj
dGx5LiBOZWVkIHRvIHVzZSBTZWxlY3RvckNoZWNrZXJDb250ZXh0LiBTbyBubworICAgICAgICBu
ZWVkIHRvIHNldCBtX3BzZXVkb1N0eWxlIHRvIGJlIE5PUFNFVURPLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNr
QnJlYWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Omhhc1BhcmVudE5vZGUpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAgICAg
TW9kaWZpZWQgdG8gdXNlIGNsZWFyIGF0IHRoZSBlbmQgb2Ygc3R5bGVGb3JFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnRha2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0UGFyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpzZXRSZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6aXNTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0RWxlbWVudEFmZmVjdGVk
QnlDbGFzc1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpl
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRIYXNQZW5kaW5nU2hh
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aGFzUGVuZGlu
Z1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldExp
bmVIZWlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6
bGluZUhlaWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmZvbnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2Fj
aGVCb3JkZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpoYXNVQUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OmJvcmRlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OmJhY2tncm91bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpiYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpTdGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAg
TW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6Om1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2
ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpm
b250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50
Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZv
bnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29t
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2ZVpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0VGV4dFNpemVBZGp1c3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0V3JpdGluZ01vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgVGhl
c2UgZm9udERlc2NyaXB0aW9uLCAuLi4sIHNldFRleHRPcmllbnRhdGlvbiBhcmUgd3JhcHBlcnMg
dG8KKyAgICAgICAgaW52b2tlIFN0YXRlJ3MgbWV0aG9kcy4gU3R5bGVCdWlsZGVyIHN0aWxsIGRl
cGVuZHMgb24gU3R5bGVSZXNvbHZlcgorICAgICAgICBhbmQgaW52b2tlcyB0aGVzZSBtZXRob2Rz
LiBTbyB3ZSBuZWVkIHRoZXNlIHdyYXBwZXJzLgorCiAyMDEzLTAyLTA1ICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgRU5VTV9DTEFTU19CRUdJTigpIG1h
Y3JvIHRvIEVOVU1fQ0xBU1MoKSwgYW5kIG1ha2UgRGF0YWJhc2VUeXBlIGEgc3Ryb25nIGVudW0u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggYWI1NmY2
NjExNzk3ZmQ5NDc3OTZmNDhmMzEzOWU3ODEzYTk3ZTgzZC4uZDFlOWM2MGQzYjlkZWQ3ZTIwZmM3
NjVlOWM3N2E0MzE2ZTNiNmQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NT
U1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNl
bGVjdG9yLmNwcApAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9w
LCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSBcCiB7IFwKLSAgICBzdmdzdHlsZS0+c2V0IyNQcm9w
KHN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUt
PnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCiAg
ICAgcmV0dXJuOyBcCiB9CiAKQEAgLTExMCwxMCArMTEwLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CiAKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIFNWR1JlbmRl
clN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIFNW
R1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7
CiAKLSAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5o
ZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1
ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsK
KyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhl
cml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVl
KCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7
CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3Bl
cnRpZXMgaW50byB0aGVpcgogICAgIC8vIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kIFJlbmRlclN0
eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyhlLmcuIGJvcmRlciwKQEAgLTIzMCw3ICsyMzAsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgp
OworICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9
IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCk7CiAgICAgICAgICAgICAgICAgc3Znc3R5
bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJl
bnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgp
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0y
NDAsMTQgKzI0MCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCog
c3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWlu
dC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFp
bnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1Bh
aW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlTdHJva2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVy
aXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5
bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5z
dmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQ
YXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWlu
dENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yNTcsNyArMjU3LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNT
VkdQYWludCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0
cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1
ZShzdmdQYWludCwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+
cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0
eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdV
UklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlclN0YXJ0
UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5n
KHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJNaWQ6CkBAIC0zNzgsNyArMzc4LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VS
SVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVt
ZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVz
b3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMs
IHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJFbmQ6CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJl
ZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50
LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3Vy
Y2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0
YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOgpAQCAtNDI5LDcgKzQyOSw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVl
KCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZl
cmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+
ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNW
R1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5k
b2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TWFzazoKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAg
ICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVu
dElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsK
KyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6
OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNs
aXBQYXRoOgpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBz
ID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZp
ZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVu
dElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QW5jaG9y
OgpAQCAtNDc4LDE0ICs0NzgsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3RvcENvbG9yLCBTdG9wQ29sb3IpOwog
ICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0
PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0
aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRp
bmdDb2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwobGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUt
PmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xv
cihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUp
LCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRM
aWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29s
b3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01
MTAsNyArNTEwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmxvb2RDb2xvciwgRmxvb2RDb2xvcik7CiAgICAgICAg
ICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0Nv
bG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nh
c3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVu
dGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU1MCw3ICs1NTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFkb3c6
IHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN2
Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIoc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCkt
PnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgp
LT5zaGFkb3coKSkgOiAwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRT
aGFkb3coYWRvcHRQdHIoc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkg
PyBuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+c2hhZG93
KCkpIDogMCkpOwogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkg
Ly8gaW5pdGlhbCB8IG5vbmUKICAgICAgICAgICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNo
YWRvdyhudWxscHRyKTsKIApAQCAtNTY1LDkgKzU2NSw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNo
YWRvd1ZhbHVlKj4oZmlyc3RWYWx1ZSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihp
dGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpLAotICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50
PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAg
ICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSA6IDA7CisgICAgICAg
ICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSwKKyAgICAgICAgICAgICAgICBpdGVt
LT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVy
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVt
LT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KGl0ZW0tPmNvbG9yLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRl
eCAxODI5MGYzODU2NDg5NTM3NmU1ODk2YWNhMjQwYTgwMDc3MjYyNzNjLi41ZWJmY2ZkNjI1OTQz
MWQ2YzE2OTEwZjdjMzFhZTk2MzMzZjhiOGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCkBAIC0xOTQsMTQgKzE5NCwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsg
XAotICAgIG1fc3RhdGUuc3R5bGUtPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0eWxlLT5wcm9w
KCkpOyBcCisgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3AobV9zdGF0ZS5wYXJlbnRTdHls
ZSgpLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAogSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkg
XAogaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9wKFJlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXQjI1By
b3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApA
QCAtNDc1LDExICs0NzUsMTEgQEAgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGlu
Z1VBUnVsZXMgPSBmYWxzZTsKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVs
ZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdl
KQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fc3Rh
dGUuZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCgpKTsKIAogICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQ7
Ci0gICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQ7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKKyAgICBTdHlsZWRFbGVt
ZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpOwogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgcHNldWRvSWQgPSBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlm
ICghcHNldWRvSWQuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsK
QEAgLTUxOSwxMyArNTE5LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSCiAKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1
ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewotICAgIGlmICghbV9z
dGF0ZS5yZWdpb25Gb3JTdHlsaW5nKQorICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5n
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBtYXRjaFJlcXVlc3Qu
cnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3Rv
ciogcmVnaW9uU2VsZWN0b3IgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3Rv
cnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvcjsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2Vs
ZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lv
bkZvclN0eWxpbmctPm5vZGUoKSkpKSB7CisgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9y
KHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKCktPm5vZGUoKSkpKSB7CiAgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9
IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkp
LnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQocmVnaW9uUnVsZXMpOwogICAgICAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRj
aFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5n
ZSk7CkBAIC01MzYsMjQgKzUzNiwyMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZQogdm9pZCBT
dHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCkKIHsKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5tYXRj
aGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0
Y2hlZFJ1bGVzID0gc3RhdGUubWF0Y2hlZFJ1bGVzKCk7CisgICAgaWYgKG1hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAog
ICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFzdGF0ZS5ydWxlTGlzdCkKLSAgICAgICAgICAg
IHN0YXRlLnJ1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgc3RhdGUucnVsZUxpc3QtPnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRS
dWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBz
dGF0ZS5lbnN1cmVSdWxlTGlzdCgpLT5ydWxlcygpLmFwcGVuZChtYXRjaGVkUnVsZXNbaV0tPnJ1
bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBs
aXN0IG9mIGRlY2xhcmF0aW9ucy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUu
bWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zdHlsZSAmJiBz
dGF0ZS5tYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcigp
KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRj
aGVkUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9w
ZXJ0aWVzKCksIHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBzdGF0ZS5tYXRjaGVkUnVs
ZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdo
aXRlbGlzdFR5cGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxl
cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKSAmJiBtYXRjaGVkUnVs
ZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVz
KHJlc3VsdCwgbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbWF0Y2hlZFJ1
bGVzW2ldLT5ydWxlKCksIG1hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBtYXRjaGVk
UnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAgICB9CiB9CiAKQEAgLTU2NCwx
MiArNTYzLDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVk
IGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAg
aWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVy
LT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fc3RhdGUuZWxlbWVudCkpIHsKLSAgICAgICAgYm9v
bCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5
QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVz
KCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fc3RhdGUuZWxl
bWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9zdGF0ZS5lbGVt
ZW50KCktPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgICAgICBib29sIGRv
Y3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CisgICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgICAg
ICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6
U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsKQEAg
LTYwMCw3ICs1OTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogaW5saW5lIGJvb2wgU3R5
bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCiB7CiAj
aWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Nj
b3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0
ZS5lbGVtZW50KTsKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZl
ci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQo
KSk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtNjExLDE3ICs2MTAsMTcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAgIEFT
U0VSVChtX3Njb3BlUmVzb2x2ZXIpOwogCi0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwog
CiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7Ci0gICAgbV9zY29wZVJlc29sdmVy
LT5tYXRjaEhvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQsIG1hdGNoZWRSdWxlcyk7CisgICAgbV9z
Y29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQoKSwgbWF0Y2hlZFJ1
bGVzKTsKICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkg
ewogICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxl
UmFuZ2UoKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNo
ZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9zdGF0ZS5lbGVtZW50KSwgcnVs
ZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNo
ZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1wdHlSdWxlcywgbV9zdGF0ZS5lbGVtZW50KCkpLCBy
dWxlUmFuZ2UpOwogICAgIH0KICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0
KTsKICNlbHNlCkBAIC02MzIsMTAgKzYzMSwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
SG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MTsKIAotICAgIGlmICghbV9zdGF0ZS5lbGVtZW50KQorICAgIGlmICghbV9zdGF0ZS5lbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMu
CkBAIC02NTMsNyArNjUyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogICAgIGlmICghbV91
c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIHJl
c3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIDE7CiAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3VzZXJTdHlsZS5nZXQoKSwg
aW5jbHVkZUVtcHR5UnVsZXMpOwpAQCAtNjY2LDcgKzY2NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgUnVsZVNldCogcnVsZXMpCiB7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0
LnJhbmdlcy5sYXN0VUFSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsK
QEAgLTY4Myw3ICs2ODIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYwogICAgIFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7CiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tp
bmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJz
aXZlIHRyZWUgcmVzb2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24n
dCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBh
dGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRT
dGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKTsKKyAgICBib29sIGNhblVzZUZhc3RS
ZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBh
cmVudE5vZGUoKSk7CiAKICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC02OTMsNyArNjkyLDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKIAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxl
RGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwg
cnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChydWxlTWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1
ZXN0LnNjb3BlKSkgeworICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87
CisgICAgICAgIGlmIChydWxlTWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBk
eW5hbWljUHNldWRvKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3Bl
cnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAg
ICAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9w
ZXJ0aWVzKCk7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlz
RW1wdHkoKSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzKSkgewpAQCAtNzAxLDE5
ICs3MDEsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBvc2luZyB0aGUg
bm9uLXN0YW5kYXJkIGdldE1hdGNoZWRDU1NSdWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBvbmx5IHJl
YXNvbiB0aGlzIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChzdGF0ZS5zYW1lT3JpZ2luT25s
eSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CisgICAgICAgICAg
ICBpZiAoc3RhdGUuaXNTYW1lT3JpZ2luT25seSgpICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKCkpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1h
bCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZgogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1
c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgotICAgICAgICAgICAgaWYgKHN0YXRlLmR5bmFt
aWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5bGUgPT0gTk9QU0VVRE8pIHsK
KyAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVk
b1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKICAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNo
ZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNv
b2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmR5bmFtaWNQc2V1ZG8gPCBGSVJTVF9J
TlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEhh
c1BzZXVkb1N0eWxlKHN0YXRlLmR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChk
eW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc1BzZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xh
c3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5LgogICAgICAgICAgICAg
ICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CkBAIC03MjEsNyArNzIxLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAgICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVs
ZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBB
ZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAg
ICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLmFk
ZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCB0cnVlKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTczOSw3ICs3MzksNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIy
KQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRNYXRjaGVkUnVsZXMoKQogewotICAgIHN0ZDo6
c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcy5iZWdpbigpLCBtX3N0YXRlLm1hdGNoZWRSdWxlcy5l
bmQoKSwgY29tcGFyZVJ1bGVzKTsKKyAgICBzdGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVkUnVsZXMo
KS5iZWdpbigpLCBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOwog
fQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCkBAIC03NTEsMTcgKzc1MSwxNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlU01JTFByb3BlcnRpZQogICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNl
KTsKIAogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRo
IHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KLSAgICBpZiAobV9z
dGF0ZS5zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMo
cmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpOworICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVt
ZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayBhZGRp
dGlvbmFsIG1hcHBlZCBkZWNsYXJhdGlvbnMuCiAgICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUg
Y2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGll
ZAogICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0
eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgotICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgICAgIGFkZEVs
ZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRk
aXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0gICAgICAgIGlmIChtX3N0
YXRlLnN0eWxlZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgYm9vbCBp
c0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxF
bGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRv
QXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24gPSB0b0hUTUxFbGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+ZGlyZWN0aW9uYWxp
dHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKICAgICAgICAgICAgIGlmIChpc0F1dG8p
CiAgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCB0ZXh0RGlyZWN0
aW9uID09IExUUiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24oKSk7CiAgICAgICAgIH0KQEAgLTc3MiwxOCArNzcyLDE4IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlM
UHJvcGVydGllCiAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAg
ICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCAmJiBtX3N0YXRl
LnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRF
bGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGlt
bXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8v
IEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMg
d2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9z
dGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0
ZS5zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5l
U3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkt
PmlzTXV0YWJsZSgpICYmICFtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUo
KTsKICAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBp
c0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGll
cyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lubGlu
ZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBj
aGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQ
cm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVk
RWxlbWVudCAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygp
LCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7CisgICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGll
cyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQo
KSAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
bV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwg
ZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5jbHVk
ZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpAQCAtNzk4LDEyICs3OTgsMTcgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJp
bmcmIGNsYXNzTmFtZXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2lubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudChFbGVtZW50KiBlKQoreworICAgIG1fZWxlbWVu
dCA9IGU7CisgICAgbV9zdHlsZWRFbGVtZW50ID0gZSAmJiBlLT5pc1N0eWxlZEVsZW1lbnQoKSA/
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlKSA6IDA7CisgICAgbV9lbGVtZW50TGlua1N0
YXRlID0gZSA/IGUtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlu
a1N0YXRlKGUpIDogTm90SW5zaWRlTGluazsKK30KKwogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZl
cjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKIHsKLSAgICBpZiAobV9zdGF0ZS5lbGVtZW50ICE9
IGUpIHsKLSAgICAgICAgbV9zdGF0ZS5lbGVtZW50ID0gZTsKLSAgICAgICAgbV9zdGF0ZS5zdHls
ZWRFbGVtZW50ID0gbV9zdGF0ZS5lbGVtZW50ICYmIG1fc3RhdGUuZWxlbWVudC0+aXNTdHlsZWRF
bGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9zdGF0ZS5lbGVtZW50KSA6
IDA7Ci0gICAgICAgIG1fc3RhdGUuZWxlbWVudExpbmtTdGF0ZSA9IGRvY3VtZW50KCktPnZpc2l0
ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKGUpOworICAgIGlmIChtX3N0YXRlLmVs
ZW1lbnQoKSAhPSBlKSB7CisgICAgICAgIG1fc3RhdGUuaW5pdEVsZW1lbnQoZSk7CiAgICAgICAg
IGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAg
ICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZh
bHNlKTsKICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1
bWVudEVsZW1lbnQoZmFsc2UpOwpAQCAtODExLDM1ICs4MTYsMzEgQEAgaW5saW5lIHZvaWQgU3R5
bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKICAgICB9CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JRCkKK2lubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiBkb2N1bWVudCwg
RWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JZCkK
IHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHN0YXRlLnBzZXVkb1N0eWxlID0g
cHNldWRvSUQ7CisgICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lkOwogCiAgICAgaWYgKGUpIHsK
ICAgICAgICAgTm9kZVJlbmRlcmluZ0NvbnRleHQgY29udGV4dChlKTsKLSAgICAgICAgc3RhdGUu
cGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7Ci0g
ICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0eWxlSW5oZXJpdGFuY2Uo
KSA/IDAgOgorICAgICAgICBtX3BhcmVudE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5k
ZXJpbmdBbmRTdHlsZSgpOworICAgICAgICBtX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNldFN0
eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgogICAgICAgICAgICAgcGFyZW50U3R5bGUgPyBwYXJlbnRT
dHlsZSA6Ci0gICAgICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID8gc3RhdGUucGFyZW50Tm9kZS0+
cmVuZGVyU3R5bGUoKSA6IDA7Ci0gICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Q
b2ludCA9IGNvbnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKKyAgICAgICAgICAgIG1fcGFyZW50Tm9k
ZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CisgICAgICAgIG1fZGlzdHJpYnV0
ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPSAwOwotICAgICAgICBzdGF0ZS5wYXJlbnRT
dHlsZSA9IHBhcmVudFN0eWxlOwotICAgICAgICBzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9u
UG9pbnQgPSBmYWxzZTsKKyAgICAgICAgbV9wYXJlbnROb2RlID0gMDsKKyAgICAgICAgbV9wYXJl
bnRTdHlsZSA9IHBhcmVudFN0eWxlOworICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Q
b2ludCA9IGZhbHNlOwogICAgIH0KIAogICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8gZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRlclN0eWxlKiBkb2NTdHls
ZSA9IGRvY3VtZW50KCktPnJlbmRlclN0eWxlKCk7Ci0gICAgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5
bGUoKSA6IGRvY1N0eWxlOwotCi0gICAgc3RhdGUuc3R5bGUgPSAwOwotCi0gICAgc3RhdGUucGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwotCi0gICAgc3RhdGUucnVsZUxpc3QgPSAwOwor
ICAgIFJlbmRlclN0eWxlKiBkb2NTdHlsZSA9IGRvY3VtZW50LT5yZW5kZXJTdHlsZSgpOworICAg
IG1fcm9vdEVsZW1lbnRTdHlsZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9j
RWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGRvY1N0eWxlOwogCi0gICAgc3RhdGUuZm9udERpcnR5
ID0gZmFsc2U7CisgICAgbV9zdHlsZSA9IDA7CisgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmNsZWFyKCk7CisgICAgbV9ydWxlTGlzdCA9IDA7CisgICAgbV9mb250RGlydHkgPSBmYWxzZTsK
IH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpA
QCAtOTAyLDE2ICs5MDMsMTYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogewogICAgIGlmICghcnVsZVNl
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogCiAgICAgbV9zZWxlY3Rv
ckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CiAgICAgaW50
IGZpcnN0UnVsZUluZGV4ID0gLTEsIGxhc3RSdWxlSW5kZXggPSAtMTsKICAgICBSdWxlUmFuZ2Ug
cnVsZVJhbmdlKGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5nZSk7CiAgICAgbV9zZWxl
Y3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLSAg
ICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIGlmIChtX3N0YXRlLm1h
dGNoZWRSdWxlcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVh
cigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MTksNyArOTIwLDcgQEAgYm9vbCBTdHls
ZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKIHsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgp
OwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVu
dC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxl
bWVudCA9IHN0YXRlLmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKIAogICAgIGlmICghdGhp
c0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTk0MCwyNSArOTQxLDI1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKHRoaXNJ
bnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNFbmFibGVk
Rm9ybUNvbnRyb2woKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQor
ICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQo
KS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBzdGF0ZS5lbGVtZW50LT5p
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRv
bkZvckZvcm0oKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50
KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKKyAgICBpZiAoc3RhdGUuZG9jdW1l
bnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgewogICAgICAgICBib29sIHdpbGxW
YWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOwogCi0gICAgICAgIGlmICh3aWxsVmFs
aWRhdGUgIT0gc3RhdGUuZWxlbWVudC0+d2lsbFZhbGlkYXRlKCkpCisgICAgICAgIGlmICh3aWxs
VmFsaWRhdGUgIT0gc3RhdGUuZWxlbWVudCgpLT53aWxsVmFsaWRhdGUoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5p
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+
aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNWYWxpZEZv
cm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNJblJhbmdlKCkp
CisgICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlz
SW5SYW5nZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVt
ZW50LT5pc091dE9mUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNP
dXRPZlJhbmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05NzQs
MjUgKzk3NSwyNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8o
RWxlbWVudCogZWxlbWVudCkKIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhh
c0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBzaGFyaW5n
Q2FuZGlkYXRlKSBjb25zdAogewogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0g
ICAgaWYgKHN0YXRlLmVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRl
LT5hdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+YXR0cmlidXRlRGF0
YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6
OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVz
OjpsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShY
TUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUo
WE1MTmFtZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdGF0
ZS5lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRl
LT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5m
YXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0
cmlidXRlKGxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzdGF0
ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMpIHsKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnRB
ZmZlY3RlZEJ5Q2xhc3NSdWxlcygpKSB7CiAgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5o
YXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+
Y2xhc3NOYW1lcygpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYg
KHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkpIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAg
ICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlz
aW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgot
ICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAg
IGlmIChzdGF0ZS5lbGVtZW50LT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2Fu
ZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSkKKyAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBl
bHNlIHsKICNlbmRpZgotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMo
KSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCisgICAgICAgICAgICBpZiAoc3Rh
dGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1l
cygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNpZiBFTkFCTEUoU1ZHKQogICAg
ICAgICB9CkBAIC0xMDAwLDEyICsxMDAxLDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAg
ICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdGF0ZS5zdHlsZWRF
bGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1l
bnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5w
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+aGFzVGFn
TmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVz
c0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0
PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgp
KQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Cisg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc3RhdGUuZWxlbWVu
dCgpKS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQq
PihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTAyMiw3ICsxMDIzLDcgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0
ZS5lbGVtZW50LT50YWdRTmFtZSgpKQorICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0
YXRlLmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDMy
LDIxICsxMDMzLDIxIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVt
ZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihlbGVtZW50KS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAg
IGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0xpbmsoKSkKKyAgICBp
ZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxl
bWVudC0+aG92ZXJlZCgpKQorICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxl
bWVudCgpLT5ob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC0+YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudC0+YWN0aXZlKCkpCisgICAgaWYgKGVsZW1lbnQt
PmFjdGl2ZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+YWN0aXZlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmZvY3Vz
ZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+Zm9j
dXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRvd1Bz
ZXVkb0lkKCkgIT0gc3RhdGUuZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSkKKyAgICBpZiAoZWxl
bWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1BzZXVkb0lk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhlbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFs
UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50LT5hZGRp
dGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoZWxlbWVudC0+YWRk
aXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVu
dCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJ
blJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkK
QEAgLTEwNjIsNyArMTA2Myw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBib29sIGlzQ29u
dHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250
cm9sICE9IHN0YXRlLmVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlz
Q29udHJvbCAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVX
aXRoQ29udHJvbChlbGVtZW50KSkKQEAgLTEwODYsMjAgKzEwODcsMjAgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKICAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVt
ZW50TGlua1N0YXRlICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlz
TGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAg
Ly8gRGVueSBzaGFyaW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rl
cy4KLSAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+
aXNXZWJWVFRFbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9
IHN0YXRlLmVsZW1lbnQoKS0+aXNXZWJWVFRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50
LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5v
ZGUoKSAhPSB0b1dlYlZUVEVsZW1lbnQoc3RhdGUuZWxlbWVudCktPmlzUGFzdE5vZGUoKSkKKyAg
ICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1dl
YlZUVEVsZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAh
PSB0b1dlYlZUVEVsZW1lbnQoc3RhdGUuZWxlbWVudCgpKS0+aXNQYXN0Tm9kZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAg
ICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNj
cmVlbkVsZW1lbnQoKSB8fCBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50
KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50ID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8
IHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNj
cmVlbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJu
IHRydWU7CkBAIC0xMTIxLDM3ICsxMTIyLDM3IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHls
ZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiBS
ZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewogICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50IHx8ICFz
dGF0ZS5wYXJlbnRTdHlsZSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3Rh
dGUucGFyZW50U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBJZiB0aGUgZWxl
bWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAoc3Rh
dGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZH
KQotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUuc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVu
dCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYK
ICAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5
bGVzaGVldHMuCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0
dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCkuaW1wbCgpKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNJ
RCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudC0+cGFyZW50
RWxlbWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5l
bGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChz
dGF0ZS5zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgIGlmIChz
dGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIGlmIChzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3Vt
ZW50KCktPmNzc1RhcmdldCgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9j
dW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChlbGVtZW50
SGFzRGlyZWN0aW9uQXV0byhzdGF0ZS5lbGVtZW50KSkKKyAgICBpZiAoZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8oc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBD
YWNoZSB3aGV0aGVyIHN0YXRlLmVsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNz
IHNlbGVjdG9ycy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFy
aWFibGUuIFRoZSBzdHlsZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0
eWxlUmVzb2x2ZXIuCi0gICAgc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzID0gc3Rh
dGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZl
Y3RlZEJ5UnVsZXMoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpKTsKKyAgICBzdGF0ZS5zZXRF
bGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1l
bnQoKS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1l
bnQoKS0+Y2xhc3NOYW1lcygpKSk7CiAKICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBh
bmQgdGhlaXIgY291c2lucy4KICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgdW5zaWduZWQg
dmlzaXRlZE5vZGVDb3VudCA9IDA7CiAgICAgU3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0g
MDsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudC0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgTm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKICAgICAgICAgc2hh
cmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwgY291bnQp
OwogICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQpAQCAtMTE3Myw3ICsxMTc0LDcgQEAgUmVuZGVy
U3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAoc3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2gg
bm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgot
ICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQtPnBhcmVu
dEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUu
ZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQpAQCAtMTM5NSw5ICsxMzk2LDkgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAg
ICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50
LCBkZWZhdWx0UGFyZW50KTsKLSAgICBzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9y
U3R5bGluZzsKLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYm
ICFzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQpIHsKKyAgICBzdGF0ZS5pbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOworICAgIHN0
YXRlLnNldFJlZ2lvbkZvclN0eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7CisgICAgaWYgKHNoYXJp
bmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50KCkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9j
YXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAg
cmV0dXJuIHNoYXJlZFN0eWxlOwpAQCAtMTQwNSwzMiArMTQwNiwzMiBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCwgUmVuZGVyUwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAot
ICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSkgewotICAgICAgICBzdGF0ZS5zdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRl
LnBhcmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6
QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAg
ICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShz
dGF0ZS5wYXJlbnRTdHlsZSgpLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJT
dHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5
KTsKICAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZS5zdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoKTsKLSAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3Rh
dGUuc3R5bGUuZ2V0KCkpOwotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFy
ZW50LmdldCgpOworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50
KCkpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5z
dHlsZSgpKTsKKyAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0
KCkpOwogICAgIH0KICAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRl
ZCBieSAtd2Via2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZy
b20gc2hhZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KLSAgICBpZiAoc3RhdGUuZGlzdHJp
YnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCgpKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5w
YXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNo
YWRvd0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93
SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50
LT5pc0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SXNMaW5rKHRydWUpOwotICAg
ICAgICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5r
IGxpbmtTdGF0ZSA9IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKICAgICAgICAgaWYgKGxpbmtT
dGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NT
ZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQog
ICAgICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9
Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBi
b29sIG5lZWRzQ29sbGVjdGlvbiA9IGZhbHNlOwpAQCAtMTQ0NywxNyArMTQ0OCwxNCBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgUmVuZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1
bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3Bs
YXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlLCBlbGVtZW50
KTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHls
ZSgpLCBlbGVtZW50KTsKIAotICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRo
ZSBuZXh0IHJlc29sdmUuCi0KLSAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIHN0YXRl
LnBhcmVudFN0eWxlID0gMDsKKyAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRo
ZSBuZXh0IHJlc29sdmUuCiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVy
KCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gc3RhdGUuc3R5
bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwg
S2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKQEAgLTE0NjYsMTQgKzE0NjQsMTMgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWUKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAg
ICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygp
KTsKIAotICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSk7CisgICAgQVNTRVJUKCFtX3N0YXRlLnN0
eWxlKCkpOwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0
aGUgc3R5bGUKLSAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5
bGUpOwotCi0gICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRTdHls
ZShSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgc3RhdGUuc2V0TGluZUhl
aWdodFZhbHVlKDApOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1w
b3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUn
cyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4K
QEAgLTE0ODUsOCArMTQ4Miw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRl
Rm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2Ug
ZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkK
LSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVI
ZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVl
KCkpOwogCiAgICAgLy8gTm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtl
eWZyYW1lLT5wcm9wZXJ0aWVzKCkpCkBAIC0xNTEzLDcgKzE1MTAsNyBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0
eWxlKiBlbGVtZQogCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwog
Ci0gICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFr
ZVN0eWxlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJh
bWVMaXN0JiBsaXN0KQpAQCAtMTUzNyw3ICsxNTM0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpr
ZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSog
ZWwKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMg
YSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAogICAg
ICAgICBpbml0RWxlbWVudChlKTsKLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKKyAg
ICAgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwogCiAgICAg
ICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwog
CkBAIC0xNTgxLDcgKzE1NzgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVz
Rm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNl
dWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0g
ICAgQVNTRVJUKG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7
CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTU4OSw5ICsxNTg2LDkgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVt
ZW50KFBzZXVkb0lkIHBzZXVkbywgRWwKIAogICAgIGluaXRFbGVtZW50KGUpOwogCi0gICAgaW5p
dEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBzdGF0ZS5zdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20o
bV9zdGF0ZS5wYXJlbnRTdHlsZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1
bWVudCgpLCBlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3Rh
dGUucGFyZW50U3R5bGUoKSk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVs
ZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qg
d2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhvc2UgcnVsZXMuCkBAIC0xNjA4LDEyICsxNjA1
LDEyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxl
Rm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzdGF0ZS5z
dHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVU
eXBlKHBzZXVkbyk7CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBl
KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxl
KHN0YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RS
ZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAg
ICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgog
ICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CkBAIC0xNjIxLDE1ICsxNjE4LDE1IEBAIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQ
c2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZl
cigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIHN0YXRlLnN0
eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUlu
ZGV4KQogewotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50
IHN0eWxlLgorICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJl
IHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCkpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5yb290RWxl
bWVudFN0eWxlKCkpOwogCiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJ
bmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsK
QEAgLTE2NDAsNyArMTYzNyw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3Vs
dCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25s
eSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBSdWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMg
cGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JT
dHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICBtX3N0YXRlLmxpbmVIZWln
aHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgYm9v
bCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CkBAIC0xNjUxLDggKzE2NDgsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICB1cGRhdGVGb250KCk7CiAKICAg
ICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRo
ZSBmb250LXNpemUuCi0gICAgaWYgKG1fc3RhdGUubGluZUhlaWdodFZhbHVlKQotICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFs
dWUpOworICAgIGlmIChtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7
CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVz
dWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVy
aXRlZE9ubHkpOwogCkBAIC0xNjYyLDIwICsxNjU5LDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIGRvY3Vt
ZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhl
IHN0eWxlLgotICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
bV9zdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgbV9zdGF0ZS5zdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxl
OjpjcmVhdGUoKSk7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQg
aWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4KICAgICBpZiAo
U2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7CiAgICAgICAgIGluaXRp
YWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAgICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCku
dXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCku
dXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9zdGF0ZS5zdHls
ZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBk
YXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3RhdGUuc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVy
biBtX3N0YXRlLnRha2VTdHlsZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCogdGV4dE5vZGUpCkBAIC0xOTYzLDcgKzE5NjAs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogCiAgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNv
IGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgogICAgIGlmIChzdHlsZS0+aGFz
QXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVz
dFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSwgbV9zdGF0ZS5i
b3JkZXJEYXRhLCBtX3N0YXRlLmJhY2tncm91bmREYXRhLCBtX3N0YXRlLmJhY2tncm91bmRDb2xv
cik7CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhp
cywgc3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0
YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkp
OwogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qg
c2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xF
VFRFUikpCkBAIC0yMDQ2LDI2ICsyMDQzLDE2IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50
YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnVw
ZGF0ZUZvbnQoKQogewotICAgIGlmICghbV9zdGF0ZS5mb250RGlydHkpCisgICAgaWYgKCFtX3N0
YXRlLmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjaGVja0ZvclRleHRTaXpl
QWRqdXN0KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsK
LSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5
bGUpOwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSk7
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOworICAgIGNoZWNrRm9y
R2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBj
aGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hl
Y2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7Ci0gICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgp
LnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgbV9zdGF0ZS5mb250RGlydHkgPSBmYWxzZTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQotewot
ICAgIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlID0gbV9zdGF0ZS5zdHlsZS0+aGFzQXBwZWFyYW5j
ZSgpOwotICAgIGlmIChtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX3N0YXRl
LmJvcmRlckRhdGEgPSBtX3N0YXRlLnN0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9zdGF0ZS5i
YWNrZ3JvdW5kRGF0YSA9ICptX3N0YXRlLnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAg
ICAgIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yID0gbV9zdGF0ZS5zdHlsZS0+YmFja2dyb3VuZENv
bG9yKCk7Ci0gICAgfQorICAgIHN0eWxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsK
KyAgICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVu
c2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQpAQCAtMjA4MSw3ICsyMDY4LDcgQEAgUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCogZSwgUHMKICAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tl
cjo6Q29sbGVjdGluZ1J1bGVzKTsKIAogICAgIGluaXRFbGVtZW50KGUpOwotICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOworICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVz
b2x2ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9JZCk7CiAKICAgICBNYXRjaFJlc3VsdCBkdW1t
eTsKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewpAQCAtMjA5
NCw1MSArMjA4MSw1MCBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpw
c2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwogICAgIH0KIAogICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JD
U1NSdWxlcykpIHsKLSAgICAgICAgbV9zdGF0ZS5zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0lu
Y2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3Jp
Z2luT25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOwogCiAgICAg
ICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCi0gICAg
ICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKKyAgICAgICAgbV9zdGF0ZS5zZXRT
YW1lT3JpZ2luT25seShmYWxzZSk7CiAgICAgfQogCiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKIAotICAgIHJldHVybiBtX3N0
YXRlLnJ1bGVMaXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS50YWtlUnVsZUxpc3Qo
KTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVs
ZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK2lubGluZSBib29s
IFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKQogewogICAg
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgc3RhdGUuZHluYW1pY1BzZXVkbyA9IE5PUFNF
VURPOwogCiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpKSB7CiAg
ICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1
ZG8gZWxlbWVudHMuCi0gICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykK
KyAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxl
IHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQg
ZnJvbSB0aGUgcnVsZSBoYXNoLgogICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBv
bmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYg
KHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KCkgJiYgc3RhdGUuZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChydWxl
RGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYm
IHN0YXRlLmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJ1
bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRl
LmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FOYW1lKCkpKQorICAgICAgICBpZiAo
cnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxl
Y3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoc3RhdGUuZWxlbWVudCgpLCBydWxlRGF0YS5zZWxlY3Rv
cigpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0
YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkpKQorICAgICAgICBpZiAoIVNlbGVjdG9y
Q2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3Ioc3RhdGUuZWxlbWVu
dCgpLCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVj
dG9yKCksIHN0YXRlLmVsZW1lbnQpOworICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIu
ZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgfQog
CiAgICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50LCBTZWxl
Y3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwotICAgIGNvbnRleHQuZWxlbWVudFN0
eWxlID0gc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQo
KSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVs
ZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwot
ICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwg
c3RhdGUuZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAg
IGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZSgpOworICAgIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2ggbWF0Y2ggPSBtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBk
eW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSk7CiAgICAgaWYgKG1h
dGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIHN0YXRlLnBz
ZXVkb1N0eWxlICE9IHN0YXRlLmR5bmFtaWNQc2V1ZG8pCisgICAgaWYgKHN0YXRlLnBzZXVkb1N0
eWxlKCkgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRvU3R5bGUoKSAhPSBkeW5hbWljUHNldWRv
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMTQ4LDgg
KzIxMzQsNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0
b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fc3Rh
dGUucHNldWRvU3R5bGUgPSBOT1BTRVVETzsKLQogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3Iq
IHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKICAg
ICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1hdGNoZXMocywgcmVnaW9uRWxlbWVudCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNzMsNyArMjE1Nyw3IEBAIExlbmd0aCBTdHls
ZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUsIFJlCiB0ZW1wbGF0ZSA8U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBh
c3MgcGFzcz4KIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFu
dCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0
ZWxpc3RUeXBlKQogewotICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3Bl
cnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcpOworICAgIEFT
U0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8
fCBtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NS
dWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3Vu
dCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKQEAgLTIyMTcsNyArMjIwMSw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJy
ZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5l
LWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0g
Y3VycmVudC52YWx1ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZh
bHVlKGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBM
b3dQcmlvcml0eVByb3BlcnRpZXM6CiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQpCkBAIC0yMjM0LDE4ICsyMjE4LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQs
IGJvb2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAg
ICBpZiAoc3RhdGUuc3R5bGUtPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAg
aWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAg
ICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAg
ICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgdW5zaWduZWQgbGlua01h
dGNoVHlwZSA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0
IHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIHN0YXRl
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoTGluazsKLSAgICAgICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0
ZWQ7CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUobGlu
a01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAgICAgICAgICAgIHN0
YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUobGlua01hdGNoVHlwZSAmIFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKIAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0
Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0
PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkp
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9
IHRydWU7Ci0gICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBm
YWxzZTsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUp
OworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsg
aSA8PSBlbmRJbmRleDsgKytpKSB7CkBAIC0yMzYxLDE1ICsyMzQ1LDE1IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNhbiBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29w
eWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVj
dCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAogICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlv
bnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywg
aWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRlcGVuZCBvbiB0aGUgCiAgICAgICAgIC8vIGVs
ZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0
aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAgICBzdGF0ZS5zdHlsZS0+Y29weU5vbklu
aGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Ci0gICAgICAgIGlmIChz
dGF0ZS5wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJl
bmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0gICAg
ICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUtPmluc2lkZUxpbmso
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVt
LT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5p
bmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYm
ICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEVJbnNpZGVMaW5r
IGxpbmtTdGF0dXMgPSBzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCk7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5bGUgaGFzIGlkZW50aWNhbCBpbmhlcml0ZWQg
cHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJlbnQgc3R5bGUgdGhlbiB0aGUKICAgICAgICAg
ICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJlIGlkZW50aWNhbCB0b28uIFdlIGNvcHkgdGhl
IGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJvbSB0aGUgY2FjaGUgYW5kIGFyZSBkb25lLgot
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5
bGUuZ2V0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oY2FjaGVJ
dGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkg
dGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBhbiBpbmhlcml0ZWQgcHJvcGVydHkuIFdl
IG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0LgotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IHRydWU7IApAQCAtMjM4NywxNCArMjM3MSwx
NCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVy
dGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMg
ZGVwZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1w
b3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9y
dGFudAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KLSAgICBzdGF0ZS5saW5lSGVp
Z2h0VmFsdWUgPSAwOworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKICAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBm
YWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVBy
b3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVz
PihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3Vs
dCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgIGlmIChjYWNoZUl0ZW0g
JiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxl
LT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgc3RhdGUuZm9udERpcnR5ID0gdHJ1ZTsKKyAg
ICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSAhPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgc3RhdGUuc2V0
Rm9udERpcnR5KHRydWUpOwogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAg
ICB9CiAKQEAgLTI0MDIsMTggKzIzODYsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAg
ICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUg
c3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQor
ICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhl
aWdodFZhbHVlKCkpOwogCiAgICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9u
dC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgotICAgIGlmIChj
YWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0g
c3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKQorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2Fj
aGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwog
CiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQs
IGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIAogICAgIC8vIENhY2hlIG91
ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVy
LgotICAgIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworICAgIHN0YXRlLmNhY2hlQm9yZGVy
QW5kQmFja2dyb3VuZCgpOwogICAgIAogICAgIC8vIE5vdyBkbyB0aGUgYXV0aG9yIGFuZCB1c2Vy
IG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhlICFpbXBvcnRhbnQgcHJvcGVy
dGllcy4KICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25s
eSk7CkBAIC0yNDI0LDEzICsyNDA4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAg
Ly8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAg
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAgICAgCi0gICAgQVNTRVJUKCFzdGF0ZS5mb250RGly
dHkpOworICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5KCkpOwogICAgIAogICAgIGlmIChjYWNo
ZUl0ZW0gfHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFi
bGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuZWxlbWVudCwgc3RhdGUuc3R5bGUuZ2V0
KCksIHN0YXRlLnBhcmVudFN0eWxlKSkKKyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJv
cGVydGllc0NhY2hlKHN0YXRlLmVsZW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50
U3R5bGUoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlLCBjYWNoZUhhc2gsIG1hdGNo
UmVzdWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuc3R5bGUoKSwg
c3RhdGUucGFyZW50U3R5bGUoKSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBj
b25zdCBTdHlsZVJ1bGVQYWdlKiByMikKQEAgLTI0OTUsNyArMjQ3OSw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1h
dGNoZWRSdWxlcywKIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4
KSBjb25zdAogewogICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFt
X3N0YXRlLnJvb3RFbGVtZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICBp
ZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
CiAgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CiAKICAgICByZXR1cm4gKHBhZ2VJbmRl
eCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKQEAgLTI1MTYsOCArMjUwMCw4IEBA
IFN0cmluZyBTdHlsZVJlc29sdmVyOjpwYWdlTmFtZShpbnQgLyogcGFnZUluZGV4ICovKSBjb25z
dAogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpbml0RWxl
bWVudCgwKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKDAsIHN0eWxlKTsKLSAgICBtX3N0YXRl
LnN0eWxlID0gc3R5bGU7CisgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50
KCksIDAsIHN0eWxlKTsKKyAgICBtX3N0YXRlLnNldFN0eWxlKHN0eWxlKTsKICAgICBhcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVlKTsKIH0KIApAQCAtMjYyOSw3ICsyNjEzLDcg
QEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCkKIC8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2Nh
bGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250
LXNpemUpLgogYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMoKQogewotICAgIHJl
dHVybiBtX3N0YXRlLmVsZW1lbnQgJiYgbV9zdGF0ZS5lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsK
KyAgICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPmlzU1ZH
RWxlbWVudCgpOwogfQogCiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCkBAIC0yNjQ0LDcgKzI2MjgsNyBAQCBzdGF0
aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgY29uc3QgU3R5bAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB3
b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252
ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlLCBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwg
QXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
c3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5p
c1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3NTAsNyArMjczNCw3
IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKENTU1ZhbHVlKiB2YWx1ZSkKIAog
dm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4m
IGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmlu
Zz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9z
dGF0ZS5zdHlsZS0+dmFyaWFibGVzKCkpKTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVz
KCptX3N0YXRlLnN0eWxlKCktPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNz
aW9ucy5jb250YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRl
Y3RlZC4KQEAgLTI3ODMsMTkgKzI3NjcsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICNlbmRpZgogCiAgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVu
dE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+
aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5v
ZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0g
dmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUt
PmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0
aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVy
aXQKLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAoc3RhdGUucGFyZW50Tm9kZSAmJiBzdGF0ZS5w
YXJlbnRTdHlsZSkpOyAvLyBpc0luaGVyaXQgLT4gKHN0YXRlLnBhcmVudE5vZGUgJiYgc3RhdGUu
cGFyZW50U3R5bGUpCisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUo
KSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IC8vIGlzSW5oZXJpdCAtPiAoc3RhdGUucGFyZW50
Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpCiAKLSAgICBpZiAoIXN0YXRlLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSAmJiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoIXN0
YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkp
KSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQg
dG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUucGFyZW50U3R5bGUtPmhhc0V4cGxp
Y2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFBy
b3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUtPnNldEhhc0V4cGxpY2l0bHlJ
bmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUucGFyZW50
U3R5bGUoKS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVy
dHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogCiAjaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VmFyaWFibGUpIHsKQEAgLTI4
MDMsNyArMjc4Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIENTU1ZhcmlhYmxlVmFsdWUqIHZh
cmlhYmxlID0gc3RhdGljX2Nhc3Q8Q1NTVmFyaWFibGVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAg
QVNTRVJUKCF2YXJpYWJsZS0+bmFtZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVCghdmFy
aWFibGUtPnZhbHVlKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFZhcmlh
YmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0yODIyLDcgKzI4MDYsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpIDogMDsKIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUg
Q1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAogICAgIC8v
IFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQp
IG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3ZWxsIGFuZApAQCAtMjgzNiw3ICsyODIwLDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFs
bHkgImluaGVyaXQiIG5lZWRzIHRvIGJlIHN1cHBvcnRlZC4KIAogICAgICAgICAgICAgaWYgKGlz
SW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckNvbnRlbnQoKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTI4NDgsMTkgKzI4MzIsMTkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRX
aXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpj
cmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSks
IGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQo
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NT
SW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250
ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihp
dGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4NzEsMTcg
KzI4NTUsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsK
IAogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0F0dHIoKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0
cihmb28pPwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUtPnN0eWxlVHlwZSgp
ID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVu
aXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBl
KCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUucGFyZW50U3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29udGVudFZhbHVlLT5nZXRTdHJpbmdW
YWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/
IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRl
KGF0dHIpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZh
bHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyByZWdp
c3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUK
ICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9j
YWxOYW1lKCkuaW1wbCgpKTsKQEAgLTI4OTIsMjQgKzI4NzYsMjQgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxpc3RTdHlsZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0
eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQgLSBDU1NWYWx1ZURpc2MpOwogICAgICAgICAgICAgICAg
ICAgICBPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRl
ckNvbnRlbnQoY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50
ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7
CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldElkZW50
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRp
ZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50
KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVv
dGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChOT19P
UEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9DbG9zZVF1b3RlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5P
X0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgpAQCAtMjkxOSwxNiArMjkwMywxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghZGlkU2V0KQotICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6CiAgICAgICAgIGlmIChpc0luaGVyaXQp
IHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUt
PnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5xdW90ZXMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1
b3RlcygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcygwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0
KCkpIHsKQEAgLTI5NDYsMTkgKzI5MzAsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAg
ICBTdHJpbmcgZW5kUXVvdGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHNlY29u
ZCktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcXVvdGVzLT5hZGRQYWlyKHN0
ZDo6bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1b3RlKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHF1b3Rlcyk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRRdW90ZXMocXVvdGVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKICAgICAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6
IHsKICAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdzIGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5o
ZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9u
ID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShw
YXJlbnRGb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkp
OwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRG
b250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwpAQCAtMjk2OCw3ICsyOTUyLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hh
bmdlIGZyb20gbW9ub3NwYWNlCiAgICAgICAgICAgICAvLyB0byBub24tbW9ub3NwYWNlLgogICAg
ICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlw
dGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCkBAIC0yOTgyLDcgKzI5NjYsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgRm9u
dEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKICAg
ICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9IDA7CiAKQEAgLTMwNjAsMjQgKzMwNDQsMjQg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKIC8vIHNob3J0aGFuZCBwcm9wZXJ0aWVzCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmQ6CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVy
aXQpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0QmFja2dyb3VuZExheWVycygq
c3RhdGUucGFyZW50U3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSk7Ci0gICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKHN0YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0QmFja2dyb3VuZExh
eWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyTWFza0xheWVycygpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+Y2xlYXJNYXNrTGF5ZXJzKCk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkK
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0TWFza0xheWVycygqc3RhdGUucGFyZW50
U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0
TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+bWFza0xheWVycygpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgogICAgICAgICBpZiAoaXNJbmhlcml0
KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
cGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUtPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7
Ci0gICAgICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAg
c3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAg
ICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CkBAIC0z
MDg2LDggKzMwNzAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TGluZUhl
aWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlu
ZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBz
dGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb247CiAgICAgICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPnN5c3RlbUZvbnQocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCksIGZvbnREZXNjcmlwdGlv
bik7CkBAIC0zMTAzLDcgKzMwODcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8
ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29s
dXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVs
ZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUo
KSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKQEAgLTMxMjEsNyArMzEwNSw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICB1cGRhdGVGb250KCk7CiAgICAgICAgICAgICBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOwogCi0gICAgICAg
ICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSBmb250LT5saW5lSGVpZ2h0LmdldCgpOworICAg
ICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkp
OwogCiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9u
dC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQpAQCAtMzEzMywxMSArMzExNywxMSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6IHsKICAgICAgICAg
aWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNo
YWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3co
c3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRh
KCpzdGF0ZS5wYXJlbnRTdHlsZS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT5i
b3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+
Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5z
dHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRTaGFkb3coKSA/
IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93
KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldEJv
eFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBT
aGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8g
aW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cgPyBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJv
cGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6
IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRyKTsKIAogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE0NywyOSArMzEz
MSwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93
VmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFNoYWRvd1Zh
bHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJyVmFsdWUpOwotICAgICAg
ICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50
IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdl
dCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAg
ICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpIDogMDsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
aW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOwor
ICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3RvcikgOiAwOwogICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBp
dGVtLT5zdHlsZSAmJiBpdGVtLT5zdHlsZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluc2V0ID8g
SW5zZXQgOiBOb3JtYWw7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlm
IChpdGVtLT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0
eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUtPmNvbG9yKCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQorICAgICAgICAgICAgICAgIGNvbG9yID0g
c3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIAogICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+
IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1
ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cs
IGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAg
ICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkp
OyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVh
c2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBm
aXJzdCBlbnRyeQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0
byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5k
ZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hSZWZsZWN0OiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJv
eFJlZmxlY3QsIEJveFJlZmxlY3QpCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxC
b3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChS
ZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtMzE4MCwxMyArMzE2NCwxMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBS
ZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVh
dGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUtPmRp
cmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAg
ICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENh
bGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSwgem9vbUZhY3RvcikpOworICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJl
ZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CiAgICAgICAgIE5p
bmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1hc2suc2V0TWFza0RlZmF1bHRzKCk7CiAgICAg
ICAgIG1fc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygp
LCBtYXNrKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAotICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNl
ZCBpbiBAZm9udC1mYWNlIHJ1bGVzLgpAQCAtMzE5NSwyOSArMzE3OSwyOSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6
CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRD
b2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFs
aWQoKSA/IHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSA6IHN0YXRlLnBhcmVu
dFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5SdWxl
U3R5bGUoc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKLSAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUucGFyZW50U3R5bGUtPmNvbHVt
blJ1bGVXaWR0aCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVD
b2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlQ29sb3IoKSA6IHN0YXRlLnBhcmVudFN0eWxl
KCktPmNvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29sdW1uUnVsZVN0
eWxlKHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVXaWR0aChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5j
b2x1bW5SdWxlV2lkdGgoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnJlc2V0Q29sdW1uUnVsZSgpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFycXVlZToKICAgICAgICAgaWYgKCFpc0luaGVyaXQpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKHN0
YXRlLnBhcmVudFN0eWxlLT5tYXJxdWVlRGlyZWN0aW9uKCkpOwotICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0TWFycXVlZUluY3JlbWVudChzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVu
dCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRT
dHlsZS0+bWFycXVlZVNwZWVkKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxv
b3BDb3VudChzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZUxvb3BDb3VudCgpKTsKLSAgICAgICAg
c3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlvcihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVl
ZUJlaGF2aW9yKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlRGlyZWN0aW9u
KHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVEaXJlY3Rpb24oKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVl
ZUluY3JlbWVudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHN0
YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVTcGVlZCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TWFycXVlZUxvb3BDb3VudChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlTG9vcENv
dW50KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUu
cGFyZW50U3R5bGUoKS0+bWFycXVlZUJlaGF2aW9yKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOiB7CiAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVMb29wQ291bnQsIE1hcnF1ZWVMb29wQ291bnQp
CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQot
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBt
ZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1
ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7CkBAIC0zMjI3LDE5ICszMjExLDE5IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgewogICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVl
ZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRN
YXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0Lgor
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1
bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBTdXBlciBmYXN0LgorICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFz
dC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgotICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFs
dWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0
aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50OiB7CkBAIC0zMjQ5LDE5ICszMjMz
LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSkgewogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgotICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwg
Rml4ZWQpKTsgLy8gMXB4LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVl
ZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4K
KyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0
aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8g
MzZweC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50
KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExlbmd0aCBtYXJxdWVl
TGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggbWFycXVl
ZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKICAgICAgICAgICAgIGlmICghbWFycXVlZUxl
bmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJx
dWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0aCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTMyNzAsMTEgKzMyNTQsMTEgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRMb2NhbGUobnVsbEF0b20pOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TG9jYWxlKG51bGxBdG9tKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9j
YWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZS0+bG9jYWxlKCkpKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0
eWxlKCktPmxvY2FsZSgpKSk7CiAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzI5Myw3ICszMjc3LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMo
KSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRl
clN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0zMzAzLDEwICszMjg3LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAg
RGFzaGJvYXJkUmVnaW9uKiBmaXJzdCA9IHJlZ2lvbjsKICAgICAgICAgd2hpbGUgKHJlZ2lvbikg
ewotICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRv
cCgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAg
ICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBz
dGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBM
ZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0
aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CisgICAgICAgICAgICBMZW5ndGggdG9wID0g
Y29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9J
bnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9u
LT5sZWZ0KCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAKICAg
ICAgICAgICAgIGlmICh0b3AuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICB0b3AgPSBM
ZW5ndGgoKTsKQEAgLTMzMTgsMTMgKzMzMDIsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
ICAgICBsZWZ0ID0gTGVuZ3RoKCk7CiAKICAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJj
bGUpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHls
ZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJv
dHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdp
b246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJl
Z2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChyZWdp
b24tPm1faXNSZWN0YW5nbGUpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hi
b2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFi
ZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0
cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24o
U3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJp
Z2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAg
ICAgICAgICByZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1
ZSk7CisgICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1
ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzMzMsOCArMzMxNyw4IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJlZ2lvbjogewogICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldERyYWdnYWJsZVJlZ2lvbk1v
ZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxl
UmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7Ci0gICAgICAgIHN0YXRlLmVsZW1l
bnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJl
Z2lvbk5vRHJhZyk7CisgICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJl
Z2lvbnModHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTMzNTAsMjEg
KzMzMzQsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKICAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
VGhpY2spCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7Ci0gICAgICAgICAgICB3aWR0aCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZh
Y3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0
b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGUuc3R5bGUt
PnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRTdHJva2VXaWR0aCh3aWR0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwg
c3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAgICAgICBj
cmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRU
cmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7CkBAIC0zMzc0LDM0ICszMzU4LDM0IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFBlcnNwZWN0aXZlKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVy
c3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBm
bG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVu
Z3RoKCkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmls
aXR5LCB0cmVhdCB2YWx1ZWxlc3MgbnVtYmVycyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0
aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBpZiAocGVyc3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQotICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5j
bGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQW5pbWF0
aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0QW5pbWF0aW9ucyhzdGF0ZS5wYXJl
bnRTdHlsZSgpLT5hbmltYXRpb25zKCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+Y2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQp
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdFRyYW5zaXRpb25zKHN0YXRlLnBhcmVu
dFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVy
aXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50cmFuc2l0aW9ucygpKTsKICAgICAg
ICAgcmV0dXJuOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7CkBAIC0zNDEwLDcgKzMzOTQsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGFwSGln
aGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzQx
OSw3ICszNDAzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwodXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGlu
Zyk7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVUb3VjaCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAg
LTM0NjIsNyArMzQ0Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1heExvZ2ljYWxXaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhl
aWdodDoKICAgICB7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6
cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0YXRlLnN0eWxlLT5kaXJlY3Rpb24o
KSwgc3RhdGUuc3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5l
d0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0
ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAg
ICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7CiAgICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5
KG5ld0lkLCB2YWx1ZSk7CiAgICAgfQpAQCAtMzQ5Nyw4ICszNDgxLDggQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBw
bHlpbmcgc3R5bGUuCi0gICAgICAgIGlmIChzdGF0ZS5lbGVtZW50ICYmIHN0YXRlLmVsZW1lbnQg
PT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAg
ICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1l
bnRFbGVtZW50KHRydWUpOworICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVs
ZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIHN0YXRlLmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQo
dHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1MTQsNyArMzQ5OCw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hDb250YWluOiB7CiAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVCb3hDb250YWluLCBMaW5lQm94
Q29udGFpbikKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWluTm9uZSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1MjIsMjEgKzM1MDYsMjEgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVl
KiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1
ZSo+KHZhbHVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVC
b3hDb250YWluVmFsdWUtPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5l
Qm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIC8vIENTUyBGb250cyBNb2R1bGUgTGV2ZWwgMwogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdzOiB7CiAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkg
ewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKHN0YXRlLnN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOworICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxG
ZWF0dXJlU2V0dGluZ3MoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0
KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQ
dHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpj
cmVhdGUoKTsKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOwpAQCAtMzU1Niw4ICsz
NTQwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7
CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZpbHRlciwgRmlsdGVyKTsKICAg
ICAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoY3JlYXRlRmls
dGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEZpbHRlcihv
cGVyYXRpb25zKTsKKyAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucykpCisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM1NjUsMTQgKzM1NDksMTQgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7CiAgICAgICAgIGlmICgh
Y3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXpl
cyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93
czogewogICAgICAgICBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKICAgICAgICAg
aWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRHcmlkUm93cyh0cmFja1Np
emVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1ODAsMTQgKzM1NjQsMTQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgR3JpZFBvc2l0aW9uIGNvbHVtbjsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlk
UG9zaXRpb24odmFsdWUsIGNvbHVtbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OiB7CiAgICAgICAgIEdyaWRQb3NpdGlv
biByb3c7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCByb3cpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Sb3cocm93
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBp
biB0aGUgU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJsZS4KQEAgLTM5MDksMTQgKzM4OTMsMTQgQEAg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm8KIHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2Ug
PSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2Ut
PmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGll
cy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2Uo
KTsKIH0KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAg
ICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7Cisg
ICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFs
dWUpOwogICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAg
ICAgfQogICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwpAQCAt
MzkyNyw3ICszOTExLDcgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpz
ZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXIKIHsKICAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1l
bnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAg
ICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7Cisg
ICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFs
dWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAjZW5kaWYKQEAgLTM5MzYsMTMg
KzM5MjAsMTMgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm8KIHsKICAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoZG9jdW1lbnQoKSk7CiAg
ICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRl
LnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAg
IHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tG
b3JUZXh0U2l6ZUFkanVzdCgpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5z
dHlsZS5nZXQoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CiAK
ICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQw
MTQsMTUgKzM5OTgsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxl
KFNldHRpbmdzKiBzZXR0aW5ncykKICAgICB9CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdv
cmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NT
VmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9zdGF0ZS5saW5lSGVpZ2h0
VmFsdWUgPSAwOworICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUo
MCk7CiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
c2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxlLmdldCgpLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21T
cGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9u
LmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CiB9CiAKIGZsb2F0
IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50
KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9h
dCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKQEAgLTQyMzEsMTUgKzQyMTUs
MTUgQEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVy
biBDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAgICAgICByZXR1cm4g
c3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CisgICAgICAgIHJldHVybiBz
dGF0ZS5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGlu
azoKLSAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVk
TGluaykgPyBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBz
dGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIChz
dGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IHN0YXRlLmRvY3Vt
ZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IHN0YXRlLmRvY3VtZW50KCktPmxpbmtDb2xvcigp
OwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rOgotICAgICAgICByZXR1cm4gc3Rh
dGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CisgICAgICAgIHJldHVy
biBzdGF0ZS5kb2N1bWVudCgpLT5hY3RpdmVMaW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVl
V2Via2l0Rm9jdXNSaW5nQ29sb3I6CiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Zm9jdXNS
aW5nQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICByZXR1
cm4gc3RhdGUuc3R5bGUtPmNvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5j
b2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlk
ZW50KTsKICAgICB9CkBAIC00NTc0LDE3ICs0NTU4LDE3IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJW
YWx1CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKIHsKICAg
ICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmICghc3RhdGUuc3R5bGUtPmhhc0ZpbHRl
cigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuaXNFbXB0eSgpKQorICAgIGlmICghc3Rh
dGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmls
dGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygp
OworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRl
LmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRh
YmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
aWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAg
IGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRp
b246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiBy
ZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVu
dFZhbHVlKiB2YWx1ZSA9IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuZ2V0KHJlZmVyZW5jZUZp
bHRlcikuZ2V0KCk7CisgICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1
ZSA9IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQo
KTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkRG9jdW1lbnQgPSB2YWx1ZS0+bG9h
ZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CkBAIC00NTk1LDcgKzQ1NzksNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKICAgICAgICAgICAgIHJlZmVyZW5j
ZUZpbHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERvY3VtZW50KSkpOwogICAgICAgICB9CiAgICAg
fQotICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKIH0KICNlbmRpZgogCkBAIC00NjExLDE4ICs0NTk1
LDE4IEBAIFN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNo
YWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWCiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRl
ciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNo
YWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAgICAgIG1fc3RhdGUuaGFzUGVuZGluZ1NoYWRl
cnMgPSB0cnVlOworICAgICAgICBtX3N0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOwog
ICAgIHJldHVybiBzaGFkZXI7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdT
aGFkZXJzKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX3N0
YXRlLmhhc1BlbmRpbmdTaGFkZXJzKQorICAgIGlmICghbV9zdGF0ZS5zdHlsZSgpLT5oYXNGaWx0
ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRl
LmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0YXRlLnN0eWxlLT5tdXRhYmxlRmlsdGVy
KCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBm
aWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0
aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJh
dGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRp
b24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewpAQCAt
NDYzOSw3ICs0NjIzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMo
KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIG1fc3RhdGUuaGFzUGVuZGlu
Z1NoYWRlcnMgPSBmYWxzZTsKKyAgICBtX3N0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKGZhbHNl
KTsKIH0KIAogc3RhdGljIGJvb2wgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0
IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ2ODEsNyArNDY2NSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9y
bVBhcmFtCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJh
bnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUo
bmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnJv
b3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnModmFsdWVzLCBtX3N0YXRlLnN0eWxlKCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBv
cGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0
aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CkBAIC00
OTMxLDEyICs0OTE1LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2
Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4o
YXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAg
IEtVUkwgdXJsID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZh
bHVlLT51cmwoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24+IG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN2Z0RvY3Vt
ZW50VmFsdWUtPnVybCgpLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCksIG9wZXJhdGlvblR5cGUp
OwotICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5j
ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSkg
eworICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5j
ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgbV9zdGF0ZS5kb2N1bWVudCgpKSkgewogICAgICAg
ICAgICAgICAgIGlmICghc3ZnRG9jdW1lbnRWYWx1ZS0+bG9hZFJlcXVlc3RlZCgpKQotICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMuc2V0KG9wZXJhdGlvbi5n
ZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUucGVu
ZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUp
OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0Rv
Y3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2
Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7CiAgICAgICAgICAgICB9CkBA
IC01MDQwLDcgKzUwMjQsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJh
dGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogCiBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5n
SW1hZ2UqIHBlbmRpbmdJbWFnZSkKIHsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291
cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9h
ZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCiAgICAg
aWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlVmFs
dWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKQEAgLTUwNzAs
MjMgKzUwNTQsMjMgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2Fk
UGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW4KIAogdm9pZCBTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiB7Ci0gICAgaWYgKG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVy
dGllcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJv
cGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1h
cDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRp
ZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFBlbmRpbmdJbWFnZVBy
b3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0
eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3Bl
cnRpZXMoKS5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1By
b3BlcnR5SUQgY3VycmVudFByb3BlcnR5ID0gKml0OwogCiAgICAgICAgIHN3aXRjaCAoY3VycmVu
dFByb3BlcnR5KSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsK
LSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0YXRlLnN0
eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3Vu
ZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmls
bExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91
bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5k
TGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmlt
YWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAg
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdl
KCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50
RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdGF0ZS5zdHls
ZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRh
LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0g
Y29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUoKS0+Y29udGVudERhdGEoKSk7
IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAgICAg
ICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihj
b250ZW50RGF0YSktPmltYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkgewpAQCAtNTA5OSw3ICs1MDgzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlz
dCogY3Vyc29yTGlzdCA9IG1fc3RhdGUuc3R5bGUtPmN1cnNvcnMoKSkgeworICAgICAgICAgICAg
aWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkg
ewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNv
ciA9IGN1cnNvckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFn
ZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKQEAgLTUxMTEsMTcgKzUwOTUsMTcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6
IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1f
c3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFn
ZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPmxpc3RTdHls
ZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJ
bWFnZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1h
Z2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpc3RTdHlsZUltYWdl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRl
LnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAg
ICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUu
c3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHlsZS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFn
ZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPmJvcmRlcklt
YWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJ
bWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEJvcmRl
ckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVm
bGVjdDogewotICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1f
c3RhdGUuc3R5bGUtPmJveFJlZmxlY3QoKSkgeworICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVj
dGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUuc3R5bGUoKS0+Ym94UmVmbGVjdCgpKSB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24t
Pm1hc2soKTsKICAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0lt
YWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVm
UHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2Fz
dDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CkBAIC01MTMxLDEyICs1
MTE1LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUtPm1hc2tC
b3hJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldE1hc2tC
b3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0lt
YWdlKj4obV9zdGF0ZS5zdHlsZS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAg
ICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0
eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAg
ICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPm1h
c2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogewotICAgICAgICAgICAgZm9y
IChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMo
KTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgeworICAgICAgICAg
ICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUoKS0+YWNjZXNzTWFz
a0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0
SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1h
c2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAgICAgIH0KQEAgLTUxNDcsNyArNTEzMSw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICB9CiAgICAg
fQogCi0gICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgbV9z
dGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aAppbmRleCA4NGMzY2QxZmMwMzdkYWIwZGZkNzVhOGZmZDdkOGI5YTVjNDk3M2Y4Li43MGM1ZTkw
MTNhNjRlMDkyYzFjNjljYWNkMjgyMDU3NTZiYzhkYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgKQEAgLTE2NCwyMCArMTY0LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNl
bGVjdG9yKiA9IDApOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGU7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZTsg
fQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQ7
IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0eWxl
KCk7IH0KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9CisgICAgRWxlbWVu
dCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpOyB9CiAgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQotICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnRE
ZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9
Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBt
X3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRF
ZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7
IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0g
ICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRl
LmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAg
ICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9u
KSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0
T3JpZW50YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5wYXJlbnROb2RlOyB9CisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlKCk7IH0KIAogICAgIHZvaWQgcmVzZXRBdXRob3JTdHls
ZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYpOwpAQCAtMjAxLDcgKzE5Myw2
IEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29s
dmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9Q
U0VVRE8pOwogICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgY29sbGVj
dEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CkBAIC0z
MDksOCArMzAwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVu
dCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBt
X3N0YXRlLm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KLQogICAgIHN0cnVjdCBSdWxlUmFu
Z2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4KGxh
c3RSdWxlSW5kZXgpIHsgfQogICAgICAgICBpbnQmIGZpcnN0UnVsZUluZGV4OwpAQCAtMzgyLDcg
KzM3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAgICAgdm9p
ZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAotICAgIGJvb2wg
cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7
CisgICAgYm9vbCBydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlLCBQc2V1ZG9JZCYpOwogICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25z
dCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwog
ICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0
IEVsZW1lbnQqKTsKICAgICBlbnVtIFN0eWxlQXBwbGljYXRpb25QYXNzIHsKQEAgLTQzMiw3MiAr
NDIxLDE2NiBAQCBwdWJsaWM6CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsK
ICAgICBwdWJsaWM6CiAgICAgICAgIFN0YXRlKCkKLSAgICAgICAgOiBlbGVtZW50KDApCi0gICAg
ICAgICwgc3R5bGVkRWxlbWVudCgwKQotICAgICAgICAsIHBhcmVudE5vZGUoMCkKLSAgICAgICAg
LCBwYXJlbnRTdHlsZSgwKQotICAgICAgICAsIHJvb3RFbGVtZW50U3R5bGUoMCkKLSAgICAgICAg
LCByZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgICAgICwgc2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0g
ICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VVRE8pCi0gICAgICAgICwgZWxlbWVudExpbmtTdGF0
ZShOb3RJbnNpZGVMaW5rKQotICAgICAgICAsIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChm
YWxzZSkKLSAgICAgICAgLCBlbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoZmFsc2UpCi0gICAg
ICAgICwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCi0gICAgICAgICwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKKyAgICAgICAgOiBtX2VsZW1lbnQoMCkK
KyAgICAgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkKKyAgICAgICAgLCBtX3BhcmVudE5vZGUoMCkK
KyAgICAgICAgLCBtX3BhcmVudFN0eWxlKDApCisgICAgICAgICwgbV9yb290RWxlbWVudFN0eWxl
KDApCisgICAgICAgICwgbV9yZWdpb25Gb3JTdHlsaW5nKDApCisgICAgICAgICwgbV9zYW1lT3Jp
Z2luT25seShmYWxzZSkKKyAgICAgICAgLCBtX3BzZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICAg
ICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQorICAgICAgICAsIG1fZGlzdHJp
YnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQorICAgICAgICAsIG1fZWxlbWVudEFmZmVjdGVk
QnlDbGFzc1J1bGVzKGZhbHNlKQorICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKHRydWUpCisgICAgICAgICwgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZh
bHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgLCBtX2hhc1BlbmRpbmdTaGFk
ZXJzKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwgbV9saW5lSGVpZ2h0VmFsdWUoMCkKKyAgICAg
ICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAgICAgLCBtX2hhc1VBQXBwZWFyYW5jZShmYWxz
ZSkKKyAgICAgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91bmRGaWxsTGF5ZXIpIHsgfQor
CisgICAgcHVibGljOgorICAgICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICAg
ICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiwgRWxlbWVudCosIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOworICAgICAgICB2b2lk
IGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9lbGVtZW50ID0gMDsKKyAgICAgICAg
ICAgIG1fc3R5bGVkRWxlbWVudCA9IDA7CisgICAgICAgICAgICBtX3BhcmVudFN0eWxlID0gMDsK
KyAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBtX3JlZ2lvbkZvclN0
eWxpbmcgPSAwOworICAgICAgICAgICAgbV9ydWxlTGlzdCA9IDA7CisgICAgICAgICAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
LmNsZWFyKCk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICAgICAsIGhhc1BlbmRpbmdT
aGFkZXJzKGZhbHNlKQorICAgICAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOwog
I2VuZGlmCi0gICAgICAgICwgbGluZUhlaWdodFZhbHVlKDApCi0gICAgICAgICwgZm9udERpcnR5
KGZhbHNlKQotICAgICAgICAsIGhhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAgICAgLCBiYWNr
Z3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpICYmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMuY2xl
YXIoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgICAgIEVsZW1lbnQq
IGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICAgICAgU3R5bGVkRWxl
bWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVudDsgfQor
ICAgICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1f
c3R5bGUgPSBzdHlsZTsgfQorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHRh
a2VTdHlsZSgpIHsgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOyB9CisKKyAgICAgICAgU3RhdGlj
Q1NTUnVsZUxpc3QqIGVuc3VyZVJ1bGVMaXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtX3J1bGVMaXN0KQorICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxl
TGlzdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9ydWxlTGlzdC5nZXQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHRha2VSdWxlTGlzdCgp
IHsgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOyB9CisKKyAgICAgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorICAgICAgICB2
b2lkIHNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgeyBtX3BhcmVudFN0
eWxlID0gcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQorCisg
ICAgICAgIHZvaWQgc2V0UmVnaW9uRm9yU3R5bGluZyhSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lv
bikgeyBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZW5kZXJSZWdpb247IH0KKyAgICAgICAgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHls
aW5nOyB9CisgICAgICAgIHZvaWQgc2V0U2FtZU9yaWdpbk9ubHkoYm9vbCBpc1NhbWVPcmlnaW5P
bmx5KSB7IG1fc2FtZU9yaWdpbk9ubHkgPSBpc1NhbWVPcmlnaW5Pbmx5OyB9CisgICAgICAgIGJv
b2wgaXNTYW1lT3JpZ2luT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtZU9yaWdpbk9ubHk7IH0K
KyAgICAgICAgUHNldWRvSWQgcHNldWRvU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BzZXVkb1N0
eWxlOyB9CisgICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0KKyAgICAgICAgYm9vbCBkaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dDsgfQorICAgICAgICB2b2lkIHNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhib29sIGlz
QWZmZWN0ZWQpIHsgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBpc0FmZmVjdGVkOyB9
CisgICAgICAgIGJvb2wgZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7IH0KICAgICAgICAgCi1wdWJsaWM6Cisg
ICAgICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGJvb2wgaXNBcHBseSkg
eyBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGlzQXBwbHk7IH0KKyAgICAgICAgdm9p
ZCBzZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2Fw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBpc0FwcGx5OyB9CisgICAgICAgIGJvb2wg
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGU7IH0KKyAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlOyB9CisgICAgICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwJiBwZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkgeyByZXR1cm4gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOyB9CisjaWYgRU5BQkxF
KENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgICAgICBQZW5kaW5nU1ZHRG9jdW1lbnRN
YXAmIHBlbmRpbmdTVkdEb2N1bWVudHMoKSB7IHJldHVybiBtX3BlbmRpbmdTVkdEb2N1bWVudHM7
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgdm9pZCBzZXRIYXNQ
ZW5kaW5nU2hhZGVycyhib29sIGhhc1BlbmRpbmdTaGFkZXJzKSB7IG1faGFzUGVuZGluZ1NoYWRl
cnMgPSBoYXNQZW5kaW5nU2hhZGVyczsgfQorICAgICAgICBib29sIGhhc1BlbmRpbmdTaGFkZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNQZW5kaW5nU2hhZGVyczsgfQorI2VuZGlmCisKKyAgICAg
ICAgdm9pZCBzZXRMaW5lSGVpZ2h0VmFsdWUoQ1NTVmFsdWUqIHZhbHVlKSB7IG1fbGluZUhlaWdo
dFZhbHVlID0gdmFsdWU7IH0KKyAgICAgICAgQ1NTVmFsdWUqIGxpbmVIZWlnaHRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUhlaWdodFZhbHVlOyB9CisgICAgICAgIHZvaWQgc2V0Rm9udERp
cnR5KGJvb2wgaXNEaXJ0eSkgeyBtX2ZvbnREaXJ0eSA9IGlzRGlydHk7IH0KKyAgICAgICAgYm9v
bCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREaXJ0eTsgfQorCisgICAgICAgIHZv
aWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9o
YXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CisgICAgICAgICAgICBp
ZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKKyAgICAgICAgICAgICAgICBtX2JvcmRlckRhdGEgPSBt
X3N0eWxlLT5ib3JkZXIoKTsKKyAgICAgICAgICAgICAgICBtX2JhY2tncm91bmREYXRhID0gKm1f
c3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKKyAgICAgICAgICAgICAgICBtX2JhY2tncm91bmRD
b2xvciA9IG1fc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGJvb2wgaGFzVUFBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNV
QUFwcGVhcmFuY2U7IH0KKyAgICAgICAgQm9yZGVyRGF0YSBib3JkZXJEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3JkZXJEYXRhOyB9CisgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KKyAgICAgICAgQ29sb3IgYmFja2dy
b3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KKworICAgICAg
ICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
cGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRTdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7IH0KKyAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICAgICAgdm9pZCBzZXRab29t
KGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0Wm9vbShmKTsgfQorICAgICAg
ICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxl
LT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisgICAgICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3Qo
Ym9vbCBiKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFRleHRTaXplQWRqdXN0KGIpOyB9
CisgICAgICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsg
bV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Cisg
ICAgICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50
YXRpb24pIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRP
cmllbnRhdGlvbik7IH0KKworICAgICAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1h
dGNoZWRSdWxlcygpIHsgcmV0dXJuIG1fbWF0Y2hlZFJ1bGVzOyB9CisgICAgICAgIHZvaWQgYWRk
TWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5k
KHJ1bGUpOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1FKGJ1ZyAx
MDg1NjMpOiB0byBtYWtlIGl0IGVhc2llciB0byByZXZpZXcsIHRoZXNlIG1lbWJlcgogICAgICAg
ICAvLyB2YXJpYWJsZXMgYXJlIHB1YmxpYy4gSG93ZXZlciB3ZSBzaG91bGQgYWRkIG1ldGhvZHMg
dG8gYWNjZXNzCiAgICAgICAgIC8vIHRoZXNlIHZhcmlhYmxlcy4KLSAgICAgICAgRWxlbWVudCog
ZWxlbWVudDsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKLSAgICAgICAgU3R5
bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudDsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
Tm9kZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlOwotICAgICAgICBSZW5kZXJT
dHlsZSogcm9vdEVsZW1lbnRTdHlsZTsKKyAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OworICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CisgICAgICAgIFN0eWxlZEVsZW1lbnQq
IG1fc3R5bGVkRWxlbWVudDsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogbV9wYXJlbnROb2RlOwor
ICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKKyAgICAgICAgUmVuZGVyU3R5bGUq
IG1fcm9vdEVsZW1lbnRTdHlsZTsKICAgICAgICAgCi0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVn
aW9uRm9yU3R5bGluZzsKLSAgICAgICAgYm9vbCBzYW1lT3JpZ2luT25seTsKLSAgICAgICAgUHNl
dWRvSWQgcHNldWRvU3R5bGU7Ci0KLSAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0
ZTsKKyAgICAgICAgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmc7CisgICAgICAgIGJv
b2wgbV9zYW1lT3JpZ2luT25seTsKKyAgICAgICAgUHNldWRvSWQgbV9wc2V1ZG9TdHlsZTsKIAot
ICAgICAgICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKKyAgICAgICAgRUluc2lk
ZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlOwogCi0gICAgICAgIGJvb2wgZWxlbWVudEFmZmVjdGVk
QnlDbGFzc1J1bGVzOworICAgICAgICBib29sIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
OwogCi0gICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG87CisgICAgICAgIGJvb2wgbV9lbGVt
ZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7CiAKICAgICAgICAgLy8gQSBidWZmZXIgdXNlZCB0byBo
b2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwKICAgICAgICAgLy8g
YW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvciBtZXJnZSBzb3J0aW5nLgotICAgICAgICBW
ZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4gbWF0Y2hlZFJ1bGVzOwotICAgICAgICBSZWZQdHI8
U3RhdGljQ1NTUnVsZUxpc3Q+IHJ1bGVMaXN0OworICAgICAgICBWZWN0b3I8Y29uc3QgUnVsZURh
dGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisgICAgICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlz
dD4gbV9ydWxlTGlzdDsKIAotICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZTsKLSAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOworICAgICAg
ICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOworICAgICAgICBib29sIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKIAotICAgICAgICBQZW5kaW5nSW1hZ2VQcm9w
ZXJ0eU1hcCBwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOworICAgICAgICBQZW5kaW5nSW1hZ2VQcm9w
ZXJ0eU1hcCBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7CiAjaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgICAgICBib29sIGhhc1BlbmRpbmdTaGFkZXJzOworICAgICAgICBib29sIG1faGFzUGVu
ZGluZ1NoYWRlcnM7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShT
VkcpCi0gICAgICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCBwZW5kaW5nU1ZHRG9jdW1lbnRzOwor
ICAgICAgICBQZW5kaW5nU1ZHRG9jdW1lbnRNYXAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOwogI2Vu
ZGlmCi0gICAgICAgIENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWU7Ci0gICAgICAgIGJvb2wgZm9u
dERpcnR5OworICAgICAgICBDU1NWYWx1ZSogbV9saW5lSGVpZ2h0VmFsdWU7CisgICAgICAgIGJv
b2wgbV9mb250RGlydHk7CiAKLSAgICAgICAgYm9vbCBoYXNVQUFwcGVhcmFuY2U7Ci0gICAgICAg
IEJvcmRlckRhdGEgYm9yZGVyRGF0YTsKLSAgICAgICAgRmlsbExheWVyIGJhY2tncm91bmREYXRh
OwotICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgICAgIGJvb2wgbV9oYXNVQUFw
cGVhcmFuY2U7CisgICAgICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOworICAgICAgICBGaWxs
TGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKKyAgICAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7
CiAgICAgfTsKIAogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUo
KSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CkBAIC01MTAsMTUgKzU5MywyMyBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlKik7CiAKLSAg
ICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
OyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCk7IH0KIAogICAg
IHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEp
OwogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFs
dWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBs
aWVyID0gMSk7CiAKICAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0
eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFw
cGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQotCisgICAgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0YXRlLmZvbnRE
ZXNjcmlwdGlvbigpOyB9CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVz
Y3JpcHRpb24oKSB7IHJldHVybiBtX3N0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOyB9Cisg
ICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsg
fQorICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQorICAg
IHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9v
bShmKTsgfQorICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fc3RhdGUuc2V0
VGV4dFNpemVBZGp1c3QoYik7IH0KKyAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKSB7IG1fc3RhdGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Cisg
ICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlv
bikgeyBtX3N0YXRlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisgICAg
CiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAg
ICAgCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186981</attachid>
            <date>2013-02-06 19:45:10 -0800</date>
            <delta_ts>2013-02-08 00:22:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108563-20130207124146.patch</filename>
            <type>text/plain</type>
            <size>142183</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTljOGRlNmQ0ZDJiMzRj
OWQ3MzE3Mzg3N2JiYjA1NjE3MGFhOTAxNS4uNTEyNDc1MmIyY2FiM2ExMzhlZTViMTI3ZGYyMDJi
ZDc3NjNkMmU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMi0wNiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmVjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcywgYmVjYXVzZSBtb3N0IG9mIHRo
ZSBtZW1iZXIgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuCisgICAgICAgIFdlIGRvbid0IG5lZWQg
dG8gdXBkYXRlIHRob3NlIHJlYWQtb25seSB2YXJpYWJsZXMgd2hpbGUgcmVzb2x2aW5nCisgICAg
ICAgIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRv
IGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAg
ICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3RhdGUncyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAg
ICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0
IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9u
ZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZpb3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAg
ICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxsIGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50
U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNldWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMg
b24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgZHluYW1pY1BzZXVkbywg
YmVjYXVzZSBkeW5hbWljUHNldWRvIGluCisgICAgICAgIFN0YXRlIGNsYXNzIGlzIGp1c3QgdXNl
ZCBmb3IgcmV0dXJuaW5nIG1hdGNoZWQgcHNldWRvIHN0eWxlIGZyb20KKyAgICAgICAgdGhpcyBy
dWxlTWF0Y2hlcyB0byBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIE5vIG5lZWQgdG8ga2Vl
cAorICAgICAgICBkeW5hbWljUHNldWRvIHdoaWxlIHJlc29sdmluZyBzdHlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
UmVtb3ZlZCBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE8sIGJlY2F1c2UgdGhpcyBtZXRob2QgdXNl
cyBqdXN0CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlZC4gU2VsZWN0b3JDaGVja2Vy
IGRvZXNuJ3Qgc2VlIFN0eWxlUmVzb2x2ZXIncworICAgICAgICBtX3BzZXVkb1N0eWxlIGRpcmVj
dGx5LiBOZWVkIHRvIHVzZSBTZWxlY3RvckNoZWNrZXJDb250ZXh0LiBTbyBubworICAgICAgICBu
ZWVkIHRvIHNldCBtX3BzZXVkb1N0eWxlIHRvIGJlIE5PUFNFVURPLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNr
QnJlYWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Omhhc1BhcmVudE5vZGUpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAgICAg
TW9kaWZpZWQgdG8gdXNlIGNsZWFyIGF0IHRoZSBlbmQgb2Ygc3R5bGVGb3JFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnRha2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0UGFyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6aXNTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0RWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aGFzUGVuZGluZ1NoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldExpbmVIZWln
aHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bGluZUhl
aWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRG
b250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpoYXNVQUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmJvcmRlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmJhY2tncm91bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpiYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLCAuLi4gYW5kIHNldFRleHRPcmllbnRhdGlvbiB3ZXJlIG1vdmVkIGZyb20KKyAg
ICAgICAgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjptYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIFRoZXNlIGZv
bnREZXNjcmlwdGlvbiwgLi4uLCBzZXRUZXh0T3JpZW50YXRpb24gYXJlIHdyYXBwZXJzIHRvCisg
ICAgICAgIGludm9rZSBTdGF0ZSdzIG1ldGhvZHMuIFN0eWxlQnVpbGRlciBzdGlsbCBkZXBlbmRz
IG9uIFN0eWxlUmVzb2x2ZXIKKyAgICAgICAgYW5kIGludm9rZXMgdGhlc2UgbWV0aG9kcy4gU28g
d2UgbmVlZCB0aGVzZSB3cmFwcGVycy4KKwogMjAxMy0wMi0wNiAgVG9tIFNlcGV6ICA8dHNlcGV6
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBkb2N1bWVudC5yZWZlcnJlciBsZWFrYWdlIHdpdGgg
WFNTIEF1ZGl0b3IgcGFnZSBibG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NW
R0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCmluZGV4IGFiNTZmNjYxMTc5N2ZkOTQ3Nzk2ZjQ4ZjMxMzllNzgxM2E5N2U4M2Qu
LmQxZTljNjBkM2I5ZGVkN2UyMGZjNzY1ZTljNzdhNDMxNmUzYjZkMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZp
bmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgXAogeyBcCi0g
ICAgc3Znc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+cHJv
cCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5bGUoKS0+c3Zn
U3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0xMTAsMTAgKzExMCwx
MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKLSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZS0+YWNj
ZXNzU1ZHU3R5bGUoKTsKKyAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHls
ZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOwogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJl
bnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwg
PSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUt
PmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnRO
b2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVl
LT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0
aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25k
aW5nIGZyb250LWVuZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIs
CkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZpbGw6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5w
YXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwog
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUtPmZp
bGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVu
dFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQpAQCAtMjQwLDE0ICsyNDAsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAg
ICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+
cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0
eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1Bh
aW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7
CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0g
c3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQ
YXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFp
bnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1Bh
aW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNv
bG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xvcigpKSwg
c3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBh
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0zNjQsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9t
SVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJ
ZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgpA
QCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0
aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRN
YXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21J
UklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVu
dGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgpAQCAt
MzkyLDcgKzM5Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJr
ZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklT
dHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5
bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlm
aWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAg
LTQyOSw3ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmls
dGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3Ry
aW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZy
b21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00NDMsNyArNDQzLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNW
R1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5l
bGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVz
b3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMs
IHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDoKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
UkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
OwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5k
b2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNW
R1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5k
b2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dEFuY2hvcjoKQEAgLTQ3OCwxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0
b3BDb2xvciwgU3RvcENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigp
KQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29s
b3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNv
bG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJv
bVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0
eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwog
ICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNf
Y2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Rmxvb2RPcGFjaXR5OgpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3Is
IEZsb29kQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAg
ICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NW
YWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkp
KTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgp
LT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBAIC01NTAsNyArNTUwLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBh
cmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5w
YXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxlKCkt
PnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxl
KCktPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0luaXRp
YWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2NSw5ICs1NjUsOSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgU2hhZG93VmFsdWUq
IGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUpOwotICAgICAgICAg
ICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0
eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSwKLSAgICAgICAgICAgICAgICBpdGVt
LT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJs
dXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSkgOiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSks
CisgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMTgyOTBmMzg1NjQ4OTUzNzZlNTg5NmFjYTI0MGE4MDA3
NzI2MjczYy4uOTEyNjAzMGE2ZTcwNDBlY2E1NWMyYzkxOTEwM2UyZjcyZjQ0NThiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTk0LDE0ICsxOTQsMTQgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9w
KSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlLT5zZXQjI1Byb3AobV9z
dGF0ZS5wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQ
cm9wKG1fc3RhdGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQog
CiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRM
RV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3RhdGUu
c3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIG1f
c3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBc
CiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTQ3NSwxMSArNDc1LDExIEBAIGJvb2wgTWF0Y2hpbmdV
QVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0
LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBBU1NFUlQobWF0Y2hSZXF1ZXN0LnJ1bGVT
ZXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmVsZW1lbnQpOworICAgIEFTU0VSVChtX3N0YXRlLmVs
ZW1lbnQoKSk7CiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0ZS5lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQg
PSBzdGF0ZS5zdHlsZWRFbGVtZW50OworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVt
ZW50KCk7CisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVs
ZW1lbnQoKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gZWxlbWVudC0+c2hh
ZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewogICAgICAgICBB
U1NFUlQoc3R5bGVkRWxlbWVudCk7CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1
ZXN0LCBSdWxlUgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVS
YW5nZSkKIHsKLSAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGluZykKKyAgICBpZiAoIW1f
c3RhdGUucmVnaW9uRm9yU3R5bGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25l
ZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAg
ICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gbWF0Y2hSZXF1ZXN0LnJ1
bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3I7Ci0gICAg
ICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgeworICAgICAgICBp
ZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpLT5ub2RlKCkpKSkgewogICAgICAgICAgICAg
UnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxl
Y3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwogICAgICAgICAgICAgQVNTRVJU
KHJlZ2lvblJ1bGVzKTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVx
dWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJl
cXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOwpAQCAtNTM2LDI0ICs1MzYsMjMgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVl
c3QmIG1hdGNoUmVxdWUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKLSAgICBpZiAoc3RhdGUubWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBWZWN0b3I8Y29u
c3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcyA9IHN0YXRlLm1hdGNoZWRSdWxlcygpOwor
ICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBz
b3J0TWF0Y2hlZFJ1bGVzKCk7CiAKICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgpID09
IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7Ci0gICAgICAgIGlmICghc3RhdGUu
cnVsZUxpc3QpCi0gICAgICAgICAgICBzdGF0ZS5ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0
OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNo
ZWRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0LT5ydWxlcygp
LmFwcGVuZChzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVy
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgc3RhdGUuZW5zdXJlUnVsZUxpc3QoKS0+cnVsZXMoKS5hcHBl
bmQobWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNo
ZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewotICAgICAg
ICBpZiAoc3RhdGUuc3R5bGUgJiYgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVbmlx
dWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1
bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRlLm1hdGNo
ZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKHN0YXRl
LnN0eWxlKCkgJiYgbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2Vs
ZWN0b3IoKSkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAg
ICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5w
cm9wZXJ0aWVzKCksIG1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBtYXRjaGVkUnVsZXNbaV0tPmxp
bmtNYXRjaFR5cGUoKSwgbWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7
CiAgICAgfQogfQogCkBAIC01NjQsMTIgKzU2MywxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5
IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdv
dCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxl
cygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVs
ZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRlLmVsZW1l
bnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOworICAgIGlmIChtX3Njb3BlUmVz
b2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tD
b25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9vbCBhcHBseUF1dGhv
clN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHls
ZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAgdW5zaWdu
ZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBtX3N0
YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0ZS5tYXRjaGVkUnVs
ZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgICAgICAgICBjb25z
dCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJlc29sdmVy
LT5zdGFja0ZyYW1lQXQoaSk7CkBAIC02MDAsNyArNTk5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1h
dGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJldHVybiBt
X3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2NvcGVSZXNv
bHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0
UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKQEAgLTYxMSwxNyArNjEwLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICNpZiBFTkFC
TEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVh
cigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVz
OwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50LCBt
YXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0
ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxl
cy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJl
c3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMs
IG1fc3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMs
IG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKICAgICB9CiAgICAgc29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQpAQCAtNjMyLDEwICs2MzEsMTAgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKLSAgICBt
X3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCku
Y2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCkKKyAg
ICBpZiAoIW1fc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRj
aCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgpAQCAtNjUzLDcgKzY1Miw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKICAgICBpZiAoIW1fdXNlclN0eWxlKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSA9IHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVl
c3QobV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKQEAgLTY2Niw3ICs2NjUs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hV
QVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQogewotICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVh
cigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQu
cmFuZ2VzLlVBUnVsZVJhbmdlKCk7CkBAIC02ODMsNyArNjgyLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
cnVsZXMsIGMKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIC8vIEluIHNvbWUgY2Fz
ZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20gZWxlbWVudHMgaW4g
dGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAgLy8gQW5jZXN0b3Ig
aWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0IGNhc2UgYW5kIHdl
IGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1f
c2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSk7
CisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFj
a0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKCkpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9
IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewpAQCAtNjkzLDcgKzY5Miw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAKICAgICAgICAg
U3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
TWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwotICAgICAgICBpZiAocnVsZU1hdGNo
ZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSkpIHsKKyAgICAgICAgUHNldWRvSWQgZHlu
YW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBpZiAocnVsZU1hdGNoZXMocnVsZURhdGEs
IG1hdGNoUmVxdWVzdC5zY29wZSwgZHluYW1pY1BzZXVkbykpIHsKICAgICAgICAgICAgIC8vIElm
IHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0
aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBw
cm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0
aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1hdGNoUmVxdWVzdC5pbmNsdWRlRW1w
dHlSdWxlcykpIHsKQEAgLTcwMSwxOSArNzAxLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBj
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVkQ1NTUnVsZXMgQVBJ
IHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCi0gICAgICAgICAgICBp
ZiAoc3RhdGUuc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmlzU2FtZU9yaWdpbk9ubHkoKSAmJiAh
cnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CiAgICAgICAgICAgICAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKICAgICAg
ICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVk
b1N0eWxlID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNv
bGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5k
eW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0ZS5keW5hbWljUHNldWRvKTsK
KyAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVE
T0lEKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHls
ZShkeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
Ly8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxl
cyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1bGVSYW5nZS5sYXN0UnVsZUluZGV4OwpAQCAt
NzIxLDcgKzcyMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAg
ICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1bGVSYW5nZS5sYXN0UnVsZUluZGV4Owog
CiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVk
IHJ1bGVzLgotICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CisgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOwogICAgICAgICAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC03MzksNyAr
NzM5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSog
cjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hl
ZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVkUnVsZXMuYmVnaW4oKSwg
bV9zdGF0ZS5tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7CisgICAgc3RkOjpzb3J0
KG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuYmVnaW4oKSwgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5l
bmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQpAQCAt
NzUxLDE3ICs3NTEsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAgICAgICAgbWF0Y2hV
c2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVz
LCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBm
cm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCkgewotICAgICAgICBhZGRF
bGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5wcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50
KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUu
c3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAogICAgICAg
ICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25zLgogICAgICAg
ICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1
bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMs
IHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlw
bGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkp
IHsKKyAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLnN0eWxlZEVsZW1lbnQpLT5kaXJl
Y3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLnN0eWxlZEVs
ZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CiAg
ICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0
aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0aW9u
KCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBAIC03NzIsMTggKzc3
MiwxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgICAgICBtYXRjaEF1dGhvclJ1bGVz
KHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0
cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0
eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKSB7Cisg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVu
dCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAg
IC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBDU1NP
TSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJvbCBzaGFkb3cgdHJlZXMg
c2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAgICAgYm9vbCBpc0lubGlu
ZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKS0+
aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNJblNoYWRvd1RyZWUoKTsK
KyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KLSAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxl
bWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFk
ZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3ZlcnJpZGUgc3R5bGUu
Ci0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5p
c1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQs
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRlLnN0eWxlZEVsZW1lbnQpLT5hbmltYXRl
ZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOworICAgIGlm
IChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZH
RWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CiAjZW5kaWYKQEAgLTc5OCwx
MiArNzk4LDE3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVu
dCogZSkKK3sKKyAgICBtX2VsZW1lbnQgPSBlOworICAgIG1fc3R5bGVkRWxlbWVudCA9IGUgJiYg
ZS0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZSkgOiAw
OworICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBlLT5kb2N1bWVudCgpLT52aXNpdGVkTGlu
a1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6IE5vdEluc2lkZUxpbms7Cit9CisKIGlu
bGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7Ci0gICAg
aWYgKG1fc3RhdGUuZWxlbWVudCAhPSBlKSB7Ci0gICAgICAgIG1fc3RhdGUuZWxlbWVudCA9IGU7
Ci0gICAgICAgIG1fc3RhdGUuc3R5bGVkRWxlbWVudCA9IG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0
YXRlLmVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KG1fc3RhdGUuZWxlbWVudCkgOiAwOwotICAgICAgICBtX3N0YXRlLmVsZW1lbnRMaW5rU3Rh
dGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShl
KTsKKyAgICBpZiAobV9zdGF0ZS5lbGVtZW50KCkgIT0gZSkgeworICAgICAgICBtX3N0YXRlLmlu
aXRFbGVtZW50KGUpOwogICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25T
ZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CiAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5z
ZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKQEAgLTgxMSwzNSArODE2
LDMyIEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUp
CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0Rm9yU3R5bGVSZXNv
bHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRv
SUQpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEZvclN0eWxlUmVzb2x2
ZShEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSwgUHNldWRvSWQgcHNldWRvSWQsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKIHsK
LSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHN0YXRlLnBzZXVkb1N0eWxlID0gcHNl
dWRvSUQ7CisgICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lkOworICAgIG1fcmVnaW9uRm9yU3R5
bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CiAKICAgICBpZiAoZSkgewogICAgICAgICBOb2RlUmVu
ZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBzdGF0ZS5wYXJlbnROb2RlID0gY29u
dGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKTsKLSAgICAgICAgc3RhdGUucGFy
ZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CisgICAgICAg
IG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7
CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgp
ID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoKLSAgICAgICAg
ICAgIHN0YXRlLnBhcmVudE5vZGUgPyBzdGF0ZS5wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDog
MDsKLSAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5p
bnNlcnRpb25Qb2ludCgpOworICAgICAgICAgICAgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2Rl
LT5yZW5kZXJTdHlsZSgpIDogMDsKKyAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3Rh
dGUucGFyZW50Tm9kZSA9IDA7Ci0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gcGFyZW50U3R5
bGU7Ci0gICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGZhbHNlOwor
ICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFyZW50
U3R5bGU7CisgICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7CiAg
ICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSA6IDA7Ci0gICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9jdW1lbnQoKS0+
cmVuZGVyU3R5bGUoKTsKLSAgICBzdGF0ZS5yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAm
JiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7
Ci0KLSAgICBzdGF0ZS5zdHlsZSA9IDA7Ci0KLSAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0
aWVzLmNsZWFyKCk7Ci0KLSAgICBzdGF0ZS5ydWxlTGlzdCA9IDA7CisgICAgUmVuZGVyU3R5bGUq
IGRvY1N0eWxlID0gZG9jdW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgbV9yb290RWxlbWVudFN0
eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJT
dHlsZSgpIDogZG9jU3R5bGU7CiAKLSAgICBzdGF0ZS5mb250RGlydHkgPSBmYWxzZTsKKyAgICBt
X3N0eWxlID0gMDsKKyAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBt
X3J1bGVMaXN0ID0gMDsKKyAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CkBAIC05MDIsMTYgKzkwNCwx
NiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxl
U2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0KQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRl
Lm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2Rl
KFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RSdWxlSW5kZXgg
PSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UoZmlyc3RS
dWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNo
UmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKICAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlmIChtX3N0YXRlLm1h
dGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTkxOSw3ICs5MjEsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAg
IGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElucHV0RWxlbWVudCogdGhp
c0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElucHV0
RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50LT50b0lucHV0RWxlbWVu
dCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxl
bWVudCgpLT50b0lucHV0RWxlbWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8
ICFvdGhlcklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTQwLDI1ICs5
NDIsMjUgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5
bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNS
ZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9
IHN0YXRlLmVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQt
PmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0VuYWJsZWRGb3Jt
Q29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNE
ZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKSkKKyAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0
YXRlLmVsZW1lbnQoKS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxp
ZGl0eVN0eWxlUnVsZXMoKSkgeworICAgIGlmIChzdGF0ZS5kb2N1bWVudCgpLT5jb250YWluc1Zh
bGlkaXR5U3R5bGVSdWxlcygpKSB7CiAgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVu
dC0+d2lsbFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5l
bGVtZW50LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0
ZS5lbGVtZW50KCktPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJv
bEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkp
KQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5p
c0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5n
ZSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAgICBpZiAoZWxlbWVu
dC0+aXNPdXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc091dE9mUmFuZ2UoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk3NCwyNSArOTc2LDI1IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50
KQogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVB
ZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0
CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoc3RhdGUuZWxl
bWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEo
KSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0Nh
bmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
c3RhdGUuZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1
dGUobGFuZ0F0dHIpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUo
bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcykgeworICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKCkpIHsKICAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xh
c3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0
ZS0+aGFzQ2xhc3MoKSkgewogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50
cyByZXF1aXJlIGEgKHNsb3chKSBnZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xh
c3MiIGlzIGFuIGFuaW1hdGFibGUgYXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChzdGF0
ZS5lbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJp
YnV0ZShjbGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1l
bnQoKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNs
YXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewogI2VuZGlmCi0g
ICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9IHNoYXJpbmdDYW5k
aWRhdGUtPmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmNs
YXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIH0KQEAgLTEwMDAs
MTIgKzEwMDIsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRl
bnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPnByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotICAgIGlmIChzdGF0ZS5lbGVtZW50LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFn
KSkgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHN0YXRl
LmVsZW1lbnQpLT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxl
bWVudCo+KHNoYXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCisgICAgaWYgKHN0YXRl
LmVsZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50KCkpLT5pc0RldGVybWlu
YXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRh
dGUpLT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
I2VuZGlmCkBAIC0xMDIyLDcgKzEwMjQsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRlLmVsZW1lbnQtPnRhZ1FO
YW1lKCkpCisgICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudCgpLT50
YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGlu
ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMzIsMjEgKzEwMzQsMjEgQEAg
Ym9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCi0gICAgaWYgKGVsZW1lbnQtPmlz
TGluaygpICE9IHN0YXRlLmVsZW1lbnQtPmlzTGluaygpKQorICAgIGlmIChlbGVtZW50LT5pc0xp
bmsoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5ob3ZlcmVkKCkp
CisgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmhvdmVyZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBz
dGF0ZS5lbGVtZW50LT5hY3RpdmUoKSkKKyAgICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gc3Rh
dGUuZWxlbWVudCgpLT5hY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChl
bGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudC0+Zm9jdXNlZCgpKQorICAgIGlmIChl
bGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5mb2N1c2VkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBzdGF0
ZS5lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1
ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+c2hhZG93UHNldWRvSWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNzc1Rh
cmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRl
SGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQ
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMo
ZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQpAQCAtMTA2Miw3ICsxMDY0
LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVk
RWxlbWVudCogZWxlbWVudCkgY29uc3QKIAogICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAotICAgIGlmIChpc0NvbnRyb2wgIT0gc3RhdGUuZWxl
bWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICBpZiAoaXNDb250cm9sICE9IHN0YXRl
LmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1l
bnQpKQpAQCAtMTA4NiwyMCArMTA4OCwyMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJl
U3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChl
bGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUgIT0g
c3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgJiYgc3RhdGUu
ZWxlbWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBEZW55IHNoYXJpbmcg
c3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgotICAgIGlmIChlbGVt
ZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQo
KSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudCgp
LT5pc1dlYlZUVEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVs
ZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQtPmlzV2ViVlRURWxlbWVu
dCgpICYmIHRvV2ViVlRURWxlbWVudChlbGVtZW50KS0+aXNQYXN0Tm9kZSgpICE9IHRvV2ViVlRU
RWxlbWVudChzdGF0ZS5lbGVtZW50KS0+aXNQYXN0Tm9kZSgpKQorICAgIGlmIChlbGVtZW50LT5p
c1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzV2ViVlRURWxlbWVudCgpICYm
IHRvV2ViVlRURWxlbWVudChlbGVtZW50KS0+aXNQYXN0Tm9kZSgpICE9IHRvV2ViVlRURWxlbWVu
dChzdGF0ZS5lbGVtZW50KCkpLT5pc1Bhc3ROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGlmIChlbGVtZW50ID09
IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8
IHN0YXRlLmVsZW1lbnQgPT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVu
dEZ1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUuZWxlbWVudCgp
ID09IHN0YXRlLmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjEs
MzcgKzExMjMsMzcgQEAgaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2kKIFJlbmRlclN0eWxlKiBTdHls
ZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKLSAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQgfHwgIXN0YXRlLnBhcmVudFN0eWxl
KQorICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJlbnRTdHlsZSgp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUg
c3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50
LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0
eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihzdGF0ZS5zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisg
ICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogICAgIC8vIElkcyBzdG9w
IHN0eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBp
ZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVsZXMu
Y29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBs
KCkpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0lEKCkgJiYgbV9mZWF0dXJl
cy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aWRGb3JTdHlsZVJl
c29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocGFyZW50RWxl
bWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpKQorICAg
IGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50
RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1l
bnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1l
bnQoKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKHN0YXRlLmVsZW1lbnQgPT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0
KCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5jc3NUYXJn
ZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRv
KHN0YXRlLmVsZW1lbnQpKQorICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhzdGF0ZS5l
bGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhY2hlIHdoZXRoZXIgc3Rh
dGUuZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0b3JzLgogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJsZS4gVGhlIHN0eWxl
IHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVSZXNvbHZlci4KLSAg
ICBzdGF0ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBzdGF0ZS5lbGVtZW50ICYmIHN0
YXRlLmVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0
ZS5lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0YXRlLnNldEVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlcyhzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5oYXNDbGFzcygp
ICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVz
KCkpKTsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5z
LgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50
ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOwotICAgIE5vZGUqIGNv
dXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBO
b2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmV2aW91c1NpYmxpbmco
KTsKICAgICB3aGlsZSAoY291c2luTGlzdCkgewogICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7CiAgICAgICAgIGlmIChz
aGFyZUVsZW1lbnQpCkBAIC0xMTczLDcgKzExNzUsNyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNv
bHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzSG9zdFJ1bGVzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNo
aWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBn
ZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCi0gICAgaWYgKHBhcmVudEVs
ZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSkKKyAg
ICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50KCktPnBhcmVu
dEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFyZUVsZW1lbnQt
PnJlbmRlclN0eWxlKCk7CiB9CkBAIC0xMzk1LDkgKzEzOTcsOCBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwg
UmVuZGVyUwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBpbml0RWxlbWVudChl
bGVtZW50KTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQp
OwotICAgIHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOwotICAgIGlm
IChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1
dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9j
dW1lbnQoKSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCwgTk9QU0VVRE8sIHJlZ2lvbkZvclN0eWxp
bmcpOworICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0
YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAgICAgIFJlbmRlclN0eWxl
KiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgICAgIGlmIChzaGFyZWRT
dHlsZSkKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdHlsZTsKQEAgLTE0MDUsMzIgKzE0MDYs
MzIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
Y2xvbmVGb3JQYXJlbnQ7CiAKLSAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUpIHsKLSAgICAgICAg
c3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIHN0YXRlLnN0eWxl
LT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1l
bnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRT
aGFkb3dCb3VuZGFyeSk7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKKyAgICAgICAg
c3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5kYXJ5
KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6
Tm90QXRTaGFkb3dCb3VuZGFyeSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUuc3R5bGUg
PSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVu
ZGVyU3R5bGU6OmNsb25lKHN0YXRlLnN0eWxlLmdldCgpKTsKLSAgICAgICAgc3RhdGUucGFyZW50
U3R5bGUgPSBjbG9uZUZvclBhcmVudC5nZXQoKTsKKyAgICAgICAgc3RhdGUuc2V0U3R5bGUoZGVm
YXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKKyAgICAgICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUoKSk7CisgICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxl
KGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CiAgICAgLy8gY29udGVudGVkaXRhYmxlIGF0
dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2VyLW1vZGlmeSkgc2hvdWxkCiAgICAg
Ly8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRvIGRpc3RyaWJ1dGVkIG5vZGUuCi0g
ICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIGlmIChzdGF0
ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewogICAgICAgICBpZiAoRWxlbWVudCog
cGFyZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAoUmVu
ZGVyU3R5bGUqIHN0eWxlT2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJTdHlsZSgpKQotICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0
LT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZXJN
b2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dElzTGluayh0cnVlKTsKLSAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxl
bWVudExpbmtTdGF0ZTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SXNMaW5rKHRydWUpOwor
ICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCk7
CiAgICAgICAgIGlmIChsaW5rU3RhdGUgIT0gTm90SW5zaWRlTGluaykgewogICAgICAgICAgICAg
Ym9vbCBmb3JjZVZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRv
U3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwogICAgICAgICAgICAg
aWYgKGZvcmNlVmlzaXRlZCkKICAgICAgICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNp
dGVkTGluazsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SW5zaWRlTGluayhs
aW5rU3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0
ZSk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0NvbGxlY3Rpb24gPSBmYWxzZTsKQEAgLTE0NDcs
MTcgKzE0NDgsMTQgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBz
dHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBm
aXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5w
YXJlbnRTdHlsZSwgZWxlbWVudCk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUo
KSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CiAKLSAgICBpbml0RWxlbWVudCgwKTsg
Ly8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgotCi0gICAgaWYgKGNsb25lRm9yUGFy
ZW50KQotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IDA7CisgICAgc3RhdGUuY2xlYXIoKTsg
Ly8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgogCiAgICAgZG9jdW1lbnQoKS0+ZGlk
QWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0g
ICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0
eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVL
ZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCkBAIC0xNDY2
LDE0ICsxNDY0LDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgaWYgKGtleWZyYW1l
LT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwga2V5
ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NFUlQoIW1fc3RhdGUuc3R5bGUpOworICAg
IEFTU0VSVCghbV9zdGF0ZS5zdHlsZSgpKTsKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7
CiAKICAgICAvLyBDcmVhdGUgdGhlIHN0eWxlCi0gICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKLQotICAgIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7
CisgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSkpOwor
ICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQg
dG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQog
ICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhl
IGZpcnN0IHByb3BlcnRpZXMuCkBAIC0xNDg1LDggKzE0ODIsOCBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KiBlbGVtZQogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3
aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQotICAgIGlmIChzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9w
ZXJ0aWVzLgogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQpAQCAtMTUxMyw3ICsxNTEw
LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlm
cmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vz
c1N0eWxlUmVzb2x2ZXIoKTsKIAotICAgIHJldHVybiBzdGF0ZS5zdHlsZS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKQEAgLTE1MzcsNyArMTUzNCw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZy
YW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8g
dGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBz
dHlsZUZvckVsZW1lbnQKICAgICAgICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZSk7CisgICAgICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1
bWVudCgpLCBlKTsKIAogICAgICAgICBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSA9IGtl
eWZyYW1lc1tpXS5nZXQoKTsKIApAQCAtMTU4MSw3ICsxNTc4LDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJT
dHlsZSogZWwKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQogewotICAgIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKTsKKyAgICBB
U1NFUlQocGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAg
LTE1ODksOSArMTU4Niw5IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAKICAgICBpbml0RWxl
bWVudChlKTsKIAotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVk
byk7Ci0gICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgc3RhdGUu
c3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIHN0YXRlLmluaXRG
b3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7CisgICAg
c3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBzdGF0ZS5zdHlsZSgp
LT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogCiAgICAgLy8gU2luY2Ugd2Ug
ZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIg
YWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVz
LgpAQCAtMTYwOCwxMiArMTYwNSwxMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogICAgIGlm
IChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgc3RhdGUuc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOworICAgIHN0YXRl
LnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG8pOwogCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhtYXRjaFJlc3VsdCwgZSk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0
J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAg
ICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZS5nZXQoKSwgbV9zdGF0ZS5wYXJlbnRTdHls
ZSwgMCk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgbV9zdGF0ZS5wYXJl
bnRTdHlsZSgpLCAwKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5j
ZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwpAQCAtMTYyMSwx
NSArMTYxOCwxNSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogICAgIGRvY3VtZW50KCktPmRp
ZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgot
ICAgIHJldHVybiBzdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnRha2VT
dHlsZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUg
c2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29s
dmUoZG9jdW1lbnQoKSwgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RF
bGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgogCi0gICAgbV9z
dGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0YXRlLnN0eWxlLT5p
bmhlcml0RnJvbShtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgIG1fc3RhdGUuc2V0U3R5
bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBtX3N0YXRlLnN0eWxlKCktPmluaGVyaXRG
cm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKIAogICAgIGNvbnN0IGJvb2wgaXNMZWZ0
ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOwogICAgIGNvbnN0IGJvb2wgaXNGaXJzdCA9IGlzRmly
c3RQYWdlKHBhZ2VJbmRleCk7CkBAIC0xNjQwLDcgKzE2MzcsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBt
YXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3Qs
IHBhZ2UpOwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRob3IgUnVsZVNldCBm
b3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KICAgICBtYXRjaFBhZ2VSdWxl
cyhyZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0g
ICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShD
U1NfVkFSSUFCTEVTKQogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0
aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGluaGVyaXRlZE9ubHkpOwpAQCAtMTY1MSw4ICsxNjQ4LDggQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAg
dXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX3N0YXRlLmxpbmVIZWln
aHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1f
c3RhdGUubGluZUhlaWdodFZhbHVlKTsKKyAgICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUo
KSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUu
bGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlv
cml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIApAQCAtMTY2MiwyMCArMTY1OSwyMCBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCkKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAg
ICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewot
ICAgIG1fc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbV9zdGF0ZS5z
ZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9u
dHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJl
bnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3Mo
KSkgewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9z
dGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3Rh
dGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CisgICAgICAgIG1fc3RhdGUu
c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2Rl
KQpAQCAtMTk2Myw3ICsxOTYwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJT
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8v
IExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4K
ICAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFw
cGVhcmFuY2UsIG1fc3RhdGUuYm9yZGVyRGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSwgbV9z
dGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgp
LCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRl
LmJhY2tncm91bmRDb2xvcigpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBz
ZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNQ
c2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpAQCAtMjA0NiwyNiArMjA0MywxNiBAQCBzdGF0aWMg
dm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSkKIAogdm9p
ZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuZm9udERp
cnR5KQorICAgIGlmICghbV9zdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1f
c3RhdGUuc3R5bGUuZ2V0KCk7Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxl
LCBtX3N0YXRlLnBhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1f
c3RhdGUucGFyZW50U3R5bGUpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5
bGUoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFy
ZW50U3R5bGUoKSk7CisgICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVu
dFN0eWxlKCkpOwogICAgIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIG1f
c3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fc3RhdGUu
Zm9udERpcnR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJB
bmRCYWNrZ3JvdW5kKCkKLXsKLSAgICBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSA9IG1fc3RhdGUu
c3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAgICBpZiAobV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2Up
IHsKLSAgICAgICAgbV9zdGF0ZS5ib3JkZXJEYXRhID0gbV9zdGF0ZS5zdHlsZS0+Ym9yZGVyKCk7
Ci0gICAgICAgIG1fc3RhdGUuYmFja2dyb3VuZERhdGEgPSAqbV9zdGF0ZS5zdHlsZS0+YmFja2dy
b3VuZExheWVycygpOwotICAgICAgICBtX3N0YXRlLmJhY2tncm91bmRDb2xvciA9IG1fc3RhdGUu
c3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwotICAgIH0KKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0
ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQog
CiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxl
bWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwODEsNyArMjA2
OCw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxl
UnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBpbml0RWxlbWVu
dChlKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lkKTsKKyAgICBtX3N0
YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwgcHNldWRvSWQpOwogCiAg
ICAgTWF0Y2hSZXN1bHQgZHVtbXk7CiAgICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYgVUFBbmRVc2Vy
Q1NTUnVsZXMpIHsKQEAgLTIwOTQsNTEgKzIwODEsNTAgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlz
dD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwg
UHMKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVz
VG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc3RhdGUuc2FtZU9yaWdp
bk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CisgICAgICAg
IG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2lu
Q1NTUnVsZXMpKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0
cy4KICAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0
eUNTU1J1bGVzKTsKIAotICAgICAgICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7Cisg
ICAgICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoZmFsc2UpOwogICAgIH0KIAogICAgIG1f
c2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7
CiAKLSAgICByZXR1cm4gbV9zdGF0ZS5ydWxlTGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG1f
c3RhdGUudGFrZVJ1bGVMaXN0KCk7CiB9CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1
bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxl
RGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbykKIHsKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHN0YXRlLmR5
bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAogICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2th
YmxlU2VsZWN0b3IoKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBu
b3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBpZiAoc3RhdGUucHNldWRv
U3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IE5P
UFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBXZSBrbm93IGEg
c3VmZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRjaGVzIHNpbXBseSBi
ZWNhdXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1bGUgaGFzaC4KICAgICAgICAgLy8gVGhpcyBp
cyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1l
c3BhY2UuCi0gICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5n
SFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIHN0YXRlLmVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkg
eworICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxC
YXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgewog
ICAgICAgICAgICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChydWxlRGF0YS5z
ZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tl
cjo6dGFnTWF0Y2hlcyhzdGF0ZS5lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpLT50YWdRTmFt
ZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQo
KSwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RB
dHRyaWJ1dGVTZWxlY3RvcihzdGF0ZS5lbGVtZW50LCBydWxlRGF0YS5zZWxlY3RvcigpKSkKKyAg
ICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNl
bGVjdG9yKHN0YXRlLmVsZW1lbnQoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RD
aGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50KTsKKyAgICAgICAgcmV0dXJu
IG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5l
bGVtZW50KCkpOwogICAgIH0KIAogICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwg
c3RhdGUuZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKLSAg
ICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlLmdldCgpOworICAgIFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxlY3Rv
cigpLCBzdGF0ZS5lbGVtZW50KCksIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxl
ZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwogICAgIGNvbnRl
eHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gc3RhdGUucHNldWRv
U3R5bGU7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1fc2VsZWN0b3JDaGVj
a2VyLm1hdGNoKGNvbnRleHQsIHN0YXRlLmR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneSgpKTsKKyAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gc3RhdGUucHNldWRvU3R5
bGUoKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxlY3RvckNoZWNr
ZXIubWF0Y2goY29udGV4dCwgZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2hl
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBO
T1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBzdGF0ZS5keW5hbWljUHNldWRvKQorICAg
IGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxl
KCkgIT0gZHluYW1pY1BzZXVkbykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMjE0OCw4ICsyMTM0LDYgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1Jl
Z2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWUKICAg
ICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBtX3N0YXRlLnBzZXVkb1N0eWxlID0gTk9QU0VVRE87Ci0KICAgICBmb3Ig
KGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rv
ckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5tYXRjaGVzKHMs
IHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTczLDcgKzIx
NTcsNyBAQCBMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZQogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6
OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1
bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxp
c3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBBU1NFUlQoKHByb3BlcnR5V2hp
dGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25G
b3JTdHlsaW5nKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0
eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOwogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKIAogICAgIHVu
c2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7CkBAIC0y
MjE3LDcgKzIyMDEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAgICAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAg
ICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAgIGVsc2UgaWYgKHBy
b3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBtX3N0YXRl
LmxpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAgICAgICAgICAgaWYg
KHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjIzNCwxOCArMjIxOCwxOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCkgIT0gTm90
SW5zaWRlTGluaykgeworICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgIT0gTm90
SW5zaWRlTGluaykgewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJ
bmRleDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hl
ZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tpXTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hU
eXBlOwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhl
c2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4gbWFueSBwbGFjZXMu
Ci0gICAgICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBsaW5rTWF0
Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAgICAgICBzdGF0ZS5h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlu
ayk7CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CiAKICAgICAg
ICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVz
LmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0
ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0
aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSh0cnVlKTsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZShmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChp
bnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewpAQCAtMjM2MSwxNSArMjM0
NSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBXZSBjYW4gYnVpbGQg
dXAgdGhlIHN0eWxlIGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4g
ZWFybGllciBzdHlsZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhhY3QKICAgICAgICAg
Ly8gc3R5bGUgZGVjbGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5o
ZXJpdGVkIHByb3BlcnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24g
dGhlIAogICAgICAgICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMg
bWVtb3J5IGJ5IHJldXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgICAgc3Rh
dGUuc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0
KCkpOwotICAgICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQo
Y2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFy
eShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0YXRl
LnN0eWxlLT5pbnNpZGVMaW5rKCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNvcHlOb25Jbmhl
cml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICBpZiAoc3Rh
dGUucGFyZW50U3R5bGUoKS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJl
bmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7CisgICAg
ICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGlu
aygpOwogICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxlIGhhcyBp
ZGVudGljYWwgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50IHN0eWxl
IHRoZW4gdGhlCiAgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBpZGVudGlj
YWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20gdGhlIGNh
Y2hlIGFuZCBhcmUgZG9uZS4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbShj
YWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwogCiAgICAgICAgICAg
ICAvLyBVbmZvcnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5o
ZXJpdGVkIHByb3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSB0cnVlOyAK
QEAgLTIzODcsMTQgKzIzNzEsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBo
aWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhh
dCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhp
Z2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAo
Mykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQu
Ci0gICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0
VmFsdWUoMCk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUlu
aGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJv
cGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVs
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAK
LSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIHN0YXRlLmZv
bnREaXJ0eSA9IHRydWU7CisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0
eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSB7
CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKICAgICAgICAgYXBwbHlJbmhlcml0
ZWRPbmx5ID0gZmFsc2U7CiAgICAgfQogCkBAIC0yNDAyLDE4ICsyMzg2LDE4IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0
Y2hSZXN1bHQsIGNvbnN0CiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQg
aXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAg
IGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0ZS5s
aW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGll
cyBkZXBlbmQgb24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJv
cGVydGllcy4KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKSkKKyAgICBp
ZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
ICE9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKQogICAgICAgICBhcHBseUluaGVy
aXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVB
IHByb3BlcnRpZXMuCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAg
ICAKICAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2Fu
IGV4YW1pbmUgdGhlbSBsYXRlci4KLSAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAg
ICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKICAgICAKICAgICAvLyBOb3cgZG8g
dGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRo
ZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBhcHBseUluaGVyaXRlZE9ubHkpOwpAQCAtMjQyNCwxMyArMjQwOCwxMyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBjb25zdAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQg
YnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogICAgIAotICAgIEFT
U0VSVCghc3RhdGUuZm9udERpcnR5KTsKKyAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsK
ICAgICAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLmVsZW1l
bnQsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSkpCisgICAgaWYgKCFpc0Nh
Y2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50KCksIHN0YXRlLnN0
eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9N
YXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHls
ZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CisgICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0Nh
Y2hlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGNhY2hlSGFzaCwgbWF0Y2hS
ZXN1bHQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VSdWxlcyhjb25zdCBT
dHlsZVJ1bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBAIC0yNDk1LDcgKzI0
NzksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8
U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxlUmVzb2x2ZXI6OmlzTGVm
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmlyc3RQYWdlTGVmdCA9
IGZhbHNlOwotICAgIGlmICghbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCisgICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAg
ICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBA
IC0yNTE2LDggKzI1MDAsOCBAQCBTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8q
IHBhZ2VJbmRleCAqLykgY29uc3QKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRv
U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZSgwLCBz
dHlsZSk7Ci0gICAgbV9zdGF0ZS5zdHlsZSA9IHN0eWxlOworICAgIG1fc3RhdGUuaW5pdEZvclN0
eWxlUmVzb2x2ZShkb2N1bWVudCgpLCAwLCBzdHlsZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShz
dHlsZSk7CiAgICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7CiB9CiAK
QEAgLTI2MjksNyArMjYxMyw3IEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRD
dWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJl
IE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRl
ci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9v
bVJ1bGVzKCkKIHsKLSAgICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50ICYmIG1fc3RhdGUuZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpICYmIG1fc3Rh
dGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKTsKIH0KIAogc3RhdGljIGJvb2wgY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3b3JraW5nTGVuZ3RoKQpAQCAtMjY0
NCw3ICsyNjI4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWwKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmll
d3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZS5n
ZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSk7CisgICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8
Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJj
ZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
aWYgKHdvcmtpbmdMZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0yNzUwLDcgKzI3MzQsNyBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShD
U1NWYWx1ZSogdmFsdWUpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJv
cGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQogewotICAgIHN0ZDo6cGFpcjxD
U1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNv
bHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUtPnZhcmlhYmxlcygpKSk7CisgICAgc3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6
ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJsZXMoKSkpOwogCiAg
ICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikpCiAgICAgICAgIHJl
dHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCkBAIC0yNzgzLDE5ICsyNzY3LDE5IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAjZW5kaWYKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgYm9vbCBpc0lu
aGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0g
ICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBh
cmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVy
aXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAg
ICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFy
ZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAgQVNTRVJUKCFp
c0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlz
SW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBh
cmVudE5vZGUgJiYgc3RhdGUucGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0IC0+IChzdGF0ZS5w
YXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKQorICAgIEFTU0VSVCghaXNJbmhlcml0IHx8
IChzdGF0ZS5wYXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUoKSkpOyAvLyBpc0luaGVy
aXQgLT4gKHN0YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSgpKQogCi0gICAg
aWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgJiYgKCFzdGF0ZS5hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShp
ZCkpKSB7CisgICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAo
IXN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0
ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0
aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBh
cmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9w
ZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxl
LT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgIGlmIChpc0luaGVy
aXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0
aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKKyAgICAgICAg
c3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMo
KTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0
eVZhcmlhYmxlKSB7CkBAIC0yODAzLDcgKzI3ODcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBD
U1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlVmFsdWUq
Pih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5pc0VtcHR5KCkpOwog
ICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUo
KSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCks
IHZhcmlhYmxlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAt
MjgyMiw3ICsyODA2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0g
c3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gc3Rh
dGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEg
bGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGlu
ZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMgKGUuZy4g
Ym9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKQEAgLTI4
MzYsNyArMjgyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVt
aW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCiAK
ICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJD
b250ZW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0y
ODQ4LDE5ICsyODMyLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5l
cmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVl
Kj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwgZGlkU2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihp
dGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNl
dCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19J
TUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFs
dWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChzZXRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRl
bnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0p
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVu
dChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2Fz
dDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0yODcxLDE3ICsyODU1LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oaXRlbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5p
c1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRy
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBz
cGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRl
LnN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRl
LnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlLT5zZXRVbmlxdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgp
OwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRl
bnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQtPmdldEF0
dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRl
bnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0ZS5lbGVt
ZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwo
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVl
IGFmZmVjdHMgdGhlIHN0eWxlCiAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMuYXR0cnNJ
blJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC0yODkyLDI0ICsyODc2LDI0
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAh
PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0g
c3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNj
KTsKICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0g
YWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBs
aXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvdW50ZXIu
cmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29u
dGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29u
dGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChDTE9T
RV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VR
dW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KE5P
X0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI5MTksMTYgKzI5MDMsMTYgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7
CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5UXVvdGVzOgogICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVz
KHN0YXRlLnBhcmVudFN0eWxlLT5xdW90ZXMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0yOTQ2LDE5ICsyOTMwLDE5IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAg
IHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhxdW90ZXMp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKHF1b3Rlcyk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25l
KQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3Jl
YXRlKCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNE
YXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgaWRz
CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBw
YXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIHBh
cmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRl
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlw
dGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1Nw
ZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAg
LTI5NjgsNyArMjk1Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgaWYgKGlzSW5pdGlhbCkg
ewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhl
IGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAgICAgLy8gdG8g
bm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNp
emUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQpAQCAtMjk4Miw3
ICsyOTY2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwogCkBA
IC0zMDYwLDI0ICszMDQ0LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAvLyBzaG9ydGhhbmQgcHJvcGVydGll
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBpZiAoaXNJbml0aWFs
KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0g
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKCkpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJp
dEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkp
OwotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5wYXJl
bnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlKCktPmJhY2tncm91bmRM
YXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29sb3Io
c3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAgICAgICAgaWYg
KGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhck1hc2tMYXllcnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFza0xheWVycygpOwogICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdE1hc2tM
YXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlKCktPm1hc2tM
YXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKICAg
ICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0eWxlLT5zcGVj
aWZpZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0g
MDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhlaWdo
dCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKICAgICAgICAg
ICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpOwpAQCAtMzA4Niw4ICszMDcwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdz
KTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OwotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogCiAgICAgICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzEwMyw3ICszMDg3LDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFi
bGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAg
ICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVk
U2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlLmdldCgpLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNp
emUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3Vt
ZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBm
b250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwogICAg
ICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7CkBAIC0z
MTIxLDcgKzMxMDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBkYXRlRm9udCgpOwog
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXpl
LmdldCgpKTsKIAotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gZm9udC0+bGlu
ZUhlaWdodC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250
LT5saW5lSGVpZ2h0LmdldCgpKTsKIAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAgIH0KQEAgLTMxMzMs
MTEgKzMxMTcsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94
U2hhZG93OiB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAgICAgIGlmIChpZCA9
PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0
eWxlLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT50ZXh0U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3coKSkpIDog
bnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNldEJveFNoYWRvdyhz
dGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgq
c3RhdGUucGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHls
ZSgpLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50
U3R5bGUoKS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93
KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hh
ZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwgfHwg
cHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAgICByZXR1cm4gaWQg
PT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3cobnVs
bHB0cikgOiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAg
cmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCktPnNldFRl
eHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTMxNDcsMjkgKzMxMzEsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICgh
Y3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4o
Y3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9y
KTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAg
ICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8
aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rv
cikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNw
cmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngt
PmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFj
dG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQg
PyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAgICAgIFNoYWRvd1N0
eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29s
b3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChzdGF0ZS5zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0
eWxlLT5jb2xvcigpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5bGUoKSkKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAKICAgICAgICAgICAg
IE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEo
SW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlkID09IENTU1Byb3Bl
cnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFu
c3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykK
LSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJl
bGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRo
ZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFk
b3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBp
ZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBp
LmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVu
dHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHNoYWRvd0Rh
dGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBu
b3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hSZWZsZWN0KFJl
bmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMxODAsMTMgKzMxNjQsMTMgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0
eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlv
bigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1
ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIHJlZmxl
Y3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8
Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENv
bnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZh
Y3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1h
c2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCBy
ZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2so
bWFzayk7CiAKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5y
ZWxlYXNlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rp
b24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3Bl
cnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KQEAgLTMxOTUsMjkgKzMx
NzksMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1
bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sdW1uUnVsZUNv
bG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlU3R5
bGUoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZVdpZHRoKHN0YXRl
LnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNv
bG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkg
OiBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlU3R5
bGUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlV2lkdGgoc3Rh
dGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5yZXNldENvbHVtblJ1bGUoKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0Q29sdW1uUnVsZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAgICAgICAgIGlmICgh
aXNJbmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsK
LSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3RhdGUucGFyZW50U3R5
bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVl
U3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAgICAgICAgc3RhdGUu
c3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVMb29w
Q291bnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUu
cGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlRGlyZWN0aW9u
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KHN0YXRlLnBh
cmVudFN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVlU3BlZWQoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5
bGUoKS0+bWFycXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFy
cXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVCZWhhdmlvcigpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlv
bjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJxdWVlTG9vcENvdW50
LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlTG9v
cENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZv
cmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUt
PmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxv
b3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDogewpAQCAtMzIy
NywxOSArMzIxMSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50IGlkZW50ID0gcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBtc2VjLgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsgLy8gODVtc2VjLiBU
aGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJx
dWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0gICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFz
dC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAv
LyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKICAgICAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQg
c3VwcG9ydC4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0
aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDog
ewpAQCAtMzI0OSwxOSArMzIzMywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4
ZWQpKTsgLy8gMXB4LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJ
bmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4g
VGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFy
cXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUgV2luSUUgZGVmYXVs
dC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJn
ZToKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5n
dGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVW
YWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAg
ICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5ndGgocHJpbWl0aXZl
VmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAgICAgICAg
ICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjcwLDExICszMjU0LDEx
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUF1dG8pCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxlKG51bGxBdG9tKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3RhdGUu
c3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUo
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9u
dFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkpOwogICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMy
OTMsNyArMzI3Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewotICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5v
bmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFz
aGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzMwMywxMCArMzI4NywxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3QgPSByZWdpb247CiAgICAg
ICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9J
bnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3Ro
KHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdp
b24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7
Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxl
ZnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgICAg
ICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3Ro
IHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20g
PSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVy
dFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCkpOwogCiAgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zMzE4LDEzICszMzAyLDEzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwogCiAgICAgICAgICAgICBp
ZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRE
YXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xh
YmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDog
dHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9u
KFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAg
ICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3Rh
bmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9
PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lv
bi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBm
YWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNB
bm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNB
bm5vdGF0ZWRSZWdpb25zKHRydWUpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzMz
LDggKzMzMTcsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBS
ZWdpb246IHsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOwot
ICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25z
KHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lv
bkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOworICAgICAgICBzdGF0ZS5kb2N1bWVudCgp
LT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCkBAIC0zMzUwLDIxICszMzM0LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1Owot
ICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHls
ZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAg
ICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAg
SEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNyZWF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0
eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRyYW5zZm9ybShvcGVy
YXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZTogewpAQCAtMzM3
NCwzNCArMzM1OCwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBwZXJzcGVj
dGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGb3Ig
YmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMgYXMgcHguCi0g
ICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShw
cmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBlcnNwZWN0aXZlVmFs
dWUgPj0gMC4wZikKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZShwZXJz
cGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZl
KHBlcnNwZWN0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb246CiAgICAgICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5jbGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQot
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKHN0YXRlLnBhcmVudFN0
eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEFu
aW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgogICAgICAgICBpZiAo
aXNJbml0aWFsKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyVHJhbnNpdGlvbnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyVHJhbnNpdGlvbnMoKTsKICAgICAgICAg
ZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRUcmFu
c2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7CisgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+dHJh
bnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogewpAQCAtMzQxMCw3
ICszMzk0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIENv
bG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKQEAgLTM0MTksNyArMzQwMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRv
dWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCkBAIC0zNDYyLDcgKzM0NDYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5l
d0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0
ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53cml0aW5nTW9kZSgpKTsKKyAgICAg
ICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdh
cmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlKCkt
PndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQpOwogICAgICAgICBy
ZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwogICAgIH0KQEAgLTM0OTcsOCArMzQ4
MSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZl
VmFsdWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3Vt
ZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAoc3RhdGUuZWxlbWVu
dCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKQotICAgICAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0V3Jp
dGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKKyAgICAgICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpCisgICAgICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNl
dE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
NTE0LDcgKzM0OTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRM
aW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5l
Qm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAm
JiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRh
aW5Ob25lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zNTIyLDIxICsz
NTA2LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NT
TGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0YXRpY19jYXN0PENT
U0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRM
aW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFsdWUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDU1MgRm9udHMgTW9kdWxlIExl
dmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczogewog
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0
ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsK
KyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZh
bHVlKTsKICAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9u
dEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7CiAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5n
dGgoKTsKQEAgLTM1NTYsOCArMzU0MCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChm
aWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAg
ICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKLSAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RmlsdGVyKG9wZXJh
dGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNTY1LDE0ICszNTQ5
LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1Np
emVzOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMs
IHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdy
aWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQ29s
dW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+IHRy
YWNrU2l6ZXM7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tT
aXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRS
b3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTgwLDE0ICsz
NTY0LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW47CiAgICAg
ICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29sdW1uKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzogewog
ICAgICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlv
bih2YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUt
PnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJdGVt
Um93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhlc2UgcHJvcGVydGll
cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCkBAIC0z
OTA5LDE0ICszODkzLDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRy
PFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAg
aWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3Rh
dGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJl
dHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVS
ZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNQ
ZW5kaW5nKCkpIHsKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChw
cm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMo
KS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdl
OjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKHZhbHVlKTsKQEAgLTM5MjcsNyArMzkxMSw3IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVyCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVu
ZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5k
aW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChw
cm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMo
KS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQog
I2VuZGlmCkBAIC0zOTM2LDEzICszOTIwLDEzIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7
CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0lt
YWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2Uo
KSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwg
dmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJv
cGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogewotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bV9zdGF0ZS5zdHlsZSgpOwogCiAgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQogICAg
ICAgICByZXR1cm47CkBAIC00MDE0LDE1ICszOTk4LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgfQogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFs
bCArIDEpOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3
b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwotICAgIG1fc3RhdGUuc3R5
bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAg
IG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBtX3N0YXRlLnN0eWxlKCktPnNldExp
bmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIG1fc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdGF0
ZS5zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVz
ZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxl
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVs
ZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3Bl
Y2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBp
c0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMp
CkBAIC00MjMxLDE1ICs0MjE1LDE1IEBAIENvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWCiAgICAgY2Fz
ZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4
dDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnRleHRDb2xvcigp
OworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CiAgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudC0+aXNM
aW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlz
aXRlZExpbmtDb2xvcigpIDogc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7
CisgICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVk
TGluaykgPyBzdGF0ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBzdGF0ZS5kb2N1
bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoK
LSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmFjdGl2ZUxpbmtDb2xv
cigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7
CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAgICAgICByZXR1cm4g
UmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRj
b2xvcjoKLSAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5jb2xvcigpOworICAgICAgICByZXR1
cm4gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
Y29sb3JGb3JDU1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDU3NCwxNyArNDU1OCwxNyBAQCBz
dGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9wZXJhdGlvbkZvclR5
cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cygpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoIXN0
YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmlzRW1w
dHkoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8IHN0YXRlLnBlbmRp
bmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENhY2hl
ZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmVsZW1lbnQtPmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZS0+bXV0YWJsZUZp
bHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwor
ICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0g
c3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAg
ICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRp
b25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBl
KCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKICAgICAgICAgICAgIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKIAotICAgICAgICAgICAg
V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOworICAgICAgICAgICAgV2ViS2l0Q1NTU1ZH
RG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuZ2V0KHJl
ZmVyZW5jZUZpbHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGNhY2hlZERv
Y3VtZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwpAQCAtNDU5NSw3ICs0
NTc5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiAg
ICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
KGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVudCkp
KTsKICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFy
KCk7CisgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmNsZWFyKCk7CiB9CiAjZW5kaWYK
IApAQCAtNDYxMSwxOCArNDU5NSwxOCBAQCBTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2Fj
aGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVgogewogICAg
IFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7CiAg
ICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX3N0
YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXNQZW5k
aW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnN0eWxlLT5o
YXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycykKKyAgICBpZiAoIW1fc3Rh
dGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAotICAgIFZlY3Rv
cjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5z
dHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3RhdGUuc3R5bGUoKS0+bXV0
YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAg
ICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0
aW9uOjpDVVNUT00pIHsKQEAgLTQ2MzksNyArNDYyMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg
ICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgbV9zdGF0ZS5zZXRIYXNQ
ZW5kaW5nU2hhZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJzQnlO
YW1lQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwgY29u
c3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIpCkBAIC00NjgxLDcgKzQ2NjUsNyBA
QCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbQogewogICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJUcmFu
c2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3RvbUZpbHRlclRyYW5zZm9y
bVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0ZS5zdHls
ZS5nZXQoKSwgbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKKyAgICBjcmVh
dGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5z
ZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIu
cmVsZWFzZSgpOwogfQpAQCAtNDkzMSwxMiArNDkxNSwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBz
dHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBXZWJLaXRDU1NT
VkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NT
U1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gbV9z
dGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51
cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmll
cigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
RXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
RXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZG9j
dW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRS
ZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3BlcmF0aW9uLmdldCgp
LCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdEb2N1bWVu
dFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdE
b2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKSkp
OwogICAgICAgICAgICAgfQpAQCAtNTA0MCw3ICs1MDI0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSog
c3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKTsKIAogICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKSkgewog
ICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFn
ZVZhbHVlKCk7CkBAIC01MDcwLDIzICs1MDU0LDIzIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGlu
CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogewotICAgIGlmICht
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAgIGlmIChtX3N0YXRl
LnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOwotICAgIGZvciAoUGVu
ZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0g
bV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOworICAgIGZvciAo
UGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKIAogICAg
ICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3Vu
ZExheWVyID0gbV9zdGF0ZS5zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3Jv
dW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7Cisg
ICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHls
ZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3Vu
ZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
YmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJ
bWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFj
a2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAg
ICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50
RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVu
dERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnRE
YXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0YXRlLnN0eWxl
KCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0
YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJ
bWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUwOTksNyArNTA4Myw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAg
ICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxlLT5jdXJzb3Jz
KCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdGF0ZS5z
dHlsZSgpLT5jdXJzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEN1cnNv
ckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7CkBA
IC01MTExLDE3ICs1MDk1LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFn
ZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+bGlz
dFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRp
bmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldExpc3RTdHlsZUlt
YWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0
YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUu
c3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUlt
YWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgp
LT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+Ym9yZGVySW1hZ2VT
b3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldEJvcmRlckltYWdlU291
cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0
YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3Rh
dGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmJvcmRl
ckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJj
ZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rp
b24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlKCktPmJv
eFJlZmxlY3QoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNr
SW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFn
ZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2Uo
KSkpOwpAQCAtNTEzMSwxMiArNTExNSwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5k
aW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmICht
X3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5tYXNr
Qm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0
YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJj
ZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291
cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJbWFn
ZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
bV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6
IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxl
LT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVyLT5u
ZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRl
LnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNr
TGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkg
JiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAg
ICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CkBA
IC01MTQ3LDcgKzUxMzEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Vz
KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGll
cy5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7
CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggODRjM2NkMWZjMDM3ZGFiMGRmZDc1YThmZmQ3ZDhi
OWE1YzQ5NzNmOC4uMDYxYTUxOGM4YmE4YTA2ZmY2NDAzYWE5ZTdiNDUxN2ZhOTFjNmZhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xNjQsMjAgKzE2NCwxMiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChE
b2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0KCk7IH0KLSAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlOyB9Ci0g
ICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5lbGVtZW50OyB9CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAgUmVuZGVyU3R5bGUq
IHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmVs
ZW1lbnQoKTsgfQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9j
dW1lbnQ7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsg
cmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJlbnRTdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0
eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9Ci0gICAgdm9pZCBz
ZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShm
KTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fc3RhdGUuZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0
U2l6ZUFkanVzdChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0V3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0
aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRU
ZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wgaGFzUGFyZW50Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZTsgfQorICAgIGJvb2wgaGFzUGFy
ZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZSgpOyB9CiAKICAgICB2
b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRz
KHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4m
KTsKQEAgLTIwMSw3ICsxOTMsNiBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgogCi0gICAgdm9p
ZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQq
KTsKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2NhdGVT
aGFyZWRTdHlsZSgpOwpAQCAtMzA5LDggKzMwMCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFk
anVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3Qg
UnVsZURhdGEqIHJ1bGUpIHsgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9Ci0K
ICAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4
KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KICAgICAgICAgaW50JiBmaXJzdFJ1
bGVJbmRleDsKQEAgLTM4Miw3ICszNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc29ydE1hdGNo
ZWRSdWxlcygpOwogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVz
dWx0Jik7CiAKLSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEm
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmKTsKICAgICBib29sIGNoZWNr
UmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50
KiByZWdpb25FbGVtZW50KTsKICAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHlsZUFwcGxpY2F0aW9u
UGFzcyB7CkBAIC00MzIsNzIgKzQyMSwxNjUgQEAgcHVibGljOgogICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdGF0ZSk7CiAgICAgcHVibGljOgogICAgICAgICBTdGF0ZSgpCi0gICAgICAg
IDogZWxlbWVudCgwKQotICAgICAgICAsIHN0eWxlZEVsZW1lbnQoMCkKLSAgICAgICAgLCBwYXJl
bnROb2RlKDApCi0gICAgICAgICwgcGFyZW50U3R5bGUoMCkKLSAgICAgICAgLCByb290RWxlbWVu
dFN0eWxlKDApCi0gICAgICAgICwgcmVnaW9uRm9yU3R5bGluZygwKQotICAgICAgICAsIHNhbWVP
cmlnaW5Pbmx5KGZhbHNlKQotICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQotICAgICAg
ICAsIGVsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAgICAgLCBkaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQoZmFsc2UpCi0gICAgICAgICwgZWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzKGZhbHNlKQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVl
KQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisgICAg
ICAgIDogbV9lbGVtZW50KDApCisgICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCisgICAgICAg
ICwgbV9wYXJlbnROb2RlKDApCisgICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQorICAgICAgICAs
IG1fcm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQor
ICAgICAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwgbV9wc2V1ZG9TdHls
ZShOT1BTRVVETykKKyAgICAgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykK
KyAgICAgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAgICAg
LCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZShmYWxzZSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAg
ICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIG1fbGluZUhl
aWdodFZhbHVlKDApCisgICAgICAgICwgbV9mb250RGlydHkoZmFsc2UpCisgICAgICAgICwgbV9o
YXNVQUFwcGVhcmFuY2UoZmFsc2UpCisgICAgICAgICwgbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3Jv
dW5kRmlsbExheWVyKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBpbml0RWxlbWVu
dChFbGVtZW50Kik7CisgICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCos
IEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNF
VURPLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKKyAgICAgICAgdm9pZCBj
bGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZWxlbWVudCA9IDA7CisgICAgICAgICAg
ICBtX3N0eWxlZEVsZW1lbnQgPSAwOworICAgICAgICAgICAgbV9wYXJlbnRTdHlsZSA9IDA7Cisg
ICAgICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAgICAgICAgbV9yZWdpb25Gb3JTdHls
aW5nID0gMDsKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSAwOworICAgICAgICAgICAgbV9tYXRj
aGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5j
bGVhcigpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgLCBoYXNQZW5kaW5nU2hh
ZGVycyhmYWxzZSkKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKICNl
bmRpZgotICAgICAgICAsIGxpbmVIZWlnaHRWYWx1ZSgwKQotICAgICAgICAsIGZvbnREaXJ0eShm
YWxzZSkKLSAgICAgICAgLCBoYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgICAgICwgYmFja2dy
b3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikgeyB9CisjaWYgRU5BQkxFKENTU19GSUxURVJT
KSAmJiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFy
KCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsgfQorICAgICAgICBFbGVtZW50KiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgICAgIFN0eWxlZEVsZW1l
bnQqIHN0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlZEVsZW1lbnQ7IH0KKyAg
ICAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkgeyBtX3N0
eWxlID0gc3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiB0YWtl
U3R5bGUoKSB7IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsgfQorCisgICAgICAgIFN0YXRpY0NT
U1J1bGVMaXN0KiBlbnN1cmVSdWxlTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bV9ydWxlTGlzdCkKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fcnVsZUxpc3QuZ2V0KCk7CisgICAg
ICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiB0YWtlUnVsZUxpc3QoKSB7
IHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsgfQorCisgICAgICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0KKyAgICAgICAgdm9p
ZCBzZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIHsgbV9wYXJlbnRTdHls
ZSA9IHBhcmVudFN0eWxlOyB9CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RF
bGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKworICAg
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX3Jl
Z2lvbkZvclN0eWxpbmc7IH0KKyAgICAgICAgdm9pZCBzZXRTYW1lT3JpZ2luT25seShib29sIGlz
U2FtZU9yaWdpbk9ubHkpIHsgbV9zYW1lT3JpZ2luT25seSA9IGlzU2FtZU9yaWdpbk9ubHk7IH0K
KyAgICAgICAgYm9vbCBpc1NhbWVPcmlnaW5Pbmx5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1lT3Jp
Z2luT25seTsgfQorICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcHNldWRvU3R5bGU7IH0KKyAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQorICAgICAgICBib29sIGRpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50OyB9CisgICAgICAgIHZvaWQgc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzKGJvb2wgaXNBZmZlY3RlZCkgeyBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IGlz
QWZmZWN0ZWQ7IH0KKyAgICAgICAgYm9vbCBlbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsgfQogICAgICAgICAK
LXB1YmxpYzoKKyAgICAgICAgdm9pZCBzZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoYm9v
bCBpc0FwcGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gaXNBcHBseTsgfQor
ICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoYm9vbCBpc0Fw
cGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGlzQXBwbHk7IH0KKyAg
ICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQorICAgICAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGU7IH0KKyAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAmIHBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKSB7IHJldHVybiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IH0K
KyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAgICAgIFBlbmRpbmdT
VkdEb2N1bWVudE1hcCYgcGVuZGluZ1NWR0RvY3VtZW50cygpIHsgcmV0dXJuIG1fcGVuZGluZ1NW
R0RvY3VtZW50czsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICB2
b2lkIHNldEhhc1BlbmRpbmdTaGFkZXJzKGJvb2wgaGFzUGVuZGluZ1NoYWRlcnMpIHsgbV9oYXNQ
ZW5kaW5nU2hhZGVycyA9IGhhc1BlbmRpbmdTaGFkZXJzOyB9CisgICAgICAgIGJvb2wgaGFzUGVu
ZGluZ1NoYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1BlbmRpbmdTaGFkZXJzOyB9CisjZW5k
aWYKKworICAgICAgICB2b2lkIHNldExpbmVIZWlnaHRWYWx1ZShDU1NWYWx1ZSogdmFsdWUpIHsg
bV9saW5lSGVpZ2h0VmFsdWUgPSB2YWx1ZTsgfQorICAgICAgICBDU1NWYWx1ZSogbGluZUhlaWdo
dFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSGVpZ2h0VmFsdWU7IH0KKyAgICAgICAgdm9p
ZCBzZXRGb250RGlydHkoYm9vbCBpc0RpcnR5KSB7IG1fZm9udERpcnR5ID0gaXNEaXJ0eTsgfQor
ICAgICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CisK
KyAgICAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKKyAg
ICAgICAgICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICAgICAgICAgIG1fYm9y
ZGVyRGF0YSA9IG1fc3R5bGUtPmJvcmRlcigpOworICAgICAgICAgICAgICAgIG1fYmFja2dyb3Vu
ZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAgICAgICAgICAgIG1f
YmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBoYXNVQUFwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1VBQXBwZWFyYW5jZTsgfQorICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2JvcmRlckRhdGE7IH0KKyAgICAgICAgRmlsbExheWVyIGJhY2tn
cm91bmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQorICAgICAgICBD
b2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsg
fQorCisgICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyBy
ZXR1cm4gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICAgICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBt
X3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQorICAgICAgICB2
b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRab29tKGYp
OyB9CisgICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5
IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICAgICAgdm9pZCBzZXRUZXh0
U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0VGV4dFNpemVB
ZGp1c3QoYik7IH0KKyAgICAgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSk7IH0KKyAgICAgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9u
IHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRUZXh0T3JpZW50
YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorCisgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0
YSosIDMyPiYgbWF0Y2hlZFJ1bGVzKCkgeyByZXR1cm4gbV9tYXRjaGVkUnVsZXM7IH0KKyAgICAg
ICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRS
dWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKICAgICAgICAgLy8g
RklYTUUoYnVnIDEwODU2Myk6IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJldmlldywgdGhlc2UgbWVt
YmVyCiAgICAgICAgIC8vIHZhcmlhYmxlcyBhcmUgcHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBh
ZGQgbWV0aG9kcyB0byBhY2Nlc3MKICAgICAgICAgLy8gdGhlc2UgdmFyaWFibGVzLgotICAgICAg
ICBFbGVtZW50KiBlbGVtZW50OwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwot
ICAgICAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50OwotICAgICAgICBDb250YWluZXJO
b2RlKiBwYXJlbnROb2RlOwotICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGU7Ci0gICAg
ICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlOworICAgICAgICBFbGVtZW50KiBtX2Vs
ZW1lbnQ7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKKyAgICAgICAgU3R5
bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OworICAgICAgICBDb250YWluZXJOb2RlKiBtX3Bh
cmVudE5vZGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlOworICAgICAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwogICAgICAgICAKLSAgICAgICAgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nOwotICAgICAgICBib29sIHNhbWVPcmlnaW5Pbmx5Owot
ICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZTsKLQotICAgICAgICBFSW5zaWRlTGluayBlbGVt
ZW50TGlua1N0YXRlOworICAgICAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsK
KyAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OworICAgICAgICBQc2V1ZG9JZCBtX3BzZXVk
b1N0eWxlOwogCi0gICAgICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50OworICAg
ICAgICBFSW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7CiAKLSAgICAgICAgYm9vbCBlbGVt
ZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7CisgICAgICAgIGJvb2wgbV9kaXN0cmlidXRlZFRvSW5z
ZXJ0aW9uUG9pbnQ7CiAKLSAgICAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbzsKKyAgICAgICAg
Ym9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsKIAogICAgICAgICAvLyBBIGJ1ZmZl
ciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LAog
ICAgICAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIG1lcmdlIHNvcnRpbmcu
Ci0gICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtYXRjaGVkUnVsZXM7Ci0gICAg
ICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gcnVsZUxpc3Q7CisgICAgICAgIFZlY3Rvcjxj
b25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKKyAgICAgICAgUmVmUHRyPFN0YXRp
Y0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwogCi0gICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlOwotICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGU7CisgICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CisgICAgICAg
IGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwogCi0gICAgICAgIFBlbmRp
bmdJbWFnZVByb3BlcnR5TWFwIHBlbmRpbmdJbWFnZVByb3BlcnRpZXM7CisgICAgICAgIFBlbmRp
bmdJbWFnZVByb3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsKICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi0gICAgICAgIGJvb2wgaGFzUGVuZGluZ1NoYWRlcnM7CisgICAgICAgIGJv
b2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykg
JiYgRU5BQkxFKFNWRykKLSAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIHBlbmRpbmdTVkdE
b2N1bWVudHM7CisgICAgICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCBtX3BlbmRpbmdTVkdEb2N1
bWVudHM7CiAjZW5kaWYKLSAgICAgICAgQ1NTVmFsdWUqIGxpbmVIZWlnaHRWYWx1ZTsKLSAgICAg
ICAgYm9vbCBmb250RGlydHk7CisgICAgICAgIENTU1ZhbHVlKiBtX2xpbmVIZWlnaHRWYWx1ZTsK
KyAgICAgICAgYm9vbCBtX2ZvbnREaXJ0eTsKIAotICAgICAgICBib29sIGhhc1VBQXBwZWFyYW5j
ZTsKLSAgICAgICAgQm9yZGVyRGF0YSBib3JkZXJEYXRhOwotICAgICAgICBGaWxsTGF5ZXIgYmFj
a2dyb3VuZERhdGE7Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICAgICAgYm9v
bCBtX2hhc1VBQXBwZWFyYW5jZTsKKyAgICAgICAgQm9yZGVyRGF0YSBtX2JvcmRlckRhdGE7Cisg
ICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgICAgICBDb2xvciBtX2JhY2tn
cm91bmRDb2xvcjsKICAgICB9OwogCiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFll
dEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KQEAgLTUxMCwx
NSArNTkyLDIzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFs
dWUqKTsKIAotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KLSAgICBib29sIGFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCk7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KTsgfQogCiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoQ1NTUHJpbWl0aXZl
VmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyID0gMSk7CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQ
cmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIgPSAxKTsKIAogICAgIENTU1RvU3R5bGVNYXAqIHN0eWxlTWFwKCkgeyBy
ZXR1cm4gJm1fc3R5bGVNYXA7IH0KICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0
b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9Ci0K
KyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1f
c3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBh
cmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9udERlc2NyaXB0
aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOyB9CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRab29t
KGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRF
ZmZlY3RpdmVab29tKGYpOyB9CisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsg
bV9zdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01vZGUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSk7IH0KKyAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4
dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlv
bik7IH0KKyAgICAKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKICAgICAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187254</attachid>
            <date>2013-02-08 00:22:06 -0800</date>
            <delta_ts>2013-02-11 21:56:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108563-20130208171841.patch</filename>
            <type>text/plain</type>
            <size>142195</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjE5M2Y0YzI0NTQxMWY5
N2I4ZDliMTAyYmVlOGUyNjE3ODFmNDFlOC4uMzRhNDE0NGI5MjRmNzAyZmU1NTg3NDZmMTI4ZDc5
ZTA5ZDQwZjg5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMi0wOCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmVjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcywgYmVjYXVzZSBtb3N0IG9mIHRo
ZSBtZW1iZXIgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuCisgICAgICAgIFdlIGRvbid0IG5lZWQg
dG8gdXBkYXRlIHRob3NlIHJlYWQtb25seSB2YXJpYWJsZXMgd2hpbGUgcmVzb2x2aW5nCisgICAg
ICAgIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRv
IGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAg
ICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3RhdGUncyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAg
ICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0
IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9u
ZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZpb3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAg
ICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxsIGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50
U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNldWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMg
b24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgZHluYW1pY1BzZXVkbywg
YmVjYXVzZSBkeW5hbWljUHNldWRvIGluCisgICAgICAgIFN0YXRlIGNsYXNzIGlzIGp1c3QgdXNl
ZCBmb3IgcmV0dXJuaW5nIG1hdGNoZWQgcHNldWRvIHN0eWxlIGZyb20KKyAgICAgICAgdGhpcyBy
dWxlTWF0Y2hlcyB0byBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIE5vIG5lZWQgdG8ga2Vl
cAorICAgICAgICBkeW5hbWljUHNldWRvIHdoaWxlIHJlc29sdmluZyBzdHlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
UmVtb3ZlZCBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE8sIGJlY2F1c2UgdGhpcyBtZXRob2QgdXNl
cyBqdXN0CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlZC4gU2VsZWN0b3JDaGVja2Vy
IGRvZXNuJ3Qgc2VlIFN0eWxlUmVzb2x2ZXIncworICAgICAgICBtX3BzZXVkb1N0eWxlIGRpcmVj
dGx5LiBOZWVkIHRvIHVzZSBTZWxlY3RvckNoZWNrZXJDb250ZXh0LiBTbyBubworICAgICAgICBu
ZWVkIHRvIHNldCBtX3BzZXVkb1N0eWxlIHRvIGJlIE5PUFNFVURPLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNr
QnJlYWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Omhhc1BhcmVudE5vZGUpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAgICAg
TW9kaWZpZWQgdG8gdXNlIGNsZWFyIGF0IHRoZSBlbmQgb2Ygc3R5bGVGb3JFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnRha2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0UGFyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6aXNTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0RWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aGFzUGVuZGluZ1NoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldExpbmVIZWln
aHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bGluZUhl
aWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRG
b250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpoYXNVQUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmJvcmRlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmJhY2tncm91bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpiYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLCAuLi4gYW5kIHNldFRleHRPcmllbnRhdGlvbiB3ZXJlIG1vdmVkIGZyb20KKyAg
ICAgICAgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjptYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIFRoZXNlIGZv
bnREZXNjcmlwdGlvbiwgLi4uLCBzZXRUZXh0T3JpZW50YXRpb24gYXJlIHdyYXBwZXJzIHRvCisg
ICAgICAgIGludm9rZSBTdGF0ZSdzIG1ldGhvZHMuIFN0eWxlQnVpbGRlciBzdGlsbCBkZXBlbmRz
IG9uIFN0eWxlUmVzb2x2ZXIKKyAgICAgICAgYW5kIGludm9rZXMgdGhlc2UgbWV0aG9kcy4gU28g
d2UgbmVlZCB0aGVzZSB3cmFwcGVycy4KKwogMjAxMy0wMi0wNyAgS2VudCBUYW11cmEgIDx0a2Vu
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBzaG91bGQg
bm90IHJldHVybiBhIG5vbi1mb2N1c2FibGUgZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NW
R0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IGFiNTZmNjYxMTc5N2ZkOTQ3Nzk2ZjQ4ZjMxMzll
NzgxM2E5N2U4M2QuLmQxZTljNjBkM2I5ZGVkN2UyMGZjNzY1ZTljNzdhNDMxNmUzYjZkMTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ5LDcgKzQ5
LDcgQEAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJp
dCkgXAogeyBcCi0gICAgc3Znc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKS0+cHJvcCgpKTsgXAorICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50
U3R5bGUoKS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0x
MTAsMTAgKzExMCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgY29uc3QgU3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0
ZS5zdHlsZS0+YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUg
PSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOwogCi0gICAgYm9vbCBpc0luaGVyaXQg
PSBzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9v
bCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5v
ZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBz
dGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29s
IGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9k
ZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dz
IGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAv
LyBjb3JyZXNwb25kaW5nIGZyb250LWVuZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMo
ZS5nLiBib3JkZXIsCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZpbGw6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVy
aXQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5
bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5z
dmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFy
ZW50U3R5bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9y
KCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjQwLDE0ICsyNDAsMTQgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWlu
dCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8
U1ZHUGFpbnQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWlu
dChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFp
bnQsIHN0YXRlLnN0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUo
KSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29s
b3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUt
PnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1Bh
cmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50
VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHls
ZS0+c3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAg
ICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUp
OwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFp
bnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxl
LT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFp
bnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAg
IHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5j
ZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TWFya2VyTWlkOgpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlT
VkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAg
ICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRNYXJrZXJNaWRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6
ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFy
a2VyRW5kOgpAQCAtMzkyLDcgKzM5Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBp
ZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBz
ID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRNYXJrZXJFbmRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRp
ZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tl
TGluZWNhcDoKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAg
cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdz
dHlsZS0+c2V0RmlsdGVyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZp
ZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00
NDMsNyArNDQzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tl
clJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmlu
ZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+
c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9t
SVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDoKQEAgLTQ1Nyw3ICs0NTcs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRT
dHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNl
KFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0
ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBl
clJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmlu
ZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEFuY2hvcjoKQEAgLTQ3OCwxNCArNDc4LDE0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+
aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3Rh
dGUuc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENv
bG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1
ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAg
ICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0
aW5nQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAg
ICAgICAgICAgc3Znc3R5bGUtPnNldExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NW
YWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkp
KTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHls
ZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0Nv
bG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5
bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihj
b2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBz
dGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBAIC01
NTAsNyArNTUwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OiB7CiAgICAgICAgICAgICBpZiAoaXNJ
bmhlcml0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0
UHRyKHN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dE
YXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBh
cmVudFN0eWxlKCktPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRl
LnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAg
IGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2
NSw5ICs1NjUsOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVl
LT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
U2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUp
OwotICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSwKLSAgICAgICAg
ICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1
ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSkgOiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24o
aXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSksCisgICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSkpOworICAgICAgICAgICAg
aW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSkgOiAwOwogICAgICAgICAgICAg
Q29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAg
ICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMTgyOTBmMzg1NjQ4OTUzNzZlNTg5
NmFjYTI0MGE4MDA3NzI2MjczYy4uOTEyNjAzMGE2ZTcwNDBlY2E1NWMyYzkxOTEwM2UyZjcyZjQ0
NThiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTk0LDE0ICsxOTQs
MTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJ
VChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlLT5z
ZXQjI1Byb3AobV9zdGF0ZS5wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5
bGUoKS0+c2V0IyNQcm9wKG1fc3RhdGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJl
dHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFBy
b3ApIFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAot
ICAgIG1fc3RhdGUuc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgp
KTsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFs
IyNQcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTQ3NSwxMSArNDc1LDExIEBAIGJv
b2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYg
bWF0Y2hSZXF1ZXN0LCBSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBBU1NFUlQobWF0Y2hS
ZXF1ZXN0LnJ1bGVTZXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmVsZW1lbnQpOworICAgIEFTU0VS
VChtX3N0YXRlLmVsZW1lbnQoKSk7CiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50OwotICAgIFN0eWxlZEVsZW1lbnQqIHN0
eWxlZEVsZW1lbnQgPSBzdGF0ZS5zdHlsZWRFbGVtZW50OworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0ZS5lbGVtZW50KCk7CisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0
YXRlLnN0eWxlZEVsZW1lbnQoKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0g
ZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQoc3R5bGVkRWxlbWVudCk7CkBAIC01MTksMTMgKzUxOSwxMyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVz
dCYgbWF0Y2hSZXF1ZXN0LCBSdWxlUgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBSdWxl
UmFuZ2UmIHJ1bGVSYW5nZSkKIHsKLSAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGluZykK
KyAgICBpZiAoIW1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKQogICAgICAgICByZXR1cm47CiAK
ICAgICB1bnNpZ25lZCBzaXplID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yID0gbWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2Vs
ZWN0b3I7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkg
eworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpLT5ub2RlKCkpKSkgewog
ICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+
bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpOwogICAgICAg
ICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1
bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOwpAQCAtNTM2LDI0ICs1MzYsMjMg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25z
dCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWUKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoc3RhdGUubWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAg
ICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1hdGNoZWRSdWxlcyA9IHN0YXRlLm1hdGNo
ZWRSdWxlcygpOworICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAKICAgICBpZiAobV9zZWxlY3RvckNoZWNr
ZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7Ci0gICAgICAg
IGlmICghc3RhdGUucnVsZUxpc3QpCi0gICAgICAgICAgICBzdGF0ZS5ydWxlTGlzdCA9IFN0YXRp
Y0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHN0YXRlLnJ1bGVM
aXN0LT5ydWxlcygpLmFwcGVuZChzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRl
Q1NTT01XcmFwcGVyKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hl
ZFJ1bGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3RhdGUuZW5zdXJlUnVsZUxpc3QoKS0+
cnVsZXMoKS5hcHBlbmQobWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBl
cigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUg
c2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7IGkr
KykgewotICAgICAgICBpZiAoc3RhdGUuc3R5bGUgJiYgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5j
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBz
dGF0ZS5tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBzdGF0ZS5tYXRjaGVk
UnVsZXNbaV0tPnJ1bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCks
IHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgaWYgKHN0YXRlLnN0eWxlKCkgJiYgbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1
ZSgpOworICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1hdGNoZWRSdWxlc1tp
XS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIG1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBtYXRjaGVk
UnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgbWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRl
bGlzdFR5cGUoKSk7CiAgICAgfQogfQogCkBAIC01NjQsMTIgKzU2MywxMiBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0
aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxk
IGl0IGlmIGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhh
c1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5j
eShtX3N0YXRlLmVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBt
X3N0YXRlLmVsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOworICAgIGlm
IChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+
ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9v
bCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBw
bHlBdXRob3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAg
ICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAg
ICAgICAgICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9z
Y29wZVJlc29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC02MDAsNyArNTk5LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQot
ICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCk7CisgICAgcmV0dXJu
IG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkpOwogI2Vsc2UKICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKQEAgLTYxMSwxNyArNjEwLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsK
IAotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVk
UnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxSdWxlU2V0Kj4g
bWF0Y2hlZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0
ZS5lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0
UnVsZXMobV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRS
dWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1
bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVk
ZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVk
ZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKICAgICB9CiAgICAg
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQpAQCAtNjMyLDEwICs2
MzEsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKIHsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUu
ZWxlbWVudCkKKyAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgpAQCAtNjUzLDcgKzY1Miw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcykKICAgICBpZiAoIW1fdXNlclN0eWxlKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRl
Lm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVs
ZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIE1hdGNoUmVxdWVz
dCBtYXRjaFJlcXVlc3QobV91c2VyU3R5bGUuZ2V0KCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKQEAg
LTY2Niw3ICs2NjUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQog
ewotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVk
UnVsZXMoKS5jbGVhcigpOwogICAgIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSA9IHJl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogICAgIFJ1bGVSYW5nZSBydWxlUmFu
Z2UgPSByZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7CkBAIC02ODMsNyArNjgyLDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIC8v
IEluIHNvbWUgY2FzZXMgd2UgbWF5IGVuZCB1cCBsb29raW5nIHVwIHN0eWxlIGZvciByYW5kb20g
ZWxlbWVudHMgaW4gdGhlIG1pZGRsZSBvZiBhIHJlY3Vyc2l2ZSB0cmVlIHJlc29sdmUuCiAgICAg
Ly8gQW5jZXN0b3IgaWRlbnRpZmllciBmaWx0ZXIgd29uJ3QgYmUgdXAtdG8tZGF0ZSBpbiB0aGF0
IGNhc2UgYW5kIHdlIGNhbid0IHVzZSB0aGUgZmFzdCBwYXRoLgotICAgIGJvb2wgY2FuVXNlRmFz
dFJlamVjdCA9IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUu
cGFyZW50Tm9kZSk7CisgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRl
ci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKCkpOwogCiAgICAgdW5z
aWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewpAQCAtNjkzLDcgKzY5Miw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBj
CiAKICAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwotICAgICAgICBp
ZiAocnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSkpIHsKKyAgICAgICAg
UHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBpZiAocnVsZU1hdGNo
ZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSwgZHluYW1pY1BzZXVkbykpIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGln
bm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHlsZVBy
b3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAgICAgICAgICAg
aWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1hdGNoUmVxdWVz
dC5pbmNsdWRlRW1wdHlSdWxlcykpIHsKQEAgLTcwMSwxOSArNzAxLDE5IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIHJ1bGVzLCBjCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBnZXRNYXRjaGVk
Q1NTUnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBuZWVkZWQuCi0g
ICAgICAgICAgICBpZiAoc3RhdGUuc2FtZU9yaWdpbk9ubHkgJiYgIXJ1bGVEYXRhLmhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmlzU2FtZU9yaWdp
bk9ubHkoKSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CiAgICAg
ICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2ll
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBi
aXQgaWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxl
bWVudC4KLSAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYm
IHN0YXRlLnBzZXVkb1N0eWxlID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICBpZiAoZHluYW1p
Y1BzZXVkbyAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7
CiAgICAgICAgICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1vZGUoKSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShzdGF0ZS5keW5h
bWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyA8IEZJUlNUX0lO
VEVSTkFMX1BTRVVET0lEKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRI
YXNQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUg
bWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1bGVSYW5nZS5sYXN0UnVs
ZUluZGV4OwpAQCAtNzIxLDcgKzcyMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAg
ICAgICAgICAgICAgICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1bGVSYW5nZS5sYXN0
UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlz
dCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRSdWxlKCZydWxl
RGF0YSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEp
OwogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxl
KGNvb2tpZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CkBAIC03MzksNyArNzM5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25z
dCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBTdHlsZVJlc29sdmVy
Ojpzb3J0TWF0Y2hlZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVkUnVs
ZXMuYmVnaW4oKSwgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7Cisg
ICAgc3RkOjpzb3J0KG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuYmVnaW4oKSwgbV9zdGF0ZS5tYXRj
aGVkUnVsZXMoKS5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9w
ZXJ0aWVzKQpAQCAtNzUxLDE3ICs3NTEsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFs
bFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWUKICAg
ICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sg
YXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1
dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCkgewot
ICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRF
bGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBpZiAobV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1
bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRp
b25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJlIGFuIGFkZGl0aW9u
YWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAgLy8gYWZ0ZXIgYWxs
IGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1
ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJl
c3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAgICAgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLnN0eWxlZEVs
ZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAg
ICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0
YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRl
KGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAgICAgICAgIGFkZE1h
dGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdo
dERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICB9CkBA
IC03NzIsMTggKzc3MiwxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgICAgICBtYXRj
aEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxp
bmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAm
JiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUu
c3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgp
KSB7CiAgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVy
ZSBpcyBubyBDU1NPTSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJvbCBz
aGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAgICAg
Ym9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5s
aW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNJblNo
YWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3Rh
dGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBD
b25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3Rh
dGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7
CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxl
ZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CiAgICAg
fQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3Zl
cnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHls
ZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRlLnN0eWxlZEVsZW1l
bnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUg
Ki8pOworICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVz
KHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgp
KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICov
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CiAjZW5k
aWYKQEAgLTc5OCwxMiArNzk4LDE3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0Fm
ZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEVs
ZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBtX2VsZW1lbnQgPSBlOworICAgIG1fc3R5bGVkRWxl
bWVudCA9IGUgJiYgZS0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4oZSkgOiAwOworICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBlLT5kb2N1bWVudCgp
LT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6IE5vdEluc2lkZUxp
bms7Cit9CisKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQq
IGUpCiB7Ci0gICAgaWYgKG1fc3RhdGUuZWxlbWVudCAhPSBlKSB7Ci0gICAgICAgIG1fc3RhdGUu
ZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGVkRWxlbWVudCA9IG1fc3RhdGUuZWxl
bWVudCAmJiBtX3N0YXRlLmVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KG1fc3RhdGUuZWxlbWVudCkgOiAwOwotICAgICAgICBtX3N0YXRlLmVs
ZW1lbnRMaW5rU3RhdGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWlu
ZUxpbmtTdGF0ZShlKTsKKyAgICBpZiAobV9zdGF0ZS5lbGVtZW50KCkgIT0gZSkgeworICAgICAg
ICBtX3N0YXRlLmluaXRFbGVtZW50KGUpOwogICAgICAgICBpZiAoZSAmJiBlID09IGUtPmRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBlLT5kb2N1bWVudCgpLT5z
ZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CiAgICAgICAgICAgICBlLT5k
b2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKQEAg
LTgxMSwzNSArODE2LDMyIEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50
KEVsZW1lbnQqIGUpCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0
Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNl
dWRvSWQgcHNldWRvSUQpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEZv
clN0eWxlUmVzb2x2ZShEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSWQsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9y
U3R5bGluZykKIHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHN0YXRlLnBzZXVk
b1N0eWxlID0gcHNldWRvSUQ7CisgICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVkb0lkOworICAgIG1f
cmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CiAKICAgICBpZiAoZSkgewogICAg
ICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAgICBzdGF0ZS5wYXJl
bnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKTsKLSAgICAg
ICAgc3RhdGUucGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8g
MCA6CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmlu
Z0FuZFN0eWxlKCk7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJ
bmhlcml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxl
IDoKLSAgICAgICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPyBzdGF0ZS5wYXJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpIDogMDsKLSAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAgICAgICAgbV9wYXJlbnROb2RlID8g
bV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKKyAgICAgICAgbV9kaXN0cmlidXRlZFRv
SW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA9IDA7Ci0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxl
ID0gcGFyZW50U3R5bGU7Ci0gICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dCA9IGZhbHNlOworICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAgICBtX3BhcmVudFN0
eWxlID0gcGFyZW50U3R5bGU7CisgICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
ID0gZmFsc2U7CiAgICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0gICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0g
ZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICBzdGF0ZS5yb290RWxlbWVudFN0eWxlID0g
ZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgp
IDogZG9jU3R5bGU7Ci0KLSAgICBzdGF0ZS5zdHlsZSA9IDA7Ci0KLSAgICBzdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0KLSAgICBzdGF0ZS5ydWxlTGlzdCA9IDA7CisgICAg
UmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9jdW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgbV9y
b290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CiAKLSAgICBzdGF0ZS5mb250RGlydHkgPSBm
YWxzZTsKKyAgICBtX3N0eWxlID0gMDsKKyAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xl
YXIoKTsKKyAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQog
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CkBAIC05
MDIsMTYgKzkwNCwxNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
KyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKICAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmly
c3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxl
UmFuZ2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKICAgICBtX3NlbGVjdG9y
Q2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwotICAgIGlm
IChtX3N0YXRlLm1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUubWF0Y2hl
ZFJ1bGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5t
YXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkxOSw3ICs5MjEsNyBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBj
b25zdAogewogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElucHV0
RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0g
ICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50LT50
b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50
ID0gc3RhdGUuZWxlbWVudCgpLT50b0lucHV0RWxlbWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5w
dXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTQwLDI1ICs5NDIsMjUgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAodGhpc0lucHV0
RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3Jt
Q29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAg
aWYgKGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5p
c0VuYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
ZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9y
Rm9ybSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+
Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgeworICAgIGlmIChzdGF0ZS5kb2N1bWVudCgp
LT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CiAgICAgICAgIGJvb2wgd2lsbFZhbGlk
YXRlID0gZWxlbWVudC0+d2lsbFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0
ZSAhPSBzdGF0ZS5lbGVtZW50LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgaWYgKHdpbGxWYWxp
ZGF0ZSAhPSBzdGF0ZS5lbGVtZW50KCktPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFs
aWRGb3JtQ29udHJvbEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1Zh
bGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc1ZhbGlkRm9ybUNv
bnRyb2xFbGVtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlm
IChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJh
bmdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQt
PmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAg
ICBpZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc091dE9m
UmFuZ2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk3NCwyNSAr
OTc2LDI1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVt
ZW50KiBlbGVtZW50KQogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRl
bnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5k
aWRhdGUpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBp
ZiAoc3RhdGUuZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0
dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5hdHRyaWJ1dGVEYXRhKCkg
PT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFu
Z0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6Omxh
bmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5h
bWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0YXRlLmVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZh
c3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RH
ZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1
dGUobGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXN0YXRlLmVs
ZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcykgeworICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVj
dGVkQnlDbGFzc1J1bGVzKCkpIHsKICAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0Ns
YXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFz
c05hbWVzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoc2hh
cmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSkgewogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8v
IFNWRyBlbGVtZW50cyByZXF1aXJlIGEgKHNsb3chKSBnZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24g
YmVjYXVzZSAiY2xhc3MiIGlzIGFuIGFuaW1hdGFibGUgYXR0cmlidXRlIGZvciBTVkcuCi0gICAg
ICAgIGlmIChzdGF0ZS5lbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYg
KHN0YXRlLmVsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRh
dGUtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgp
LT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0
QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNs
YXNzQXR0cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2Ug
ewogI2VuZGlmCi0gICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9
IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgIGlmIChzdGF0ZS5l
bGVtZW50KCktPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAg
IH0KQEAgLTEwMDAsMTIgKzEwMDIsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEUKICAgICB9
IGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1l
bnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIGlmIChzdGF0ZS5lbGVtZW50LT5oYXNUYWdOYW1l
KHByb2dyZXNzVGFnKSkgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxl
bWVudCo+KHN0YXRlLmVsZW1lbnQpLT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRN
TFByb2dyZXNzRWxlbWVudCo+KHNoYXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCisg
ICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50KCkp
LT5pc0RldGVybWluYXRlKCkgIT0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHNo
YXJpbmdDYW5kaWRhdGUpLT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogI2VuZGlmCkBAIC0xMDIyLDcgKzEwMjQsNyBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRlLmVs
ZW1lbnQtPnRhZ1FOYW1lKCkpCisgICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUu
ZWxlbWVudCgpLT50YWdRTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVs
ZW1lbnQtPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMzIsMjEg
KzEwMzQsMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQo
U3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVt
ZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLT5hbmltYXRlZFNNSUxT
dHlsZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCi0gICAgaWYg
KGVsZW1lbnQtPmlzTGluaygpICE9IHN0YXRlLmVsZW1lbnQtPmlzTGluaygpKQorICAgIGlmIChl
bGVtZW50LT5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50
LT5ob3ZlcmVkKCkpCisgICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5lbGVtZW50
KCktPmhvdmVyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5h
Y3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50LT5hY3RpdmUoKSkKKyAgICBpZiAoZWxlbWVudC0+YWN0
aXZlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5hY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudC0+Zm9jdXNlZCgp
KQorICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5mb2N1c2Vk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRv
SWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChlbGVtZW50
LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+c2hhZG93UHNldWRvSWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFzaGFy
aW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPmFkZGl0aW9u
YWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChlbGVtZW50LT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVs
ZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQpAQCAt
MTA2Miw3ICsxMDY0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVs
ZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKIAogICAgIGJvb2wgaXNDb250cm9s
ID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAotICAgIGlmIChpc0NvbnRyb2wg
IT0gc3RhdGUuZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICBpZiAoaXNDb250
cm9sICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKGVsZW1lbnQpKQpAQCAtMTA4NiwyMCArMTA4OCwyMCBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRM
aW5rU3RhdGUgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5r
KCkgJiYgc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5rKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAvLyBE
ZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5vZGVzLgot
ICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1dl
YlZUVEVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3Rh
dGUuZWxlbWVudCgpLT5pc1dlYlZUVEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQtPmlz
V2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxlbWVudChlbGVtZW50KS0+aXNQYXN0Tm9kZSgp
ICE9IHRvV2ViVlRURWxlbWVudChzdGF0ZS5lbGVtZW50KS0+aXNQYXN0Tm9kZSgpKQorICAgIGlm
IChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzV2ViVlRU
RWxlbWVudCgpICYmIHRvV2ViVlRURWxlbWVudChlbGVtZW50KS0+aXNQYXN0Tm9kZSgpICE9IHRv
V2ViVlRURWxlbWVudChzdGF0ZS5lbGVtZW50KCkpLT5pc1Bhc3ROb2RlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGlm
IChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVu
RWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQgPT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+
d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQgPT0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwgc3Rh
dGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVu
RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTExMjEsMzcgKzExMjMsMzcgQEAgaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVz
b2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2kKIFJlbmRl
clN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiB7CiAgICAgU3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQgfHwgIXN0YXRl
LnBhcmVudFN0eWxlKQorICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5w
YXJlbnRTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIElmIHRoZSBlbGVtZW50
IGhhcyBpbmxpbmUgc3R5bGUgaXQgaXMgcHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChzdGF0ZS5z
dHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmlubGluZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVkcpCi0g
ICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9w
ZXJ0aWVzKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkg
JiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmFuaW1h
dGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogICAg
IC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBzaG93IHVwIGluIHRoZSBzdHlsZXNo
ZWV0cy4KLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVz
Lmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0lEKCkg
JiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1l
bnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQoKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQgPT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVu
dCgpLT5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGVsZW1lbnRIYXNE
aXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQpKQorICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9u
QXV0byhzdGF0ZS5lbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhY2hl
IHdoZXRoZXIgc3RhdGUuZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2Vs
ZWN0b3JzLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2YXJpYWJs
ZS4gVGhlIHN0eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2YgU3R5bGVS
ZXNvbHZlci4KLSAgICBzdGF0ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMgPSBzdGF0ZS5l
bGVtZW50ICYmIHN0YXRlLmVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVk
QnlSdWxlcyhzdGF0ZS5lbGVtZW50LT5jbGFzc05hbWVzKCkpOworICAgIHN0YXRlLnNldEVsZW1l
bnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgp
LT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc3RhdGUuZWxlbWVudCgp
LT5jbGFzc05hbWVzKCkpKTsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0
aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICB1bnNpZ25lZCB2aXNp
dGVkTm9kZUNvdW50ID0gMDsKICAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOwot
ICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50LT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICBOb2RlKiBjb3VzaW5MaXN0ID0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmV2
aW91c1NpYmxpbmcoKTsKICAgICB3aGlsZSAoY291c2luTGlzdCkgewogICAgICAgICBzaGFyZUVs
ZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhjb3VzaW5MaXN0LCBjb3VudCk7CiAg
ICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCkBAIC0xMTczLDcgKzExNzUsNyBAQCBSZW5kZXJTdHls
ZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgIGlmIChzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8v
IFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2Rl
LiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCi0gICAg
aWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpKSkKKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVt
ZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBz
aGFyZUVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiB9CkBAIC0xMzk1LDkgKzEzOTcsOCBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBp
bml0RWxlbWVudChlbGVtZW50KTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRl
ZmF1bHRQYXJlbnQpOwotICAgIHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHls
aW5nOwotICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0
YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgeworICAgIHN0YXRlLmluaXRGb3JTdHls
ZVJlc29sdmUoZG9jdW1lbnQoKSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCwgTk9QU0VVRE8sIHJl
Z2lvbkZvclN0eWxpbmcpOworICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNo
YXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAgICAg
IFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgICAg
IGlmIChzaGFyZWRTdHlsZSkKICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdHlsZTsKQEAgLTE0
MDUsMzIgKzE0MDYsMzIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKIAogICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gY2xvbmVGb3JQYXJlbnQ7CiAKLSAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUp
IHsKLSAgICAgICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAg
IHN0YXRlLnN0eWxlLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSwgaXNBdFNoYWRvd0Jv
dW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJT
dHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CisgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkp
IHsKKyAgICAgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNo
YWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBS
ZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
c3RhdGUuc3R5bGUgPSBkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCk7Ci0gICAgICAgIGNsb25lRm9y
UGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0YXRlLnN0eWxlLmdldCgpKTsKLSAgICAgICAg
c3RhdGUucGFyZW50U3R5bGUgPSBjbG9uZUZvclBhcmVudC5nZXQoKTsKKyAgICAgICAgc3RhdGUu
c2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKKyAgICAgICAgY2xvbmVGb3JQYXJl
bnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUoKSk7CisgICAgICAgIHN0YXRlLnNl
dFBhcmVudFN0eWxlKGNsb25lRm9yUGFyZW50LmdldCgpKTsKICAgICB9CiAgICAgLy8gY29udGVu
dGVkaXRhYmxlIGF0dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2VyLW1vZGlmeSkg
c2hvdWxkCiAgICAgLy8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRvIGRpc3RyaWJ1
dGVkIG5vZGUuCi0gICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCkgewor
ICAgIGlmIChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewogICAgICAgICBp
ZiAoRWxlbWVudCogcGFyZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlT2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJT
dHlsZSgpKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VyTW9kaWZ5KHN0eWxl
T2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpIHsKLSAgICAgICAgc3Rh
dGUuc3R5bGUtPnNldElzTGluayh0cnVlKTsKLSAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRl
ID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SXNM
aW5rKHRydWUpOworICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50
TGlua1N0YXRlKCk7CiAgICAgICAgIGlmIChsaW5rU3RhdGUgIT0gTm90SW5zaWRlTGluaykgewog
ICAgICAgICAgICAgYm9vbCBmb3JjZVZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmZvcmNlUHNldWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwog
ICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKICAgICAgICAgICAgICAgICBsaW5rU3RhdGUg
PSBJbnNpZGVWaXNpdGVkTGluazsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVM
aW5rKGxpbmtTdGF0ZSk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0NvbGxlY3Rpb24gPSBmYWxz
ZTsKQEAgLTE0NDcsMTcgKzE0NDgsMTQgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKIAogICAgIC8vIENs
ZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChh
bW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlLmdl
dCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSwgZWxlbWVudCk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUo
c3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CiAKLSAgICBpbml0
RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgotCi0gICAgaWYg
KGNsb25lRm9yUGFyZW50KQotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IDA7CisgICAgc3Rh
dGUuY2xlYXIoKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgogCiAgICAgZG9j
dW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0
aGUgc3R5bGUuCi0gICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
c3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
Y29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFs
dWUpCkBAIC0xNDY2LDE0ICsxNDY0LDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAg
aWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCiAgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVz
KHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKLSAgICBBU1NFUlQoIW1fc3RhdGUu
c3R5bGUpOworICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSgpKTsKIAogICAgIFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CiAKICAgICAvLyBDcmVhdGUgdGhlIHN0eWxlCi0gICAgc3RhdGUuc3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKLQotICAgIHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSA9IDA7CisgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1l
bnRTdHlsZSkpOworICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKIAogICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25s
eSBldmVyIG9uZQogICAgIC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28g
anVzdCBhZGQgdGhlIGZpcnN0IHByb3BlcnRpZXMuCkBAIC0xNDg1LDggKzE0ODIsOCBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0
IFJlbmRlclN0eWxlKiBlbGVtZQogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVp
Z2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQot
ICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChzdGF0
ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE5vdyBkbyByZXN0
IG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQpAQCAt
MTUxMyw3ICsxNTEwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKIAogICAgIGRvY3VtZW50
KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAotICAgIHJldHVybiBzdGF0ZS5zdHlsZS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgpOwogfQogCiB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKQEAgLTE1MzcsNyAr
MTUzNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24o
RWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewogICAgICAgICAvLyBBcHBseSB0aGUgZGVj
bGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRo
ZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKICAgICAgICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAg
ICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7CisgICAgICAgIG1fc3RhdGUuaW5pdEZvclN0eWxl
UmVzb2x2ZShkb2N1bWVudCgpLCBlKTsKIAogICAgICAgICBjb25zdCBTdHlsZUtleWZyYW1lKiBr
ZXlmcmFtZSA9IGtleWZyYW1lc1tpXS5nZXQoKTsKIApAQCAtMTU4MSw3ICsxNTc4LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBj
b25zdCBSZW5kZXJTdHlsZSogZWwKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewotICAgIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0
eWxlKTsKKyAgICBBU1NFUlQocGFyZW50U3R5bGUpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTE1ODksOSArMTU4Niw5IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAK
ICAgICBpbml0RWxlbWVudChlKTsKIAotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50
U3R5bGUsIHBzZXVkbyk7Ci0gICAgc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
Ci0gICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUpOworICAg
IHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUsIHBz
ZXVkbyk7CisgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBz
dGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogCiAgICAg
Ly8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJr
L3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwogICAgIC8v
IHRob3NlIHJ1bGVzLgpAQCAtMTYwOCwxMiArMTYwNSwxMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRv
LCBFbAogICAgIGlmIChtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgc3RhdGUuc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8p
OworICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG8pOwogCiAgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZSk7CiAKICAgICAvLyBDbGVhbiB1cCBvdXIg
c3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIg
Zml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZS5nZXQoKSwgbV9zdGF0
ZS5wYXJlbnRTdHlsZSwgMCk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwg
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpLCAwKTsKIAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3Vy
Y2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygp
OwpAQCAtMTYyMSwxNSArMTYxOCwxNSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbAogICAgIGRv
Y3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4g
dGhlIHN0eWxlLgotICAgIHJldHVybiBzdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IHN0YXRlLnRha2VTdHlsZSgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsKLSAgICBpbml0Rm9yU3R5bGVS
ZXNvbHZlKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0
eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KKyAgICBtX3N0YXRlLmluaXRG
b3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkp
OyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxl
LgogCi0gICAgbV9zdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBtX3N0
YXRlLnN0eWxlLT5pbmhlcml0RnJvbShtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUpOworICAgIG1f
c3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBtX3N0YXRlLnN0eWxl
KCktPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKIAogICAgIGNvbnN0
IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0UGFnZShwYWdlSW5kZXgpOwogICAgIGNvbnN0IGJvb2wgaXNG
aXJzdCA9IGlzRmlyc3RQYWdlKHBhZ2VJbmRleCk7CkBAIC0xNjQwLDcgKzE2MzcsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCkKICAgICBtYXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fdXNlclN0eWxlLmdldCgpLCBpc0xl
ZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIC8vIE9ubHkgY29uc2lkZXIgdGhlIGdsb2JhbCBhdXRo
b3IgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KICAgICBt
YXRjaFBhZ2VSdWxlcyhyZXN1bHQsIG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJz
dCwgcGFnZSk7Ci0gICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIG1fc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwog
I2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFy
aWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwpAQCAtMTY1MSw4ICsxNjQ4LDggQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdl
SW5kZXgpCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdo
ZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX3N0
YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKTsKKyAgICBpZiAobV9zdGF0ZS5saW5l
SGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWln
aHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIApAQCAtMTY2MiwyMCAr
MTY1OSwyMCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
clBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29s
dmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdGF0
ZS5zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAK
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoKQogewotICAgIG1fc3RhdGUuc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Cisg
ICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOwogICAgIC8vIE1ha2Ug
c3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBm
cm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3Vt
ZW50U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsK
LSAgICAgICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Cisg
ICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CisgICAg
ICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgwKTsKIAotICAgIHJldHVybiBtX3N0
YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKIH0K
IAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JUZXh0KFRl
eHQqIHRleHROb2RlKQpAQCAtMTk2Myw3ICsxOTYwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
ZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5n
IHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVu
ZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9z
dGF0ZS5oYXNVQUFwcGVhcmFuY2UsIG1fc3RhdGUuYm9yZGVyRGF0YSwgbV9zdGF0ZS5iYWNrZ3Jv
dW5kRGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VB
QXBwZWFyYW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0
YSgpLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgZmly
c3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYg
KHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpAQCAtMjA0NiwyNiArMjA0Mywx
NiBAQCBzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlKiBz
dHlsZSkKIAogdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKIHsKLSAgICBpZiAoIW1f
c3RhdGUuZm9udERpcnR5KQorICAgIGlmICghbV9zdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7Ci0gICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5
Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpvb21DaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG1fc3RhdGUuc3R5bGUoKTsKKyAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUs
IG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlLCBt
X3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5
bGUpOwotICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwot
ICAgIG1fc3RhdGUuZm9udERpcnR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKLXsKLSAgICBtX3N0YXRlLmhhc1VBQXBwZWFyYW5j
ZSA9IG1fc3RhdGUuc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAgICBpZiAobV9zdGF0ZS5oYXNV
QUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9zdGF0ZS5ib3JkZXJEYXRhID0gbV9zdGF0ZS5zdHls
ZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fc3RhdGUuYmFja2dyb3VuZERhdGEgPSAqbV9zdGF0ZS5z
dHlsZS0+YmFja2dyb3VuZExheWVycygpOwotICAgICAgICBtX3N0YXRlLmJhY2tncm91bmRDb2xv
ciA9IG1fc3RhdGUuc3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwotICAgIH0KKyAgICBzdHlsZS0+
Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAgbV9zdGF0ZS5zZXRGb250RGlydHko
ZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHls
ZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAg
LTIwODEsNyArMjA2OCw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6
OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzCiAgICAgbV9zZWxlY3Rv
ckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAg
ICBpbml0RWxlbWVudChlKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lk
KTsKKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwgcHNl
dWRvSWQpOwogCiAgICAgTWF0Y2hSZXN1bHQgZHVtbXk7CiAgICAgaWYgKHJ1bGVzVG9JbmNsdWRl
ICYgVUFBbmRVc2VyQ1NTUnVsZXMpIHsKQEAgLTIwOTQsNTEgKzIwODEsNTAgQEAgUGFzc1JlZlB0
cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQo
RWxlbWVudCogZSwgUHMKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc3Rh
dGUuc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxl
cyk7CisgICAgICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAm
IENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4g
YXV0aG9yIHNoZWV0cy4KICAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0lu
Y2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAotICAgICAgICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5
ID0gZmFsc2U7CisgICAgICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoZmFsc2UpOwogICAg
IH0KIAogICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNv
bHZpbmdTdHlsZSk7CiAKLSAgICByZXR1cm4gbV9zdGF0ZS5ydWxlTGlzdC5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIG1fc3RhdGUudGFrZVJ1bGVMaXN0KCk7CiB9CiAKLWlubGluZSBib29sIFN0eWxl
UmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUpCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hl
cyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbykKIHsKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwot
ICAgIHN0YXRlLmR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAogICAgIGlmIChydWxlRGF0YS5o
YXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewogICAgICAgICAvLyBXZSBrbm93IHRoaXMgc2Vs
ZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRzLgotICAgICAgICBpZiAo
c3RhdGUucHNldWRvU3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgIGlmIChzdGF0ZS5wc2V1ZG9T
dHlsZSgpICE9IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAv
LyBXZSBrbm93IGEgc3VmZmljaWVudGx5IHNpbXBsZSBzaW5nbGUgcGFydCBzZWxlY3RvciBtYXRj
aGVzIHNpbXBseSBiZWNhdXNlIHdlIGZvdW5kIGl0IGZyb20gdGhlIHJ1bGUgaGFzaC4KICAgICAg
ICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3ZSBkb24ndCBuZWVkIHRvIGNo
ZWNrIHRoZSBuYW1lc3BhY2UuCi0gICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxl
Y3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIHN0YXRlLmVsZW1lbnQtPmlzSFRN
TEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocnVsZURhdGEuaGFzUmlnaHRtb3N0U2VsZWN0b3JN
YXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzSFRNTEVs
ZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKCFydWxlRGF0YS5oYXNNdWx0aXBhcnRTZWxlY3Rv
cigpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChydWxlRGF0YS5zZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNl
bGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhzdGF0ZS5lbGVtZW50LCBydWxlRGF0YS5zZWxlY3Rv
cigpLT50YWdRTmFtZSgpKSkKKyAgICAgICAgaWYgKHJ1bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0
YXRlLmVsZW1lbnQoKSwgcnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hl
Y2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihzdGF0ZS5lbGVtZW50LCBydWxlRGF0YS5zZWxl
Y3RvcigpKSkKKyAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9z
dEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLmVsZW1lbnQoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JD
aGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50KTsKKyAg
ICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3Rv
cigpLCBzdGF0ZS5lbGVtZW50KCkpOwogICAgIH0KIAogICAgIC8vIFNsb3cgcGF0aC4KLSAgICBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEu
c2VsZWN0b3IoKSwgc3RhdGUuZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hF
bmFibGVkKTsKLSAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlLmdldCgpOwor
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxl
RGF0YS5zZWxlY3RvcigpLCBzdGF0ZS5lbGVtZW50KCksIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRl
ZE1hdGNoRW5hYmxlZCk7CisgICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBzdGF0ZS5zdHlsZSgp
OwogICAgIGNvbnRleHQuc2NvcGUgPSBzY29wZTsKLSAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0g
c3RhdGUucHNldWRvU3R5bGU7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IG1f
c2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIHN0YXRlLmR5bmFtaWNQc2V1ZG8sIERPTVNp
YmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBjb250ZXh0LnBzZXVkb1N0eWxlID0gc3Rh
dGUucHNldWRvU3R5bGUoKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9z
ZWxlY3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgZHluYW1pY1BzZXVkbywgRE9NU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5KCkpOwogICAgIGlmIChtYXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdGF0ZS5wc2V1
ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSAhPSBzdGF0ZS5keW5hbWlj
UHNldWRvKQorICAgIGlmIChzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IE5PUFNFVURPICYmIHN0YXRl
LnBzZXVkb1N0eWxlKCkgIT0gZHluYW1pY1BzZXVkbykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjE0OCw4ICsyMTM0LDYgQEAgYm9vbCBTdHlsZVJlc29s
dmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3Rv
ciwgRWxlbWUKICAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3N0YXRlLnBzZXVkb1N0eWxlID0gTk9QU0VVRE87
Ci0KICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMg
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tl
ci5tYXRjaGVzKHMsIHJlZ2lvbkVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yMTczLDcgKzIxNTcsNyBAQCBMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRM
ZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZQogdGVtcGxhdGUgPFN0
eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+CiB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBT
dHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJv
cGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKIHsKLSAgICBBU1NFUlQo
KHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9z
dGF0ZS5yZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlw
ZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5n
KCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlz
KTsKIAogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNv
dW50KCk7CkBAIC0yMjE3LDcgKzIyMDEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bAogICAg
ICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkp
OwogICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKICAgICAgICAgICAg
IGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAg
ICAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IGN1cnJlbnQudmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgogICAg
ICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQpAQCAtMjIzNCwx
OCArMjIxOCwxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMo
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLnN0eWxlLT5pbnNpZGVM
aW5rKCkgIT0gTm90SW5zaWRlTGluaykgeworICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVM
aW5rKCkgIT0gTm90SW5zaWRlTGluaykgewogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRJbmRl
eDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllc1tp
XTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRjaGVkUHJvcGVydGll
cy5saW5rTWF0Y2hUeXBlOwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Vy
IHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVzIGNoYW5nZXMgaW4g
bWFueSBwbGFjZXMuCi0gICAgICAgICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7Ci0gICAgICAg
ICAgICBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlua01hdGNoVHlw
ZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOworICAgICAgICAgICAgc3RhdGUuc2V0
QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoTGluayk7CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRl
ZCk7CiAKICAgICAgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGll
cy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0
YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1h
dGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwotICAgICAgICBzdGF0ZS5hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CisgICAgICAgIHN0YXRlLnNldEFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewpAQCAt
MjM2MSwxNSArMjM0NSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBX
ZSBjYW4gYnVpbGQgdXAgdGhlIHN0eWxlIGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0
aWVzIGZyb20gYW4gZWFybGllciBzdHlsZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhh
Y3QKICAgICAgICAgLy8gc3R5bGUgZGVjbGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBh
cHBseSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNh
biBkZXBlbmQgb24gdGhlIAogICAgICAgICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFz
dCBhbmQgc2F2ZXMgbWVtb3J5IGJ5IHJldXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4K
LSAgICAgICAgc3RhdGUuc3R5bGUtPmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUtPmluaGVyaXRl
ZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRT
aGFkb3dCb3VuZGFyeShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0
YXR1cyA9IHN0YXRlLnN0eWxlLT5pbnNpZGVMaW5rKCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PmNvcHlOb25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAg
ICAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0
ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1l
bnQpKSB7CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUo
KS0+aW5zaWRlTGluaygpOwogICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50
IHN0eWxlIGhhcyBpZGVudGljYWwgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQg
cGFyZW50IHN0eWxlIHRoZW4gdGhlCiAgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2ls
bCBiZSBpZGVudGljYWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVy
IGZyb20gdGhlIGNhY2hlIGFuZCBhcmUgZG9uZS4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5p
bmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOwog
CiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVk
IGxpa2UgYW4gaW5oZXJpdGVkIHByb3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9y
ZSBpdC4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMp
OworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhcHBseUluaGVyaXRlZE9u
bHkgPSB0cnVlOyAKQEAgLTIzODcsMTQgKzIzNzEsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHBy
b3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KICAgICAvLyBUaGUgb3Jk
ZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkg
aW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1h
bCBpbXBvcnRhbnQuCi0gICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5z
ZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJp
b3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
Lmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJS
dWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGln
aFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJp
dGVkT25seSk7CiAKLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAg
ICAgIHN0YXRlLmZvbnREaXJ0eSA9IHRydWU7CisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0
ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKICAgICAgICAg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgfQogCkBAIC0yNDAyLDE4ICsyMzg2LDE4
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8g
TGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9u
dC1zaXplLgotICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOworICAg
IGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKIAogICAgIC8vIE1h
bnkgcHJvcGVydGllcyBkZXBlbmQgb24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBh
cHBseSBhbGwgcHJvcGVydGllcy4KLSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVu
ZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRp
b24oKSkKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKQogICAgICAg
ICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFs
IHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKICAgICAKICAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNv
IHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KLSAgICBjYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoKTsKKyAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKICAgICAKICAg
ICAvLyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGll
cyBhbmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCiAgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwpAQCAtMjQyNCwxMyArMjQwOCwxMyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2Vz
IHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwog
ICAgIAotICAgIEFTU0VSVCghc3RhdGUuZm9udERpcnR5KTsKKyAgICBBU1NFUlQoIXN0YXRlLmZv
bnREaXJ0eSgpKTsKICAgICAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hl
KHN0YXRlLmVsZW1lbnQsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5wYXJlbnRTdHlsZSkpCisg
ICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50
KCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCkpKQogICAgICAgICByZXR1cm47
Ci0gICAgYWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0
ZS5wYXJlbnRTdHlsZSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7CisgICAgYWRkVG9NYXRjaGVk
UHJvcGVydGllc0NhY2hlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGNhY2hl
SGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVBhZ2VS
dWxlcyhjb25zdCBTdHlsZVJ1bGVQYWdlKiByMSwgY29uc3QgU3R5bGVSdWxlUGFnZSogcjIpCkBA
IC0yNDk1LDcgKzI0NzksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9y
TGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsCiBib29sIFN0eWxlUmVz
b2x2ZXI6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29sIGlzRmly
c3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmICghbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQg
PSB0cnVlOwogCiAgICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6
IDApKSAlIDI7CkBAIC0yNTE2LDggKzI1MDAsOCBAQCBTdHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFn
ZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykgY29uc3QKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBSZW5k
ZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgaW5pdEZvclN0eWxl
UmVzb2x2ZSgwLCBzdHlsZSk7Ci0gICAgbV9zdGF0ZS5zdHlsZSA9IHN0eWxlOworICAgIG1fc3Rh
dGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCAwLCBzdHlsZSk7CisgICAgbV9zdGF0
ZS5zZXRTdHlsZShzdHlsZSk7CiAgICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2
YWx1ZSk7CiB9CiAKQEAgLTI2MjksNyArMjYxMyw3IEBAIGlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiAvLyBwcm9wZXJ0
aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9j
dW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KIGJvb2wgU3R5bGVSZXNvbHZl
cjo6dXNlU1ZHWm9vbVJ1bGVzKCkKIHsKLSAgICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50ICYmIG1f
c3RhdGUuZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7CisgICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVu
dCgpICYmIG1fc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKTsKIH0KIAogc3RhdGljIGJv
b2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3b3JraW5nTGVu
Z3RoKQpAQCAtMjY0NCw3ICsyNjI4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWwKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZh
bHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihz
dGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgc3RhdGUuc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252
ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwg
Vmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSk7CiAgICAgaWYgKHdvcmtpbmdMZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0yNzUwLDcgKzI3MzQsNyBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJs
ZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2
ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6
OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQogewotICAg
IHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5z
ZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUtPnZhcmlhYmxlcygpKSk7
CisgICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFs
dWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJs
ZXMoKSkpOwogCiAgICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikp
CiAgICAgICAgIHJldHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCkBAIC0yNzgzLDE5ICsyNzY3LDE5
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAjZW5kaWYKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0g
ICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRl
ZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8
fCAoIXN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAg
Ym9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVk
VmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8
ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCiAg
ICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJ
bml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQg
fHwgKHN0YXRlLnBhcmVudE5vZGUgJiYgc3RhdGUucGFyZW50U3R5bGUpKTsgLy8gaXNJbmhlcml0
IC0+IChzdGF0ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKQorICAgIEFTU0VSVCgh
aXNJbmhlcml0IHx8IChzdGF0ZS5wYXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUoKSkp
OyAvLyBpc0luaGVyaXQgLT4gKHN0YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5wYXJlbnRTdHls
ZSgpKQogCi0gICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgJiYgKCFz
dGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlIHx8ICFpc1ZhbGlkVmlzaXRlZExp
bmtQcm9wZXJ0eShpZCkpKSB7CisgICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSAmJiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAh
aXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUg
cHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBi
eSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0luaGVyaXQg
JiYgIXN0YXRlLnBhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygp
ICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRl
LnBhcmVudFN0eWxlLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAg
IGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhl
cml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlk
KSkKKyAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRl
ZFByb3BlcnRpZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCA9
PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7CkBAIC0yODAzLDcgKzI3ODcsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1Zh
cmlhYmxlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5p
c0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7
Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJp
YWJsZS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFZhcmlhYmxlKHZhcmlh
YmxlLT5uYW1lKCksIHZhcmlhYmxlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZgpAQCAtMjgyMiw3ICsyODA2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKLSAgICBmbG9hdCB6
b29tRmFjdG9yID0gc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29t
RmFjdG9yID0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgLy8gV2hhdCBm
b2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIg
Y29ycmVzcG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0
aGFuZHMgKGUuZy4gYm9yZGVyLCBiYWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2Vs
bCBhbmQKQEAgLTI4MzYsNyArMjgyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyBu
b3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBz
dXBwb3J0ZWQuCiAKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+Y2xlYXJDb250ZW50KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCkBAIC0yODQ4LDE5ICsyODMyLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0t
PmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
LT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NH
cmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdl
dCgpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRp
ZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihp
dGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYg
RU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5p
c0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNf
Y2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRp
ZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VW
YWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50
LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0yODcxLDE3ICsyODU1LDE3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CiAKICAgICAgICAgICAgICAgICBpZiAoY29u
dGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNl
dCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVu
dFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRW
YWx1ZS0+aXNBdHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5h
bWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLnN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlLT5z
ZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCkt
PnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVs
bEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVs
ZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCks
IGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBzdGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6
IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0
cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCiAgICAgICAgICAgICAgICAgICAgIG1fZmVh
dHVyZXMuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC0yODky
LDI0ICsyODc2LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0
U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0g
Q1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50
PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRl
bnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFz
ZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KENMT1NFX1FV
T1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9U
RSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI5MTksMTYgKzI5
MDMsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xl
YXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5
UXVvdGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0UXVvdGVzKHN0YXRlLnBhcmVudFN0eWxlLT5xdW90ZXMoKSk7CisgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsK
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0yOTQ2LDE5ICsyOTMwLDE5
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAg
ICAgICAgICAgICAgIHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBl
bmRRdW90ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1
b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKHF1b3Rl
cyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoUXVv
dGVzRGF0YTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1
b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxpc3Qgb2Ygc3Ry
aW5ncyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVy
aWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVu
dEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVk
Rm9udCgpKTsKQEAgLTI5NjgsNyArMjk1Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgaWYg
KGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0g
Rm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNj
b3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAg
ICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRp
b24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgp
KQpAQCAtMjk4Miw3ICsyOTY2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoIXZhbHVl
LT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1p
bHkgPSAwOwogCkBAIC0zMDYwLDI0ICszMDQ0LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAvLyBzaG9ydGhh
bmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBp
ZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJCYWNrZ3JvdW5k
TGF5ZXJzKCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJz
KCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3Io
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3Jv
dW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tncm91bmRDb2xv
cihzdGF0ZS5wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlKCkt
PmJhY2tncm91bmRMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNr
Z3JvdW5kQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoK
ICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhck1h
c2tMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFza0xheWVycygp
OwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5tYXNrTGF5ZXJzKCkpOworICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0
eWxlKCktPm1hc2tMYXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udDoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVu
dFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3RhdGUubGluZUhl
aWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3BlY2lm
aWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgw
KTsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAg
ICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzA4Niw4ICszMDcwLDggQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFsaXplRm9udFN0
eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDAp
OwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAg
ICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzEwMyw3ICszMDg3LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRl
ckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJz
dGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29t
IGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxl
LmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9u
LnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29s
dXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVs
ZXMoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1
ZSgpKSB7CkBAIC0zMTIxLDcgKzMxMDUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgdXBk
YXRlRm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXpl
LCBmb250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVl
ID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWln
aHRWYWx1ZShmb250LT5saW5lSGVpZ2h0LmdldCgpKTsKIAogICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CiAgICAgICAg
IH0KQEAgLTMxMzMsMTEgKzMxMTcsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKICAgICAgICAg
ICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXRlLnN0eWxlLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT50ZXh0U2hh
ZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPnRleHRT
aGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPnNl
dEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcg
U2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzdGF0
ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgq
c3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc3RhdGUucGFyZW50U3R5bGUo
KS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5
bGUoKS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChp
c0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0gICAgICAgICAg
ICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUtPnNldFRl
eHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0
eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTMxNDcsMjkgKzMxMzEsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNo
YWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFj
dG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVh
ZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQg
eCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0
ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBp
dGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKICAgICAgICAg
ICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAg
ICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAg
ICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSkKLSAgICAgICAgICAgICAgICBjb2xv
ciA9IHN0YXRlLnN0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5
bGUoKSkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAK
ICAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRvcHRQdHIobmV3
IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIGlk
ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6
IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5
VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNoYWRvdyhz
aGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRo
aXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0
byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEu
cmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3Qg
dGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hh
ZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3Qg
aWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQogICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRC
b3hSZWZsZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZs
ZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMxODAsMTMgKzMx
NjQsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVm
bGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24t
PnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChy
ZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0
KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUu
c3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAg
ICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252
ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwg
Q2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAg
ICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVj
ZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rp
b24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJlZmxlY3Qo
cmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZs
ZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KQEAg
LTMxOTUsMjkgKzMxNzksMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKHN0YXRlLnBhcmVu
dFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJlbnRTdHlsZS0+
Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVudFN0eWxlLT5j
b2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVs
ZVdpZHRoKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7CisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+
Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1u
UnVsZUNvbG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRTdHlsZSgpLT5j
b2x1bW5SdWxlU3R5bGUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5S
dWxlV2lkdGgoc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5yZXNldENv
bHVtblJ1bGUoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0Q29sdW1uUnVsZSgp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6CiAg
ICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZURp
cmVjdGlvbigpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoc3Rh
dGUucGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVlZCgpKTsKLSAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFyZW50U3R5bGUt
Pm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlQmVo
YXZpb3Ioc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJx
dWVlRGlyZWN0aW9uKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5tYXJxdWVl
U3BlZWQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoc3Rh
dGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TWFycXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVCZWhh
dmlvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJx
dWVlUmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJx
dWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVh
bnMgcmVwZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051
bWJlcigpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQocHJp
bWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVl
ZDogewpAQCAtMzIyNywxOSArMzIxMSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBpZiAoaW50
IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRj
aCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUwMCBt
c2VjLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
cm1hbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDg1KTsg
Ly8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0Lgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhc3Q6Ci0g
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7IC8vIDEwbXNl
Yy4gU3VwZXIgZmFzdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVl
U3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGlt
ZSgpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigp
KTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigp
KTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBz
Y3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVl
U3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZUluY3JlbWVudDogewpAQCAtMzI0OSwxOSArMzIzMywxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVT
bWFsbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChM
ZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVk
KSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8gNnB4LiBUaGUg
V2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUlu
Y3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2
cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0
aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUpOworICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0VG9JbnRMZW5n
dGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUo
KSk7CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJxdWVlTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1h
cnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjcw
LDExICszMjU0LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TG9jYWxl
KG51bGxBdG9tKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShudWxsQXRv
bSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMb2NhbGUocHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxl
Y3Rpb24oc3RhdGUuc3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3Jp
cHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkpOwogICAgICAg
ICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTMyOTMsNyArMzI3Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbnMoUmVu
ZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJlZ2lv
bnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzMwMywxMCArMzI4
NywxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3QgPSBy
ZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3Ag
PSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVy
dFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0lu
dExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24t
PnRvcCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAg
ICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwg
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExl
bmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBs
ZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCiAgICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zMzE4LDEzICszMzAy
LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0aCgpOwogCiAg
ICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwg
cmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJz
dCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFz
aGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJl
bCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRy
dWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRS
ZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxl
ZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0
YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24g
PT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0gcmVnaW9uLT5t
X25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVu
dCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5kb2N1bWVu
dCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogCiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zMzMzLDggKzMzMTcsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBcHBSZWdpb246IHsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0
YXRlLnN0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdp
b25Ob0RyYWcpOwotICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5v
dGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREcmFnZ2FibGVS
ZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERy
YWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOworICAgICAgICBzdGF0
ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMzUwLDIxICszMzM0LDIxIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgICAgIHJl
c3VsdCAqPSA1OwotICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgd2lkdGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06
IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zv
cm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGNy
ZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRy
YW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2
YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25z
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2
ZTogewpAQCAtMzM3NCwzNCArMzM1OCwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2ZSgwKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKDApOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3Bl
Y3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5z
dHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7
CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJl
cnMgYXMgcHguCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlLmdldCgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHBlcnNwZWN0
aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9y
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHBl
cnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJz
cGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CiAgICAgICAgIGlmIChpc0luaXRp
YWwpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAo
aXNJbmhlcml0KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRBbmltYXRpb25zKHN0
YXRlLnBhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+YW5pbWF0aW9ucygpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgog
ICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyVHJh
bnNpdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyVHJhbnNpdGlvbnMo
KTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PmluaGVyaXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0VHJhbnNpdGlvbnMoc3RhdGUucGFyZW50
U3R5bGUoKS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjog
ewpAQCAtMzQxMCw3ICszMzk0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZh
bHVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM0MTksNyArMzQwMyw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3Jv
bGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRVc2VU
b3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Ny
b2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91Y2gpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNDYyLDcgKzM0NDYsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAgICAgICBDU1NQ
cm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53cml0aW5nTW9k
ZSgpKTsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZl
RGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIHN0
YXRlLnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQp
OwogICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwogICAgIH0KQEAg
LTM0OTcsOCArMzQ4MSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXRXcml0aW5nTW9k
ZSgqcHJpbWl0aXZlVmFsdWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qgb2sgdG8g
bW9kaWZ5IGRvY3VtZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAgICAgICBpZiAo
c3RhdGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgc3RhdGUuZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKKyAgICAgICAg
aWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRX
cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zNTE0LDcgKzM0OTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUp
IHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29u
dGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4o
TGluZUJveENvbnRhaW5Ob25lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC0zNTIyLDIxICszNTA2LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgQ1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0
YXRpY19jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsK
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5W
YWx1ZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBDU1MgRm9u
dHMgTW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVT
ZXR0aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVT
ZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1Zh
bHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNl
dHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7CiAgICAgICAgIGludCBsZW4g
PSBsaXN0LT5sZW5ndGgoKTsKQEAgLTM1NTYsOCArMzU0MCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3Bl
cmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKSkKLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIGlmIChj
cmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0z
NTY1LDE0ICszNTQ5LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tT
aXplPiB0cmFja1NpemVzOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUs
IHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUu
c3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVjdG9yPEdyaWRU
cmFja1NpemU+IHRyYWNrU2l6ZXM7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2
YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zNTgwLDE0ICszNTY0LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQb3NpdGlvbiBj
b2x1bW47CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW4pKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Db2x1
bW4oY29sdW1uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW4oY29s
dW1uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
R3JpZFJvdzogewogICAgICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBpZiAoIWNyZWF0
ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
c3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVGhl
c2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRlciBsb29rdXAg
dGFibGUuCkBAIC0zOTA5LDE0ICszODkzLDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiB7
CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0lt
YWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAg
ICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7Cisg
ICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFs
dWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQogewogICAgIGlm
ICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIFN0eWxl
UGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKQEAgLTM5MjcsNyArMzkxMSw3IEBAIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVyCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUt
PmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBp
bWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVs
ZWFzZSgpOwogfQogI2VuZGlmCkBAIC0zOTM2LDEzICszOTIwLDEzIEBAIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLnNl
dChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRp
ZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwog
fQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogewotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwogCiAgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFk
anVzdCgpKQogICAgICAgICByZXR1cm47CkBAIC00MDE0LDE1ICszOTk4LDE1IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAg
fQogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENT
U1ZhbHVlWHhTbWFsbCArIDEpOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9u
dFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwotICAg
IG1fc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwotICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBtX3N0YXRlLnN0
eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwor
ICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIHNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1l
bnQoKSwgbV9zdGF0ZS5zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXpl
KCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBt
X3N0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1
c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBz
dHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VT
Vkdab29tUnVsZXMpCkBAIC00MjMxLDE1ICs0MjE1LDE1IEBAIENvbG9yIFN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBm
b3JWCiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PnRleHRDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+dGV4dENvbG9y
KCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVybiAoc3RhdGUu
ZWxlbWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZWxlbWVudC0+ZG9j
dW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+
bGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSAm
JiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9yKCkg
OiBzdGF0ZS5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0
QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmFj
dGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZl
TGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgogICAg
ICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAgY2FzZSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5jb2xvcigpOwor
ICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAtNDU3NCwxNyAr
NDU1OCwxNyBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGZpbHRlck9w
ZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQogdm9pZCBTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
LSAgICBpZiAoIXN0YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9j
dW1lbnRzLmlzRW1wdHkoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8
IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRl
LmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgVmVjdG9y
PFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHls
ZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJP
cGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsr
aSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBm
aWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRP
cGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKICAgICAgICAg
ICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0gc3RhdGljX2Nh
c3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKIAot
ICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOworICAgICAgICAgICAg
V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzKCkuZ2V0KHJlZmVyZW5jZUZpbHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1l
bnQqIGNhY2hlZERvY3VtZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwpA
QCAtNDU5NSw3ICs0NTc5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0Rv
Y3VtZW50cygpCiAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3Vt
ZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNo
ZWREb2N1bWVudCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9j
dW1lbnRzLmNsZWFyKCk7CisgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmNsZWFyKCk7
CiB9CiAjZW5kaWYKIApAQCAtNDYxMSwxOCArNDU5NSwxOCBAQCBTdHlsZVNoYWRlciogU3R5bGVS
ZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hh
ZGVyVgogewogICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
U2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQot
ICAgICAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICAgICAgbV9zdGF0
ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFtX3N0
YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycykKKyAg
ICBpZiAoIW1fc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUuaGFzUGVuZGlu
Z1NoYWRlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNv
dXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsK
IAotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25z
ID0gbV9zdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IG1fc3RhdGUu
c3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0
KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0g
RmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ2MzksNyArNDYyMyw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KLSAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CisgICAgbV9z
dGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIHNvcnRQ
YXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1l
dGVyPiYgYSwgY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIpCkBAIC00Njgx
LDcgKzQ2NjUsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNv
bHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbQogewogICAgIFJlZlB0cjxDdXN0
b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywg
bV9zdGF0ZS5zdHlsZS5nZXQoKSwgbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25z
KTsKKyAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0ZS5zdHlsZSgp
LCBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAgdHJhbnNmb3Jt
UGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVybiB0cmFuc2Zv
cm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQpAQCAtNDkzMSwxMiArNDkxNSwxMiBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0gc3RhdGljX2Nh
c3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIEtV
UkwgdXJsID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1
bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAgICAgICAgICAg
ICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdt
ZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlmIChTVkdVUklS
ZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCks
IG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklS
ZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCks
IG1fc3RhdGUuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50
VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3Bl
cmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlm
IChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5l
dyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdE
b2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNTA0MCw3ICs1MDI0LDcgQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0g
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5l
bGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJl
c291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAogICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdl
VmFsdWUoKSkgewogICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gcGVuZGluZ0lt
YWdlLT5jc3NJbWFnZVZhbHVlKCk7CkBAIC01MDcwLDIzICs1MDU0LDIzIEBAIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJ
bWFnZSogcGVuZGluCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQog
ewotICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAg
IGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6
S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCkua2V5cygpOwot
ICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0
ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygp
OworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlz
IGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9
ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXll
ciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZS0+YWNjZXNzQmFja2dyb3VuZExheWVy
cygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+
bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0g
bV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXll
cjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+
aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3Vu
ZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRl
bnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3Rf
Y2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkpOyBjb250ZW50
RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBm
b3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPiht
X3N0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEg
PSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRh
LT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBz
dGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKQEAgLTUwOTks
NyArNTA4Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNv
cjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0
eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0
ID0gbV9zdGF0ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5p
bWFnZSgpKSB7CkBAIC01MTExLDE3ICs1MDk1LDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0
ZS5zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNl
dExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAg
aWYgKG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlKCkt
Pmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZS0+
Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgp
LT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUtPnNldEJv
cmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAg
ICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0
eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0lt
YWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChT
dHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hSZWZsZWN0KCkp
IHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRl
LnN0eWxlKCktPmJveFJlZmxlY3QoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVj
ZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CiAgICAgICAgICAgICAgICAg
aWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFn
ZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNr
SW1hZ2UuaW1hZ2UoKSkpOwpAQCAtNTEzMSwxMiArNTExNSwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAg
ICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRl
LnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAg
ICAgICAgICBtX3N0YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJ
bWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUtPm1hc2tC
b3hJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bWFz
a0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNl
dE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBt
X3N0YXRlLnN0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0g
bWFza0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5
ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNr
TGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5
ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAg
ICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAg
ICAgICAgICB9CkBAIC01MTQ3LDcgKzUxMzEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQ
ZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3RhdGUucGVuZGluZ0lt
YWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGll
cygpLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJj
ZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggODRjM2NkMWZjMDM3ZGFiMGRm
ZDc1YThmZmQ3ZDhiOWE1YzQ5NzNmOC4uMDYxYTUxOGM4YmE4YTA2ZmY2NDAzYWE5ZTdiNDUxN2Zh
OTFjNmZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xNjQsMjAgKzE2NCwx
MiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVG
b3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0KCk7IH0KLSAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVu
dFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50OyB9CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOyB9CisgICAgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmVsZW1lbnQoKTsgfQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbigpIHsgcmV0dXJuIHN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBwYXJl
bnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0
aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuZm9u
dERpcnR5IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9
Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUo
KS0+c2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1f
c3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2
b2lkIHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHls
ZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0
V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24o
VGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBz
dHlsZSgpLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQotICAgIGJvb2wg
aGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZTsgfQorICAg
IGJvb2wgaGFzUGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Tm9kZSgp
OyB9CiAKICAgICB2b2lkIHJlc2V0QXV0aG9yU3R5bGUoKTsKICAgICB2b2lkIGFwcGVuZEF1dGhv
clN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+ID4mKTsKQEAgLTIwMSw3ICsxOTMsNiBAQCBwcml2YXRlOgogICAgIH0KICNlbmRp
ZgogCi0gICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVt
ZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0
eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwpAQCAtMzA5LDggKzMwMCw2IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKIAotICAgIHZvaWQgYWRkTWF0Y2hl
ZFJ1bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuYXBwZW5k
KHJ1bGUpOyB9Ci0KICAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGlu
dCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZp
cnN0UnVsZUluZGV4KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KICAgICAgICAg
aW50JiBmaXJzdFJ1bGVJbmRleDsKQEAgLTM4Miw3ICszNzEsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc29ydE1hdGNoZWRSdWxlcygpOwogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKE1hdGNoUmVzdWx0Jik7CiAKLSAgICBib29sIHJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRh
JiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgcnVsZU1hdGNoZXMoY29u
c3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmKTsKICAg
ICBib29sIGNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVj
dG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50KTsKICAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CiAgICAgZW51bSBTdHls
ZUFwcGxpY2F0aW9uUGFzcyB7CkBAIC00MzIsNzIgKzQyMSwxNjUgQEAgcHVibGljOgogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGF0ZSk7CiAgICAgcHVibGljOgogICAgICAgICBTdGF0
ZSgpCi0gICAgICAgIDogZWxlbWVudCgwKQotICAgICAgICAsIHN0eWxlZEVsZW1lbnQoMCkKLSAg
ICAgICAgLCBwYXJlbnROb2RlKDApCi0gICAgICAgICwgcGFyZW50U3R5bGUoMCkKLSAgICAgICAg
LCByb290RWxlbWVudFN0eWxlKDApCi0gICAgICAgICwgcmVnaW9uRm9yU3R5bGluZygwKQotICAg
ICAgICAsIHNhbWVPcmlnaW5Pbmx5KGZhbHNlKQotICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNF
VURPKQotICAgICAgICAsIGVsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKLSAgICAgICAg
LCBkaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoZmFsc2UpCi0gICAgICAgICwgZWxlbWVudEFm
ZmVjdGVkQnlDbGFzc1J1bGVzKGZhbHNlKQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSh0cnVlKQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
ZmFsc2UpCisgICAgICAgIDogbV9lbGVtZW50KDApCisgICAgICAgICwgbV9zdHlsZWRFbGVtZW50
KDApCisgICAgICAgICwgbV9wYXJlbnROb2RlKDApCisgICAgICAgICwgbV9wYXJlbnRTdHlsZSgw
KQorICAgICAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICAgICAsIG1fcmVnaW9uRm9y
U3R5bGluZygwKQorICAgICAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwg
bV9wc2V1ZG9TdHlsZShOT1BTRVVETykKKyAgICAgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90
SW5zaWRlTGluaykKKyAgICAgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxz
ZSkKKyAgICAgICAgLCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAg
ICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICAgICAsIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKKyNlbmRpZgorICAgICAg
ICAsIG1fbGluZUhlaWdodFZhbHVlKDApCisgICAgICAgICwgbV9mb250RGlydHkoZmFsc2UpCisg
ICAgICAgICwgbV9oYXNVQUFwcGVhcmFuY2UoZmFsc2UpCisgICAgICAgICwgbV9iYWNrZ3JvdW5k
RGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9p
ZCBpbml0RWxlbWVudChFbGVtZW50Kik7CisgICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2
ZShEb2N1bWVudCosIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1
ZG9JZCA9IE5PUFNFVURPLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKKyAg
ICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZWxlbWVudCA9IDA7
CisgICAgICAgICAgICBtX3N0eWxlZEVsZW1lbnQgPSAwOworICAgICAgICAgICAgbV9wYXJlbnRT
dHlsZSA9IDA7CisgICAgICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAgICAgICAgbV9y
ZWdpb25Gb3JTdHlsaW5nID0gMDsKKyAgICAgICAgICAgIG1fcnVsZUxpc3QgPSAwOworICAgICAg
ICAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0ltYWdl
UHJvcGVydGllcy5jbGVhcigpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgLCBo
YXNQZW5kaW5nU2hhZGVycyhmYWxzZSkKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ1NoYWRlcnMg
PSBmYWxzZTsKICNlbmRpZgotICAgICAgICAsIGxpbmVIZWlnaHRWYWx1ZSgwKQotICAgICAgICAs
IGZvbnREaXJ0eShmYWxzZSkKLSAgICAgICAgLCBoYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAg
ICAgICwgYmFja2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikgeyB9CisjaWYgRU5BQkxF
KENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgbV9wZW5kaW5nU1ZHRG9j
dW1lbnRzLmNsZWFyKCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsgfQorICAgICAg
ICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgICAg
IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlZEVs
ZW1lbnQ7IH0KKyAgICAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZSkgeyBtX3N0eWxlID0gc3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiB0YWtlU3R5bGUoKSB7IHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsgfQorCisgICAg
ICAgIFN0YXRpY0NTU1J1bGVMaXN0KiBlbnN1cmVSdWxlTGlzdCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbV9ydWxlTGlzdCkKKyAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3Rh
dGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fcnVsZUxpc3Qu
Z2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiB0YWtl
UnVsZUxpc3QoKSB7IHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsgfQorCisgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudE5vZGU7IH0K
KyAgICAgICAgdm9pZCBzZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIHsg
bV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOyB9CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5
bGU7IH0KKworICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7
IHJldHVybiBtX3JlZ2lvbkZvclN0eWxpbmc7IH0KKyAgICAgICAgdm9pZCBzZXRTYW1lT3JpZ2lu
T25seShib29sIGlzU2FtZU9yaWdpbk9ubHkpIHsgbV9zYW1lT3JpZ2luT25seSA9IGlzU2FtZU9y
aWdpbk9ubHk7IH0KKyAgICAgICAgYm9vbCBpc1NhbWVPcmlnaW5Pbmx5KCkgY29uc3QgeyByZXR1
cm4gbV9zYW1lT3JpZ2luT25seTsgfQorICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHNldWRvU3R5bGU7IH0KKyAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVu
dExpbmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQorICAgICAg
ICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
dHJpYnV0ZWRUb0luc2VydGlvblBvaW50OyB9CisgICAgICAgIHZvaWQgc2V0RWxlbWVudEFmZmVj
dGVkQnlDbGFzc1J1bGVzKGJvb2wgaXNBZmZlY3RlZCkgeyBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xh
c3NSdWxlcyA9IGlzQWZmZWN0ZWQ7IH0KKyAgICAgICAgYm9vbCBlbGVtZW50QWZmZWN0ZWRCeUNs
YXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsg
fQogICAgICAgICAKLXB1YmxpYzoKKyAgICAgICAgdm9pZCBzZXRBcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoYm9vbCBpc0FwcGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0g
aXNBcHBseTsgfQorICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoYm9vbCBpc0FwcGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGlz
QXBwbHk7IH0KKyAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQorICAgICAgICBib29s
IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVy
dHlNYXAmIHBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKSB7IHJldHVybiBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXM7IH0KKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAg
ICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCYgcGVuZGluZ1NWR0RvY3VtZW50cygpIHsgcmV0dXJu
IG1fcGVuZGluZ1NWR0RvY3VtZW50czsgfQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJT
KQorICAgICAgICB2b2lkIHNldEhhc1BlbmRpbmdTaGFkZXJzKGJvb2wgaGFzUGVuZGluZ1NoYWRl
cnMpIHsgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGhhc1BlbmRpbmdTaGFkZXJzOyB9CisgICAgICAg
IGJvb2wgaGFzUGVuZGluZ1NoYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1BlbmRpbmdTaGFk
ZXJzOyB9CisjZW5kaWYKKworICAgICAgICB2b2lkIHNldExpbmVIZWlnaHRWYWx1ZShDU1NWYWx1
ZSogdmFsdWUpIHsgbV9saW5lSGVpZ2h0VmFsdWUgPSB2YWx1ZTsgfQorICAgICAgICBDU1NWYWx1
ZSogbGluZUhlaWdodFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSGVpZ2h0VmFsdWU7IH0K
KyAgICAgICAgdm9pZCBzZXRGb250RGlydHkoYm9vbCBpc0RpcnR5KSB7IG1fZm9udERpcnR5ID0g
aXNEaXJ0eTsgfQorICAgICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERpcnR5OyB9CisKKyAgICAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKTsKKyAgICAgICAgICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgeworICAgICAgICAg
ICAgICAgIG1fYm9yZGVyRGF0YSA9IG1fc3R5bGUtPmJvcmRlcigpOworICAgICAgICAgICAgICAg
IG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAg
ICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBoYXNVQUFwcGVhcmFuY2Uo
KSBjb25zdCB7IHJldHVybiBtX2hhc1VBQXBwZWFyYW5jZTsgfQorICAgICAgICBCb3JkZXJEYXRh
IGJvcmRlckRhdGEoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckRhdGE7IH0KKyAgICAgICAgRmls
bExheWVyIGJhY2tncm91bmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsg
fQorICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tn
cm91bmRDb2xvcjsgfQorCisgICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICAgICAg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBt
X3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICB2b2lkIHNldEZvbnRE
ZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2Zv
bnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsg
fQorICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxl
LT5zZXRab29tKGYpOyB9CisgICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7
IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICAgICAg
dm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+
c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KKyAgICAgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRXcml0aW5n
TW9kZSh3cml0aW5nTW9kZSk7IH0KKyAgICAgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4
dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5z
ZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorCisgICAgICAgIFZlY3Rvcjxj
b25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzKCkgeyByZXR1cm4gbV9tYXRjaGVkUnVs
ZXM7IH0KKyAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkg
eyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
ICAgICAgICAgLy8gRklYTUUoYnVnIDEwODU2Myk6IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJldmll
dywgdGhlc2UgbWVtYmVyCiAgICAgICAgIC8vIHZhcmlhYmxlcyBhcmUgcHVibGljLiBIb3dldmVy
IHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBhY2Nlc3MKICAgICAgICAgLy8gdGhlc2UgdmFyaWFi
bGVzLgotICAgICAgICBFbGVtZW50KiBlbGVtZW50OwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlOwotICAgICAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50OwotICAgICAg
ICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlOwotICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlOworICAgICAgICBF
bGVtZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsK
KyAgICAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OworICAgICAgICBDb250YWlu
ZXJOb2RlKiBtX3BhcmVudE5vZGU7CisgICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxl
OworICAgICAgICBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlOwogICAgICAgICAKLSAg
ICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nOwotICAgICAgICBib29sIHNhbWVP
cmlnaW5Pbmx5OwotICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZTsKLQotICAgICAgICBFSW5z
aWRlTGluayBlbGVtZW50TGlua1N0YXRlOworICAgICAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9u
Rm9yU3R5bGluZzsKKyAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OworICAgICAgICBQc2V1
ZG9JZCBtX3BzZXVkb1N0eWxlOwogCi0gICAgICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50OworICAgICAgICBFSW5zaWRlTGluayBtX2VsZW1lbnRMaW5rU3RhdGU7CiAKLSAgICAg
ICAgYm9vbCBlbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXM7CisgICAgICAgIGJvb2wgbV9kaXN0
cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7CiAKLSAgICAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVk
bzsKKyAgICAgICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsKIAogICAgICAg
ICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBh
biBlbGVtZW50LAogICAgICAgICAvLyBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIG1l
cmdlIHNvcnRpbmcuCi0gICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtYXRjaGVk
UnVsZXM7Ci0gICAgICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gcnVsZUxpc3Q7CisgICAg
ICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21hdGNoZWRSdWxlczsKKyAgICAgICAg
UmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwogCi0gICAgICAgIGJvb2wgYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwotICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGU7CisgICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7CisgICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwogCi0g
ICAgICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwIHBlbmRpbmdJbWFnZVByb3BlcnRpZXM7Cisg
ICAgICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsK
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgICAgIGJvb2wgaGFzUGVuZGluZ1NoYWRlcnM7
CisgICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nU2hhZGVyczsKICNlbmRpZgogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKLSAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFw
IHBlbmRpbmdTVkdEb2N1bWVudHM7CisgICAgICAgIFBlbmRpbmdTVkdEb2N1bWVudE1hcCBtX3Bl
bmRpbmdTVkdEb2N1bWVudHM7CiAjZW5kaWYKLSAgICAgICAgQ1NTVmFsdWUqIGxpbmVIZWlnaHRW
YWx1ZTsKLSAgICAgICAgYm9vbCBmb250RGlydHk7CisgICAgICAgIENTU1ZhbHVlKiBtX2xpbmVI
ZWlnaHRWYWx1ZTsKKyAgICAgICAgYm9vbCBtX2ZvbnREaXJ0eTsKIAotICAgICAgICBib29sIGhh
c1VBQXBwZWFyYW5jZTsKLSAgICAgICAgQm9yZGVyRGF0YSBib3JkZXJEYXRhOwotICAgICAgICBG
aWxsTGF5ZXIgYmFja2dyb3VuZERhdGE7Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsK
KyAgICAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZTsKKyAgICAgICAgQm9yZGVyRGF0YSBtX2Jv
cmRlckRhdGE7CisgICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOworICAgICAgICBD
b2xvciBtX2JhY2tncm91bmRDb2xvcjsKICAgICB9OwogCiAgICAgc3RhdGljIFJlbmRlclN0eWxl
KiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7
IH0KQEAgLTUxMCwxNSArNTkyLDIzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0N1
cnNvckltYWdlVmFsdWUqKTsKIAotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0K
LSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KKyAgICBib29sIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKTsgfQogCiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgo
Q1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUs
IGRvdWJsZSBtdWx0aXBsaWVyID0gMSk7CiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9h
dExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKIAogICAgIENTU1RvU3R5bGVNYXAqIHN0
eWxlTWFwKCkgeyByZXR1cm4gJm1fc3R5bGVNYXA7IH0KICAgICBJbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdy
YXBwZXJzOyB9Ci0KKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigp
IHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9z
dGF0ZS5zZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsg
bV9zdGF0ZS5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVz
dChib29sIGIpIHsgbV9zdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0
V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5n
TW9kZSh3cml0aW5nTW9kZSk7IH0KKyAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3Jp
ZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRl
eHRPcmllbnRhdGlvbik7IH0KKyAgICAKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdDsKICAgICAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187770</attachid>
            <date>2013-02-11 21:55:49 -0800</date>
            <delta_ts>2013-02-13 01:04:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108563-20130212145219.patch</filename>
            <type>text/plain</type>
            <size>142191</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmNjNjJmZWYyZTlkM2Ni
ZjdiZDhkMzAyZGE3YWZhNTJlZTlhNzZkOS4uMjAzZDQ2Njc1NTZkNDhjMzYyNDc0ZmY0ZmRhMzkz
ODVlMDY5MDdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMi0xMSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcywgYmVjYXVzZSBtb3N0IG9mIHRo
ZSBtZW1iZXIgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuCisgICAgICAgIFdlIGRvbid0IG5lZWQg
dG8gdXBkYXRlIHRob3NlIHJlYWQtb25seSB2YXJpYWJsZXMgd2hpbGUgcmVzb2x2aW5nCisgICAg
ICAgIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRv
IGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAg
ICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3RhdGUncyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAg
ICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0
IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9u
ZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZpb3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAg
ICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxsIGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50
U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNldWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMg
b24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgZHluYW1pY1BzZXVkbywg
YmVjYXVzZSBkeW5hbWljUHNldWRvIGluCisgICAgICAgIFN0YXRlIGNsYXNzIGlzIGp1c3QgdXNl
ZCBmb3IgcmV0dXJuaW5nIG1hdGNoZWQgcHNldWRvIHN0eWxlIGZyb20KKyAgICAgICAgdGhpcyBy
dWxlTWF0Y2hlcyB0byBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIE5vIG5lZWQgdG8ga2Vl
cAorICAgICAgICBkeW5hbWljUHNldWRvIHdoaWxlIHJlc29sdmluZyBzdHlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
UmVtb3ZlZCBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE8sIGJlY2F1c2UgdGhpcyBtZXRob2QgdXNl
cyBqdXN0CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlZC4gU2VsZWN0b3JDaGVja2Vy
IGRvZXNuJ3Qgc2VlIFN0eWxlUmVzb2x2ZXIncworICAgICAgICBtX3BzZXVkb1N0eWxlIGRpcmVj
dGx5LiBOZWVkIHRvIHVzZSBTZWxlY3RvckNoZWNrZXJDb250ZXh0LiBTbyBubworICAgICAgICBu
ZWVkIHRvIHNldCBtX3BzZXVkb1N0eWxlIHRvIGJlIE5PUFNFVURPLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNr
QnJlYWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Omhhc1BhcmVudE5vZGUpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAgICAg
TW9kaWZpZWQgdG8gdXNlIGNsZWFyIGF0IHRoZSBlbmQgb2Ygc3R5bGVGb3JFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnRha2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0UGFyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6aXNTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0RWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aGFzUGVuZGluZ1NoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldExpbmVIZWln
aHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bGluZUhl
aWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRG
b250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpoYXNVQUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmJvcmRlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmJhY2tncm91bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpiYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLCAuLi4gYW5kIHNldFRleHRPcmllbnRhdGlvbiB3ZXJlIG1vdmVkIGZyb20KKyAg
ICAgICAgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjptYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIFRoZXNlIGZv
bnREZXNjcmlwdGlvbiwgLi4uLCBzZXRUZXh0T3JpZW50YXRpb24gYXJlIHdyYXBwZXJzIHRvCisg
ICAgICAgIGludm9rZSBTdGF0ZSdzIG1ldGhvZHMuIFN0eWxlQnVpbGRlciBzdGlsbCBkZXBlbmRz
IG9uIFN0eWxlUmVzb2x2ZXIKKyAgICAgICAgYW5kIGludm9rZXMgdGhlc2UgbWV0aG9kcy4gU28g
d2UgbmVlZCB0aGVzZSB3cmFwcGVycy4KKwogMjAxMy0wMi0xMSAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTQyNTIwPyk6IFNw
YWNlIG5vIGxvbmdlciBzY3JvbGxzIHRoZSBwYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggYWI1NmY2NjExNzk3ZmQ5NDc3OTZmNDhmMzEzOWU3ODEz
YTk3ZTgzZC4uZDFlOWM2MGQzYjlkZWQ3ZTIwZmM3NjVlOWM3N2E0MzE2ZTNiNmQxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNDksNyArNDksNyBA
QAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSBc
CiB7IFwKLSAgICBzdmdzdHlsZS0+c2V0IyNQcm9wKHN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHls
ZSgpLT5wcm9wKCkpOyBcCisgICAgc3Znc3R5bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5zdmdTdHlsZSgpLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTExMCwx
MCArMTEwLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICBjb25zdCBTdGF0ZSYg
c3RhdGUgPSBtX3N0YXRlOwotICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0YXRlLnN0
eWxlLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IHN0
YXRlLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CiAKLSAgICBib29sIGlzSW5oZXJpdCA9IHN0
YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlz
SW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSAm
JiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29sIGlzSW5oZXJpdCA9IHN0YXRl
LnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNJ
bml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFzdGF0ZS5wYXJlbnROb2RlKCkg
JiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMg
YSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpcgogICAgIC8vIGNv
cnJlc3BvbmRpbmcgZnJvbnQtZW5kIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5kcyhlLmcu
IGJvcmRlciwKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZH
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5RmlsbDoKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkg
ewotICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9
IHN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0
eWxlKCk7CiAgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYXJlbnRT
dHlsZS0+ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50Q29sb3IoKSwg
c3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yNDAsMTQgKzI0MCwxNCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkp
IHsKICAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQ
YWludCo+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2
Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwg
c3RhdGUuc3R5bGUtPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBj
b2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZS0+c3Zn
U3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50
U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRUeXBl
KCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5z
dHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAg
ICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5
cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUtPmNv
bG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBh
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+
dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYg
KHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHls
ZS0+c2V0TWFya2VyU3RhcnRSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRp
ZmllckZyb21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldE1hcmtlclN0YXJ0UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpm
cmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJr
ZXJNaWQ6CkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1By
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5
bGUtPnNldE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlm
aWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0TWFya2VyTWlkUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJF
bmQ6CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUt
PnNldE1hcmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSk7CisgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0TWFya2VyRW5kUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVu
dElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5l
Y2FwOgpAQCAtNDI5LDcgKzQyOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAo
dHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0g
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxl
LT5zZXRGaWx0ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZy
b21JUklTdHJpbmcocywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAg
c3Znc3R5bGUtPnNldEZpbHRlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVu
dGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKQEAgLTQ0Myw3
ICs0NDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVz
b3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMs
IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRN
YXNrZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklT
dHJpbmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBQYXRoOgpAQCAtNDU3LDcgKzQ1Nyw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVzb3VyY2UoU1ZH
VVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmVs
ZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRDbGlwcGVyUmVz
b3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMs
IHN0YXRlLmRvY3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QW5jaG9yOgpAQCAtNDc4LDE0ICs0NzgsMTQgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoc3RvcENvbG9yLCBTdG9wQ29sb3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NW
R0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0b3BDb2xvcihjb2xvckZy
b21TVkdDb2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5z
dHlsZS0+Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3Io
Y29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwg
c3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvcjoKICAgICAgICAgewogICAgICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGlnaHRpbmdDb2xvciwgTGlnaHRpbmdD
b2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAg
ICAgICBzdmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVl
KHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+Y29sb3IoKSkpOwor
ICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCkt
PmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmxv
b2RDb2xvciwgRmxvb2RDb2xvcik7CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3Io
KSkKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZS0+
Y29sb3IoKSkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGbG9vZENvbG9yKGNvbG9y
RnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRl
LnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU1MCw3
ICs1NTAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRTdmdTaGFkb3c6IHsKICAgICAgICAgICAgIGlmIChpc0luaGVy
aXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIo
c3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEo
KnN0YXRlLnBhcmVudFN0eWxlLT5zdmdTdHlsZSgpLT5zaGFkb3coKSkgOiAwKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN2Z3N0eWxlLT5zZXRTaGFkb3coYWRvcHRQdHIoc3RhdGUucGFyZW50
U3R5bGUoKS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkgPyBuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFy
ZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOwogICAgICAgICAgICAgaWYg
KGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKICAgICAgICAg
ICAgICAgICByZXR1cm4gc3Znc3R5bGUtPnNldFNoYWRvdyhudWxscHRyKTsKIApAQCAtNTY1LDkg
KzU2NSw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlz
U2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBTaGFk
b3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oZmlyc3RWYWx1ZSk7Ci0g
ICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpLAotICAgICAgICAgICAg
ICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8g
aXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKSA6IDA7CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVt
LT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpKSwKKyAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbnQg
Ymx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUu
c3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xv
ciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKICAgICAgICAgICAgICAgICBj
b2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxODI5MGYzODU2NDg5NTM3NmU1ODk2YWNh
MjQwYTgwMDc3MjYyNzNjLi45MTI2MDMwYTZlNzA0MGVjYTU1YzJjOTE5MTAzZTJmNzJmNDQ1OGI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xOTQsMTQgKzE5NCwxNCBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHBy
b3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAotICAgIG1fc3RhdGUuc3R5bGUtPnNldCMj
UHJvcChtX3N0YXRlLnBhcmVudFN0eWxlLT5wcm9wKCkpOyBcCisgICAgbV9zdGF0ZS5zdHlsZSgp
LT5zZXQjI1Byb3AobV9zdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyBcCiAgICAgcmV0dXJu
OyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkg
XAogSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAg
bV9zdGF0ZS5zdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBc
CisgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1By
b3AoKSk7IFwKICAgICByZXR1cm47IFwKIH0KIApAQCAtNDc1LDExICs0NzUsMTEgQEAgYm9vbCBN
YXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRj
aFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVl
c3QucnVsZVNldCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUuZWxlbWVudCk7CisgICAgQVNTRVJUKG1f
c3RhdGUuZWxlbWVudCgpKTsKIAogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgRWxl
bWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQ7Ci0gICAgU3R5bGVkRWxlbWVudCogc3R5bGVk
RWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQ7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRlLmVsZW1lbnQoKTsKKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGUu
c3R5bGVkRWxlbWVudCgpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHNldWRvSWQgPSBlbGVt
ZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlmICghcHNldWRvSWQuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIEFTU0VSVChzdHlsZWRFbGVtZW50KTsKQEAgLTUxOSwxMyArNTE5LDEzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiBt
YXRjaFJlcXVlc3QsIFJ1bGVSCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5n
ZSYgcnVsZVJhbmdlKQogewotICAgIGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKQorICAg
IGlmICghbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHVuc2lnbmVkIHNpemUgPSBtYXRjaFJlcXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNB
bmRSdWxlU2V0cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewogICAgICAgICBjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IgPSBtYXRjaFJl
cXVlc3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3Rv
cjsKLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmctPm5vZGUoKSkpKSB7Cisg
ICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCktPm5vZGUoKSkpKSB7CiAgICAg
ICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CiAgICAgICAgICAg
ICBBU1NFUlQocmVnaW9uUnVsZXMpOwogICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMo
TWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMs
IG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CkBAIC01MzYsMjQgKzUzNiwyMyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1h
dGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZQogdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBTdGF0ZSYgc3RhdGUg
PSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgIFZl
Y3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzID0gc3RhdGUubWF0Y2hlZFJ1
bGVzKCk7CisgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAogICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5t
b2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYg
KCFzdGF0ZS5ydWxlTGlzdCkKLSAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0ID0gU3RhdGljQ1NT
UnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rh
dGUubWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgc3RhdGUucnVsZUxpc3Qt
PnJ1bGVzKCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NP
TVdyYXBwZXIoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVs
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBzdGF0ZS5lbnN1cmVSdWxlTGlzdCgpLT5ydWxl
cygpLmFwcGVuZChtYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQg
b2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0aW9ucy4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGlmIChzdGF0ZS5zdHlsZSAmJiBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPmNvbnRh
aW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PnNldFVuaXF1ZSgpOwotICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHN0YXRl
Lm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5wcm9wZXJ0aWVzKCksIHN0YXRlLm1hdGNoZWRSdWxl
c1tpXS0+cnVsZSgpLCBzdGF0ZS5tYXRjaGVkUnVsZXNbaV0tPmxpbmtNYXRjaFR5cGUoKSwgc3Rh
dGUubWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICBp
ZiAoc3RhdGUuc3R5bGUoKSAmJiBtYXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7
CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgbWF0Y2hlZFJ1bGVzW2ldLT5y
dWxlKCktPnByb3BlcnRpZXMoKSwgbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIG1hdGNoZWRSdWxl
c1tpXS0+bGlua01hdGNoVHlwZSgpLCBtYXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0
VHlwZSgpKTsKICAgICB9CiB9CiAKQEAgLTU2NCwxMiArNTYzLDEyIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3Ig
cnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQg
aWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2Nv
cGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1f
c3RhdGUuZWxlbWVudCkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3Rh
dGUuZWxlbWVudC0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1f
c2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1
cmVTdGFja0NvbnNpc3RlbmN5KG1fc3RhdGUuZWxlbWVudCgpKSkgeworICAgICAgICBib29sIGFw
cGx5QXV0aG9yU3R5bGVzID0gbV9zdGF0ZS5lbGVtZW50KCktPnRyZWVTY29wZSgpLT5hcHBseUF1
dGhvclN0eWxlcygpOwogICAgICAgICBib29sIGRvY3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAg
ICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX3N0YXRlLm1h
dGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRo
b3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAg
ICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Bl
UmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsKQEAgLTYwMCw3ICs1OTksNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9v
bCBpbmNsdWRlRW1wdAogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAg
cmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KTsKKyAgICByZXR1cm4gbV9z
Y29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc0hvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQoKSk7CiAjZWxzZQogICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgpAQCAtNjExLDE3ICs2MTAsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
I2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAgIEFTU0VSVChtX3Njb3BlUmVzb2x2ZXIpOwogCi0g
ICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cygpLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRj
aGVkUnVsZXM7Ci0gICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX3N0YXRlLmVs
ZW1lbnQsIG1hdGNoZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxl
cyhtX3N0YXRlLmVsZW1lbnQoKSwgbWF0Y2hlZFJ1bGVzKTsKICAgICBpZiAobWF0Y2hlZFJ1bGVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0
Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkgewogICAgICAgICBSdWxlUmFuZ2UgcnVsZVJh
bmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNoZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1w
dHlSdWxlcywgbV9zdGF0ZS5lbGVtZW50KSwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KG1hdGNoZWRSdWxlcy5hdChpLTEpLCBpbmNsdWRlRW1w
dHlSdWxlcywgbV9zdGF0ZS5lbGVtZW50KCkpLCBydWxlUmFuZ2UpOwogICAgIH0KICAgICBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKICNlbHNlCkBAIC02MzIsMTAgKzYzMSwx
MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hB
dXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
ewotICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVk
UnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAotICAgIGlmICghbV9zdGF0ZS5lbGVt
ZW50KQorICAgIGlmICghbV9zdGF0ZS5lbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCkBAIC02NTMsNyArNjUyLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQogICAgIGlmICghbV91c2VyU3R5bGUpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgTWF0Y2hSZXF1ZXN0IG1h
dGNoUmVxdWVzdChtX3VzZXJTdHlsZS5nZXQoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwpAQCAtNjY2
LDcgKzY2NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIAogdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMpCiB7Ci0g
ICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cygpLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlID0gcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9
IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsKQEAgLTY4Myw3ICs2ODIsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVs
ZURhdGE+KiBydWxlcywgYwogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgLy8gSW4g
c29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVt
ZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KICAgICAvLyBB
bmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2Fz
ZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCi0gICAgYm9vbCBjYW5Vc2VGYXN0UmVq
ZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJl
bnROb2RlKTsKKyAgICBib29sIGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBh
cmVudFN0YWNrSXNDb25zaXN0ZW50KHN0YXRlLnBhcmVudE5vZGUoKSk7CiAKICAgICB1bnNpZ25l
ZCBzaXplID0gcnVsZXMtPnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CkBAIC02OTMsNyArNjkyLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKIAog
ICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7Ci0gICAgICAgIGlmIChy
dWxlTWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlKSkgeworICAgICAgICBQc2V1
ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgIGlmIChydWxlTWF0Y2hlcyhy
dWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvKSkgewogICAgICAgICAg
ICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3Jl
IGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVy
dHlTZXQqIHByb3BlcnRpZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICBpZiAo
IXByb3BlcnRpZXMgfHwgKHByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiAhbWF0Y2hSZXF1ZXN0Lmlu
Y2x1ZGVFbXB0eVJ1bGVzKSkgewpAQCAtNzAxLDE5ICs3MDEsMTkgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
cnVsZXMsIGMKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIEZJWE1FOiBFeHBvc2luZyB0aGUgbm9uLXN0YW5kYXJkIGdldE1hdGNoZWRDU1NS
dWxlcyBBUEkgdG8gd2ViIGlzIHRoZSBvbmx5IHJlYXNvbiB0aGlzIGlzIG5lZWRlZC4KLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbigpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuaXNTYW1lT3JpZ2luT25s
eSgpICYmICFydWxlRGF0YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZh
bHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBp
ZgogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50
LgotICAgICAgICAgICAgaWYgKHN0YXRlLmR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgc3Rh
dGUucHNldWRvU3R5bGUgPT0gTk9QU0VVRE8pIHsKKyAgICAgICAgICAgIGlmIChkeW5hbWljUHNl
dWRvICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKICAg
ICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIubW9kZSgpID09IFNlbGVjdG9yQ2hl
Y2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgICAgICAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHN0YXRlLmR5bmFtaWNQc2V1ZG8gPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCkKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKHN0YXRlLmR5bmFtaWNQ
c2V1ZG8pOworICAgICAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJO
QUxfUFNFVURPSUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc1Bz
ZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRj
aGVkIHJ1bGVzIGFycmF5LgogICAgICAgICAgICAgICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5k
ZXg7CkBAIC03MjEsNyArNzIxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGMKICAgICAgICAg
ICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxl
SW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9m
IG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLmFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29v
a2llLCB0cnVlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAg
LTczOSw3ICs3MzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1
bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNv
cnRNYXRjaGVkUnVsZXMoKQogewotICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcy5i
ZWdpbigpLCBtX3N0YXRlLm1hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKKyAgICBz
dGQ6OnNvcnQobV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5iZWdpbigpLCBtX3N0YXRlLm1hdGNoZWRS
dWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRp
ZXMpCkBAIC03NTEsMTcgKzc1MSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQWxsUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQogICAgICAg
ICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBhdXRo
b3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMg
bWFwcGVkIGZyb20gSFRNTC4KLSAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KSB7Ci0gICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1l
bnQtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgIGlmIChtX3N0YXRlLnN0eWxl
ZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwog
CiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNsYXJhdGlvbnMu
CiAgICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBt
YXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGllZAogICAgICAgICAvLyBhZnRlciBhbGwgYXR0
cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBv
ZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVz
KHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0
LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkpOwogCi0gICAgICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlzSFRNTEVs
ZW1lbnQoKSkgeworICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSFRNTEVs
ZW1lbnQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGly
ZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVu
dCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAg
ICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3RhdGUu
c3R5bGVkRWxlbWVudCgpKS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNB
dXRvKTsKICAgICAgICAgICAgIGlmIChpc0F1dG8pCiAgICAgICAgICAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCB0ZXh0RGlyZWN0aW9uID09IExUUiA/IGxlZnRUb1JpZ2h0RGVj
bGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7CiAgICAgICAgIH0KQEAgLTc3
MiwxOCArNzcyLDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllCiAgICAgICAgIG1hdGNoQXV0
aG9yUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBz
dHlsZSBhdHRyaWJ1dGUuCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1f
c3RhdGUuc3R5bGVkRWxlbWVudCAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxl
KCkpIHsKKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHls
ZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsK
ICAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlz
IG5vIENTU09NIHdyYXBwZXIuCiAgICAgICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRv
dyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29s
IGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc0luU2hhZG93
VHJlZSgpOworICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKICAgICAgICAgLy8gRklYTUU6IENvbnN0
aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5z
dHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKKyAg
ICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlKTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE5vdyBjaGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlk
ZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQcm9wZXJ0aWVzICYmIG1fbWF0Y2hBdXRob3JB
bmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCAmJiBtX3N0YXRlLnN0eWxlZEVs
ZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVz
KHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpLCBmYWxzZSAvKiBpc0NhY2hlYWJsZSAqLyk7
CisgICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQo
KS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVz
dWx0LCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKTsKICNlbmRpZgpA
QCAtNzk4LDEyICs3OTgsMTcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0
ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVu
dChFbGVtZW50KiBlKQoreworICAgIG1fZWxlbWVudCA9IGU7CisgICAgbV9zdHlsZWRFbGVtZW50
ID0gZSAmJiBlLT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlKSA6IDA7CisgICAgbV9lbGVtZW50TGlua1N0YXRlID0gZSA/IGUtPmRvY3VtZW50KCktPnZp
c2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRlKGUpIDogTm90SW5zaWRlTGluazsK
K30KKwogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkK
IHsKLSAgICBpZiAobV9zdGF0ZS5lbGVtZW50ICE9IGUpIHsKLSAgICAgICAgbV9zdGF0ZS5lbGVt
ZW50ID0gZTsKLSAgICAgICAgbV9zdGF0ZS5zdHlsZWRFbGVtZW50ID0gbV9zdGF0ZS5lbGVtZW50
ICYmIG1fc3RhdGUuZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4obV9zdGF0ZS5lbGVtZW50KSA6IDA7Ci0gICAgICAgIG1fc3RhdGUuZWxlbWVu
dExpbmtTdGF0ZSA9IGRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlu
a1N0YXRlKGUpOworICAgIGlmIChtX3N0YXRlLmVsZW1lbnQoKSAhPSBlKSB7CisgICAgICAgIG1f
c3RhdGUuaW5pdEVsZW1lbnQoZSk7CiAgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERp
cmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKICAgICAgICAgICAgIGUtPmRvY3Vt
ZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOwpAQCAtODEx
LDM1ICs4MTYsMzIgQEAgaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdEVsZW1lbnQoRWxl
bWVudCogZSkKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRGb3JT
dHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBQc2V1ZG9J
ZCBwc2V1ZG9JRCkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5
bGVSZXNvbHZlKERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCBQc2V1ZG9JZCBwc2V1ZG9JZCwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHls
aW5nKQogewotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgc3RhdGUucHNldWRvU3R5
bGUgPSBwc2V1ZG9JRDsKKyAgICBtX3BzZXVkb1N0eWxlID0gcHNldWRvSWQ7CisgICAgbV9yZWdp
b25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsKIAogICAgIGlmIChlKSB7CiAgICAgICAg
IE5vZGVSZW5kZXJpbmdDb250ZXh0IGNvbnRleHQoZSk7Ci0gICAgICAgIHN0YXRlLnBhcmVudE5v
ZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAgICBz
dGF0ZS5wYXJlbnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNlKCkgPyAwIDoK
KyAgICAgICAgbV9wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5k
U3R5bGUoKTsKKyAgICAgICAgbV9wYXJlbnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUluaGVy
aXRhbmNlKCkgPyAwIDoKICAgICAgICAgICAgIHBhcmVudFN0eWxlID8gcGFyZW50U3R5bGUgOgot
ICAgICAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA/IHN0YXRlLnBhcmVudE5vZGUtPnJlbmRlclN0
eWxlKCkgOiAwOwotICAgICAgICBzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBj
b250ZXh0Lmluc2VydGlvblBvaW50KCk7CisgICAgICAgICAgICBtX3BhcmVudE5vZGUgPyBtX3Bh
cmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwOworICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCA9IGNvbnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBzdGF0ZS5wYXJlbnROb2RlID0gMDsKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUgPSBw
YXJlbnRTdHlsZTsKLSAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0g
ZmFsc2U7CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7CisgICAgICAgIG1fcGFyZW50U3R5bGUg
PSBwYXJlbnRTdHlsZTsKKyAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBm
YWxzZTsKICAgICB9CiAKICAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpIDogMDsKLSAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1
bWVudCgpLT5yZW5kZXJTdHlsZSgpOwotICAgIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUgPSBkb2NF
bGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBk
b2NTdHlsZTsKLQotICAgIHN0YXRlLnN0eWxlID0gMDsKLQotICAgIHN0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMuY2xlYXIoKTsKLQotICAgIHN0YXRlLnJ1bGVMaXN0ID0gMDsKKyAgICBSZW5k
ZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBtX3Jvb3RF
bGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQt
PnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKIAotICAgIHN0YXRlLmZvbnREaXJ0eSA9IGZhbHNl
OworICAgIG1fc3R5bGUgPSAwOworICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigp
OworICAgIG1fcnVsZUxpc3QgPSAwOworICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKQEAgLTkwMiwx
NiArOTA0LDE2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBpZiAoIXJ1bGVTZXQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAg
IG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIG1fc2VsZWN0b3JDaGVja2Vy
LnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOwogICAgIGludCBmaXJzdFJ1
bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZShmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOwogICAgIG1fc2VsZWN0b3JDaGVj
a2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7Ci0gICAgaWYgKG1f
c3RhdGUubWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVs
ZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0YXRlLm1hdGNo
ZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTE5LDcgKzkyMSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBIVE1MSW5wdXRFbGVt
ZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBI
VE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLmVsZW1lbnQtPnRvSW5w
dXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBz
dGF0ZS5lbGVtZW50KCktPnRvSW5wdXRFbGVtZW50KCk7CiAKICAgICBpZiAoIXRoaXNJbnB1dEVs
ZW1lbnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05
NDAsMjUgKzk0MiwyNSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmICh0aGlzSW5wdXRFbGVt
ZW50LT5pc1JlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250
cm9sKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAo
ZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRW5h
YmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVt
ZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNEZWZhdWx0
QnV0dG9uRm9yRm9ybSgpKQorICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3Jt
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jb250
YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CisgICAgaWYgKHN0YXRlLmRvY3VtZW50KCktPmNv
bnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpIHsKICAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUg
PSBlbGVtZW50LT53aWxsVmFsaWRhdGUoKTsKIAotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9
IHN0YXRlLmVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpKQorICAgICAgICBpZiAod2lsbFZhbGlkYXRl
ICE9IHN0YXRlLmVsZW1lbnQoKS0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZv
cm1Db250cm9sRWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKSkpCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzVmFsaWRGb3JtQ29udHJv
bEVsZW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzSW5SYW5nZSgpKQorICAgICAg
ICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0luUmFuZ2Uo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZWxlbWVudC0+aXNP
dXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkpCisgICAgICAgIGlm
IChlbGVtZW50LT5pc091dE9mUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzT3V0T2ZSYW5n
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTc0LDI1ICs5NzYs
MjUgQEAgc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQq
IGVsZW1lbnQpCiBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGlj
YWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0
ZSkgY29uc3QKIHsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChz
dGF0ZS5lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmli
dXRlRGF0YSgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmF0dHJpYnV0ZURhdGEoKSA9PSBz
aGFyaW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmIChzdGF0ZS5lbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6
OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVz
OjpsYW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdl
dEF0dHJpYnV0ZShsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0
dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShs
YW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc3RhdGUuZWxlbWVu
dEFmZmVjdGVkQnlDbGFzc1J1bGVzKSB7CisgICAgaWYgKCFzdGF0ZS5lbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMoKSkgewogICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3Mo
KSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFt
ZXMoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChzaGFyaW5n
Q2FuZGlkYXRlLT5oYXNDbGFzcygpKSB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgLy8gU1ZH
IGVsZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNh
dXNlICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KLSAgICAgICAg
aWYgKHN0YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3Rh
dGUuZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+
Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmlz
U1ZHRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRy
aWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUoY2xhc3NB
dHRyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAj
ZW5kaWYKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50LT5jbGFzc05hbWVzKCkgIT0gc2hh
cmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+Y2xhc3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgfQpA
QCAtMTAwMCwxMiArMTAwMiwxMiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRh
dGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRQogICAgIH0gZWxz
ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+
cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPnBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+cHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmhhc1RhZ05hbWUocHJv
Z3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50
Kj4oc3RhdGUuZWxlbWVudCktPmlzRGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1MUHJv
Z3Jlc3NFbGVtZW50Kj4oc2hhcmluZ0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICBp
ZiAoc3RhdGUuZWxlbWVudCgpLT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KHN0YXRlLmVsZW1lbnQoKSktPmlz
RGV0ZXJtaW5hdGUoKSAhPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc2hhcmlu
Z0NhbmRpZGF0ZSktPmlzRGV0ZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAjZW5kaWYKQEAgLTEwMjIsNyArMTAyNCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVu
dC0+dGFnUU5hbWUoKSkKKyAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5lbGVt
ZW50KCktPnRhZ1FOYW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVu
dC0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAzMiwyMSArMTAz
NCwyMSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHls
ZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBpZiAoZWxl
bWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudC0+aXNMaW5rKCkpCisgICAgaWYgKGVsZW1l
bnQtPmlzTGluaygpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmhv
dmVyZWQoKSkKKyAgICBpZiAoZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+
aG92ZXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2
ZSgpICE9IHN0YXRlLmVsZW1lbnQtPmFjdGl2ZSgpKQorICAgIGlmIChlbGVtZW50LT5hY3RpdmUo
KSAhPSBzdGF0ZS5lbGVtZW50KCktPmFjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5mb2N1c2VkKCkpCisg
ICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZvY3VzZWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgp
ICE9IHN0YXRlLmVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgaWYgKGVsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5zaGFkb3dQc2V1ZG9JZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNoYXJpbmdD
YW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQ
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRk
aXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5j
b250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCkBAIC0xMDYy
LDcgKzEwNjQsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgaWYgKGlzQ29udHJvbCAhPSBz
dGF0ZS5lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgIGlmIChpc0NvbnRyb2wg
IT0gc3RhdGUuZWxlbWVudCgpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRy
b2woZWxlbWVudCkpCkBAIC0xMDg2LDIwICsxMDg4LDIwIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAg
ICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVudExpbmtT
dGF0ZSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQorICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAm
JiBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCkgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIC8vIERlbnkg
c2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQgYW5kIG5vbi1XZWJWVFQgbm9kZXMuCi0gICAg
aWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQtPmlzV2ViVlRU
RWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBzdGF0ZS5l
bGVtZW50KCktPmlzV2ViVlRURWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudC0+aXNXZWJW
VFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT5pc1Bhc3ROb2RlKCkgIT0g
dG9XZWJWVFRFbGVtZW50KHN0YXRlLmVsZW1lbnQpLT5pc1Bhc3ROb2RlKCkpCisgICAgaWYgKGVs
ZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aXNXZWJWVFRFbGVt
ZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT5pc1Bhc3ROb2RlKCkgIT0gdG9XZWJW
VFRFbGVtZW50KHN0YXRlLmVsZW1lbnQoKSktPmlzUGFzdE5vZGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVs
ZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVt
ZW50KCkgfHwgc3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJr
aXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50
LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBzdGF0ZS5l
bGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVt
ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIHJldHVybiB0cnVlOwpA
QCAtMTEyMSwzNyArMTEyMywzNyBAQCBpbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZl
cjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaQogUmVuZGVyU3R5
bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKIHsKICAgICBTdGF0ZSYgc3Rh
dGUgPSBtX3N0YXRlOwotICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCB8fCAhc3RhdGUucGFy
ZW50U3R5bGUpCisgICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkgfHwgIXN0YXRlLnBhcmVu
dFN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFz
IGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCi0gICAgaWYgKHN0YXRlLnN0eWxl
ZEVsZW1lbnQtPmlubGluZVN0eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
aW5saW5lU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBp
ZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KHN0YXRlLnN0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXMoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAgICAgLy8g
SWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRz
LgotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5oYXNJRCgpICYmIG1fZmVhdHVyZXMuaWRz
SW5SdWxlcy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpLmltcGwoKSkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aGFzSUQoKSAmJiBt
X2ZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pZEZv
clN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChw
YXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudCgp
LT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoc3RhdGUuc3R5
bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICBpZiAoc3RhdGUuc3R5
bGVkRWxlbWVudCgpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5j
c3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCkt
PmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVj
dGlvbkF1dG8oc3RhdGUuZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRv
KHN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2FjaGUgd2hl
dGhlciBzdGF0ZS5lbGVtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93biBjbGFzcyBzZWxlY3Rv
cnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgbWVtYmVyIHZhcmlhYmxlLiBU
aGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiBTdHlsZVJlc29s
dmVyLgotICAgIHN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IHN0YXRlLmVsZW1l
bnQgJiYgc3RhdGUuZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1
bGVzKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSk7CisgICAgc3RhdGUuc2V0RWxlbWVudEFm
ZmVjdGVkQnlDbGFzc1J1bGVzKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmhh
c0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0ZS5lbGVtZW50KCktPmNs
YXNzTmFtZXMoKSkpOwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWly
IGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIHVuc2lnbmVkIHZpc2l0ZWRO
b2RlQ291bnQgPSAwOwogICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxlbWVudCA9IDA7Ci0gICAg
Tm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPnByZXZpb3VzU2libGluZygp
OworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXZpb3Vz
U2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CiAgICAgICAgIHNoYXJlRWxlbWVu
dCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKICAgICAg
ICAgaWYgKHNoYXJlRWxlbWVudCkKQEAgLTExNzMsNyArMTE3NSw3IEBAIFJlbmRlclN0eWxlKiBT
dHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgaWYgKHN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJh
Y2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRo
aXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KLSAgICBpZiAo
cGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50LT5wYXJlbnRFbGVtZW50
KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQo
KS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXJl
RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KQEAgLTEzOTUsOSArMTM5Nyw4IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50LCBSZW5kZXJTCiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGluaXRF
bGVtZW50KGVsZW1lbnQpOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVs
dFBhcmVudCk7Ci0gICAgc3RhdGUucmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7
Ci0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUu
ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVz
b2x2ZShkb2N1bWVudCgpLCBlbGVtZW50LCBkZWZhdWx0UGFyZW50LCBOT1BTRVVETywgcmVnaW9u
Rm9yU3R5bGluZyk7CisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmlu
ZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkpIHsKICAgICAgICAgUmVu
ZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYg
KHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwpAQCAtMTQwNSwz
MiArMTQwNiwzMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSkgewot
ICAgICAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgc3Rh
dGUuc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlLCBpc0F0U2hhZG93Qm91bmRh
cnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxl
OjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgewor
ICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgpLCBpc0F0U2hhZG93
Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRl
clN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKICAgICB9IGVsc2UgewotICAgICAgICBzdGF0
ZS5zdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKLSAgICAgICAgY2xvbmVGb3JQYXJl
bnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUuZ2V0KCkpOwotICAgICAgICBzdGF0
ZS5wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOworICAgICAgICBzdGF0ZS5zZXRT
dHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOworICAgICAgICBjbG9uZUZvclBhcmVudCA9
IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHlsZSgpKTsKKyAgICAgICAgc3RhdGUuc2V0UGFy
ZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkpOwogICAgIH0KICAgICAvLyBjb250ZW50ZWRp
dGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAtd2Via2l0LXVzZXItbW9kaWZ5KSBzaG91
bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hhZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQg
bm9kZS4KLSAgICBpZiAoc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAg
aWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAgICAgIGlmIChF
bGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAg
IGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0eWxl
KCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNo
YWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5z
dHlsZS0+c2V0SXNMaW5rKHRydWUpOwotICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdGUgPSBz
dGF0ZS5lbGVtZW50TGlua1N0YXRlOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJc0xpbmso
dHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IHN0YXRlLmVsZW1lbnRMaW5r
U3RhdGUoKTsKICAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAg
ICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9y
Y2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAg
ICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IElu
c2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRJbnNp
ZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEluc2lkZUxpbmso
bGlua1N0YXRlKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQ29sbGVjdGlvbiA9IGZhbHNlOwpA
QCAtMTQ0NywxNyArMTQ0OCwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQpOwogCiAgICAgLy8gQ2xlYW4g
dXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25n
IG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnBhcmVudFN0eWxlLCBlbGVtZW50KTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBlbGVtZW50KTsKIAotICAgIGluaXRFbGVt
ZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCi0KLSAgICBpZiAoY2xv
bmVGb3JQYXJlbnQpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0gMDsKKyAgICBzdGF0ZS5j
bGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCiAKICAgICBkb2N1bWVu
dCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBz
dHlsZS4KLSAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdGF0
ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25z
dCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkK
QEAgLTE0NjYsMTQgKzE0NjQsMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWUKICAgICBpZiAo
a2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVz
dWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VSVCghbV9zdGF0ZS5zdHls
ZSk7CisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkpOwogCiAgICAgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBzdGF0ZS5zdHlsZSA9IFJl
bmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOwotCi0gICAgc3RhdGUubGluZUhlaWdodFZh
bHVlID0gMDsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0
eWxlKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogCiAgICAgLy8gV2UgZG9u
J3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2
ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0
IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KQEAgLTE0ODUsOCArMTQ4Miw4IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVu
ZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQg
aXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAg
aWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYgKHN0YXRlLmxp
bmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhl
aWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTm93IGRvIHJlc3Qgb2Yg
dGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCkBAIC0xNTEz
LDcgKzE1MTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogCiAgICAgZG9jdW1lbnQoKS0+
ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0gICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVy
U3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTUzNyw3ICsxNTM0
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVt
ZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJh
dGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxv
Z2ljIGluIHN0eWxlRm9yRWxlbWVudAogICAgICAgICBpbml0RWxlbWVudChlKTsKLSAgICAgICAg
aW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKKyAgICAgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNv
bHZlKGRvY3VtZW50KCksIGUpOwogCiAgICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZy
YW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCkBAIC0xNTgxLDcgKzE1NzgsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUucGFyZW50U3R5bGUp
OworICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4g
MDsKIApAQCAtMTU4OSw5ICsxNTg2LDkgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWwKIAogICAg
IGluaXRFbGVtZW50KGUpOwogCi0gICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHls
ZSwgcHNldWRvKTsKLSAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAg
ICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20obV9zdGF0ZS5wYXJlbnRTdHlsZSk7CisgICAgc3Rh
dGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJlbnRTdHlsZSwgcHNldWRv
KTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIHN0YXRl
LnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CiAKICAgICAvLyBT
aW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJp
bnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAgLy8gdGhv
c2UgcnVsZXMuCkBAIC0xNjA4LDEyICsxNjA1LDEyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVs
CiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBzdGF0ZS5zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7Cisg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAKICAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHls
ZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1
cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnBh
cmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBtX3N0
YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMg
cmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CkBA
IC0xNjIxLDE1ICsxNjE4LDE1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsCiAgICAgZG9jdW1l
bnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUg
c3R5bGUuCi0gICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3Rh
dGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewotICAgIGluaXRGb3JTdHlsZVJlc29s
dmUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUg
d2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIG1fc3RhdGUuaW5pdEZvclN0
eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8v
IG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCiAK
LSAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG1fc3RhdGUu
c3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7CisgICAgbV9zdGF0
ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+
aW5oZXJpdEZyb20obV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCiAgICAgY29uc3QgYm9v
bCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0
ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKQEAgLTE2NDAsNyArMTYzNyw3IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4
KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwg
aXNGaXJzdCwgcGFnZSk7CiAgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIGF1dGhvciBS
dWxlU2V0IGZvciBAcGFnZSBydWxlcywgYXMgcGVyIHRoZSBIVE1MNSBzcGVjLgogICAgIG1hdGNo
UGFnZVJ1bGVzKHJlc3VsdCwgbV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBw
YWdlKTsKLSAgICBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgbV9zdGF0ZS5zZXRM
aW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAjaWYg
RU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJs
ZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CkBAIC0xNjUxLDggKzE2NDgsOCBAQCBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRl
eCkKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3
ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKG1fc3RhdGUu
bGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhl
aWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUpOworICAgIGlmIChtX3N0YXRlLmxpbmVIZWln
aHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwg
bV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCkBAIC0xNjYyLDIwICsxNjU5
LDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIo
KTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBtX3N0YXRlLnN0
eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVu
dCgpCiB7Ci0gICAgbV9zdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBt
X3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgLy8gTWFrZSBzdXJl
IG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20g
b3VyIHBhcmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRT
ZXR0aW5ncygpKSB7CiAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwotICAg
ICAgICBtX3N0YXRlLnN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAg
ICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAg
bV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOwogCi0gICAgcmV0dXJuIG1fc3RhdGUu
c3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOwogfQogCiBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclRleHQoVGV4dCog
dGV4dE5vZGUpCkBAIC0xOTYzLDcgKzE5NjAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVz
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQog
CiAgICAgLy8gTGV0IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhl
IHN0eWxlLgogICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRl
Lmhhc1VBQXBwZWFyYW5jZSwgbV9zdGF0ZS5ib3JkZXJEYXRhLCBtX3N0YXRlLmJhY2tncm91bmRE
YXRhLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcik7CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBl
YXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCks
IG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1s
ZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5
bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkBAIC0yMDQ2LDI2ICsyMDQzLDE2IEBA
IHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxl
KQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogewotICAgIGlmICghbV9zdGF0
ZS5mb250RGlydHkpCisgICAgaWYgKCFtX3N0YXRlLmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOwotICAgIGNoZWNrRm9yWm9vbUNoYW5nZShz
dHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9z
dGF0ZS5zdHlsZSgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9z
dGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3Rh
dGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7
Ci0gICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAg
bV9zdGF0ZS5mb250RGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjYWNo
ZUJvcmRlckFuZEJhY2tncm91bmQoKQotewotICAgIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlID0g
bV9zdGF0ZS5zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOwotICAgIGlmIChtX3N0YXRlLmhhc1VBQXBw
ZWFyYW5jZSkgewotICAgICAgICBtX3N0YXRlLmJvcmRlckRhdGEgPSBtX3N0YXRlLnN0eWxlLT5i
b3JkZXIoKTsKLSAgICAgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSA9ICptX3N0YXRlLnN0eWxl
LT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yID0g
bV9zdGF0ZS5zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgfQorICAgIHN0eWxlLT5mb250
KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAgICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxz
ZSk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQpAQCAtMjA4
MSw3ICsyMDY4LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBtX3NlbGVjdG9yQ2hl
Y2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKIAogICAgIGlu
aXRFbGVtZW50KGUpOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgMCwgcHNldWRvSWQpOwor
ICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9J
ZCk7CiAKICAgICBNYXRjaFJlc3VsdCBkdW1teTsKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBV
QUFuZFVzZXJDU1NSdWxlcykgewpAQCAtMjA5NCw1MSArMjA4MSw1MCBAQCBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVt
ZW50KiBlLCBQcwogICAgIH0KIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAm
JiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NSdWxlcykpIHsKLSAgICAgICAgbV9zdGF0ZS5z
YW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKTsK
KyAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jv
c3NPcmlnaW5DU1NSdWxlcykpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRo
b3Igc2hlZXRzLgogICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKGR1bW15LCBydWxlc1RvSW5jbHVk
ZSAmIEVtcHR5Q1NTUnVsZXMpOwogCi0gICAgICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSBm
YWxzZTsKKyAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seShmYWxzZSk7CiAgICAgfQog
CiAgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmlu
Z1N0eWxlKTsKIAotICAgIHJldHVybiBtX3N0YXRlLnJ1bGVMaXN0LnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gbV9zdGF0ZS50YWtlUnVsZUxpc3QoKTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVSZXNv
bHZlcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSkKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1bGVNYXRjaGVzKGNv
bnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvKQogewogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAg
c3RhdGUuZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogCiAgICAgaWYgKHJ1bGVEYXRhLmhhc0Zh
c3RDaGVja2FibGVTZWxlY3RvcigpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3Rv
ciBkb2VzIG5vdCBpbmNsdWRlIGFueSBwc2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIGlmIChzdGF0
ZS5wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETykKKyAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxl
KCkgIT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIFdl
IGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNoZXMg
c2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgogICAgICAgICAv
LyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sg
dGhlIG5hbWVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9y
TWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgc3RhdGUuZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChydWxlRGF0YS5oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNo
aW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ1
bGVEYXRhLnNlbGVjdG9yKCktPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlRhZyAmJiAhU2VsZWN0
b3JDaGVja2VyOjp0YWdNYXRjaGVzKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9yKCkt
PnRhZ1FOYW1lKCkpKQorICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9
PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoc3RhdGUu
ZWxlbWVudCgpLCBydWxlRGF0YS5zZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1Jp
Z2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKHN0YXRlLmVsZW1lbnQsIHJ1bGVEYXRhLnNlbGVjdG9y
KCkpKQorICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0
cmlidXRlU2VsZWN0b3Ioc3RhdGUuZWxlbWVudCgpLCBydWxlRGF0YS5zZWxlY3RvcigpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNr
ZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQpOworICAgICAg
ICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuZmFzdENoZWNrKHJ1bGVEYXRhLnNlbGVjdG9yKCks
IHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgfQogCiAgICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChydWxlRGF0YS5zZWxl
Y3RvcigpLCBzdGF0ZS5lbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJs
ZWQpOwotICAgIGNvbnRleHQuZWxlbWVudFN0eWxlID0gc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRh
LnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAg
ICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwotICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0
ZS5wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gbV9zZWxl
Y3RvckNoZWNrZXIubWF0Y2goY29udGV4dCwgc3RhdGUuZHluYW1pY1BzZXVkbywgRE9NU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWd5KCkpOworICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5w
c2V1ZG9TdHlsZSgpOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2ggbWF0Y2ggPSBtX3NlbGVj
dG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBkeW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ3koKSk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0YXRlLnBzZXVkb1N0
eWxlICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxlICE9IHN0YXRlLmR5bmFtaWNQc2V1
ZG8pCisgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlKCkgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNl
dWRvU3R5bGUoKSAhPSBkeW5hbWljUHNldWRvKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0yMTQ4LDggKzIxMzQsNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6
OmNoZWNrUmVnaW9uU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBF
bGVtZQogICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fc3RhdGUucHNldWRvU3R5bGUgPSBOT1BTRVVETzsKLQog
ICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25TZWxlY3RvcjsgczsgcyA9IENT
U1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKICAgICAgICAgaWYgKG1fc2VsZWN0b3JDaGVja2VyLm1h
dGNoZXMocywgcmVnaW9uRWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIx
NzMsNyArMjE1Nyw3IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0
aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB0ZW1wbGF0ZSA8U3R5bGVS
ZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxl
UnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0
eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQogewotICAgIEFTU0VSVCgocHJv
cGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3N0YXRl
LnJlZ2lvbkZvclN0eWxpbmcpOworICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9
IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwog
CiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQo
KTsKQEAgLTIyMTcsNyArMjIwMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsCiAgICAgICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAg
ICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxz
ZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAg
IG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gY3VycmVudC52YWx1ZSgpOworICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb3dQcmlvcml0eVByb3BlcnRpZXM6CiAgICAgICAg
ICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCkBAIC0yMjM0LDE4ICsy
MjE4LDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wKICAgICAgICAgcmV0dXJuOwogCiAgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoc3RhdGUuc3R5bGUtPmluc2lkZUxpbmso
KSAhPSBOb3RJbnNpZGVMaW5rKSB7CisgICAgaWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmso
KSAhPSBOb3RJbnNpZGVMaW5rKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBp
IDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVz
JiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwog
ICAgICAgICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxp
bmtNYXRjaFR5cGU7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8g
cGFzcyB0aGVzZSBhcyBhcmd1bWVudHMgYnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55
IHBsYWNlcy4KLSAgICAgICAgICAgIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9
IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKLSAgICAgICAgICAg
IHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYg
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CisgICAgICAgICAgICBzdGF0ZS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsK
IAogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnBy
b3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQs
IGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hl
ZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IHRydWU7Ci0gICAgICAgIHN0YXRlLmFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7CkBAIC0yMzYx
LDE1ICsyMzQ1LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGll
cyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIFdlIGNh
biBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRpZXMg
ZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFjdAog
ICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFwcGx5
IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2FuIGRl
cGVuZCBvbiB0aGUgCiAgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0IGFu
ZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgotICAg
ICAgICBzdGF0ZS5zdHlsZS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJT
dHlsZS5nZXQoKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZS0+aW5oZXJpdGVkRGF0
YVNoYXJlZChjYWNoZUl0ZW0tPnBhcmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRv
d0JvdW5kYXJ5KGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVz
ID0gc3RhdGUuc3R5bGUtPmluc2lkZUxpbmsoKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y29w
eU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAg
IGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNhY2hlSXRlbS0+
cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkp
IHsKKyAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdGF0ZS5zdHlsZSgpLT5p
bnNpZGVMaW5rKCk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQgc3R5
bGUgaGFzIGlkZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBwYXJl
bnQgc3R5bGUgdGhlbiB0aGUKICAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxsIGJl
IGlkZW50aWNhbCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIgZnJv
bSB0aGUgY2FjaGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVy
aXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+aW5oZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CiAKICAg
ICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlr
ZSBhbiBpbmhlcml0ZWQgcHJvcGVydHkuIFdlIG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0
LgotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9
IHRydWU7IApAQCAtMjM4NywxNCArMjM3MSwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAog
ICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVy
dGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBp
cyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBv
cnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGlt
cG9ydGFudC4KLSAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIHN0YXRlLnNldExp
bmVIZWlnaHRWYWx1ZSgwKTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUs
IGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJp
b3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZp
cnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKIAotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlLT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAg
c3RhdGUuZm9udERpcnR5ID0gdHJ1ZTsKKyAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+
cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpIHsKKyAgICAgICAgc3RhdGUuc2V0Rm9udERpcnR5KHRydWUpOwogICAgICAgICBhcHBs
eUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKICAgICB9CiAKQEAgLTI0MDIsMTggKzIzODYsMTggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5l
LWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNp
emUuCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7CisgICAgaWYg
KHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTWFueSBw
cm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5
IGFsbCBwcm9wZXJ0aWVzLgotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
KQorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFw
cGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogCiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJp
b3JpdHkgVUEgcHJvcGVydGllcy4KICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9y
aXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9u
bHkpOwogICAgIAogICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhh
dCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgotICAgIGNhY2hlQm9yZGVyQW5kQmFja2dyb3Vu
ZCgpOworICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAgIAogICAgIC8v
IE5vdyBkbyB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFu
ZCBhbGwgdGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CkBAIC0yNDI0LDEzICsyNDA4LDEzIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAgICAg
Ci0gICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkpOworICAgIEFTU0VSVCghc3RhdGUuZm9udERp
cnR5KCkpOwogICAgIAogICAgIGlmIChjYWNoZUl0ZW0gfHwgIWNhY2hlSGFzaCkKICAgICAgICAg
cmV0dXJuOwotICAgIGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3Rh
dGUuZWxlbWVudCwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlKSkKKyAgICBp
ZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLmVsZW1lbnQoKSwg
c3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBh
cmVudFN0eWxlLCBjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKKyAgICBhZGRUb01hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgY2FjaGVIYXNo
LCBtYXRjaFJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVz
KGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikKQEAgLTI0
OTUsNyArMjQ3OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0
KFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywKIGJvb2wgU3R5bGVSZXNvbHZl
cjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAogewogICAgIGJvb2wgaXNGaXJzdFBh
Z2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICBpZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRy
dWU7CiAKICAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkp
ICUgMjsKQEAgLTI1MTYsOCArMjUwMCw4IEBAIFN0cmluZyBTdHlsZVJlc29sdmVyOjpwYWdlTmFt
ZShpbnQgLyogcGFnZUluZGV4ICovKSBjb25zdAogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKICAgICBpbml0RWxlbWVudCgwKTsKLSAgICBpbml0Rm9yU3R5bGVSZXNv
bHZlKDAsIHN0eWxlKTsKLSAgICBtX3N0YXRlLnN0eWxlID0gc3R5bGU7CisgICAgbV9zdGF0ZS5p
bml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIDAsIHN0eWxlKTsKKyAgICBtX3N0YXRlLnNl
dFN0eWxlKHN0eWxlKTsKICAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVl
KTsKIH0KIApAQCAtMjYyOSw3ICsyNjEzLDcgQEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6
aXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKIC8vIHByb3BlcnRpZXMg
dGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVu
dCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgogYm9vbCBTdHlsZVJlc29sdmVyOjp1
c2VTVkdab29tUnVsZXMoKQogewotICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQgJiYgbV9zdGF0
ZS5lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCkg
JiYgbV9zdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpOwogfQogCiBzdGF0aWMgYm9vbCBj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwg
Y29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgp
CkBAIC0yNjQ0LDcgKzI2MjgsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRo
KENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUt
PmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNp
b24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRl
LnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBzdGF0ZS5zdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRU
b0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3
cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTI3NTAsNyArMjczNCw3IEBAIHN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVm
ZXJlbmNlKENTU1ZhbHVlKiB2YWx1ZSkKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFy
aWFibGVzKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFp
cjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAgc3Rk
OjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlh
bGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZS0+dmFyaWFibGVzKCkpKTsKKyAg
ICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+
c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRlLnN0eWxlKCktPnZhcmlhYmxlcygp
KSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkKICAg
ICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAgLTI3ODMsMTkgKzI3NjcsMTkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICNlbmRpZgogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBi
b29sIGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFs
dWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICgh
c3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICBib29s
IGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFz
dGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CiAKICAgICBB
U1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRp
YWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKLSAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAo
c3RhdGUucGFyZW50Tm9kZSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSkpOyAvLyBpc0luaGVyaXQgLT4g
KHN0YXRlLnBhcmVudE5vZGUgJiYgc3RhdGUucGFyZW50U3R5bGUpCisgICAgQVNTRVJUKCFpc0lu
aGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IC8v
IGlzSW5oZXJpdCAtPiAoc3RhdGUucGFyZW50Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkp
CiAKLSAgICBpZiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSAmJiAoIXN0YXRl
LmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1By
b3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIHx8ICFpc1Zh
bGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9w
ZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2
aXNpdGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlzSW5oZXJpdCAmJiAh
c3RhdGUucGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYg
IUNTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFy
ZW50U3R5bGUtPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgaWYg
KGlzSW5oZXJpdCAmJiAhc3RhdGUucGFyZW50U3R5bGUoKS0+aGFzRXhwbGljaXRseUluaGVyaXRl
ZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQor
ICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJv
cGVydGllcygpOwogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VmFyaWFibGUpIHsKQEAgLTI4MDMsNyArMjc4Nyw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIENTU1ZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Q1NTVmFyaWFi
bGVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+bmFtZSgpLmlzRW1w
dHkoKSk7CiAgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnZhbHVlKCkuaXNFbXB0eSgpKTsKLSAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxl
LT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VmFyaWFibGUodmFyaWFibGUt
Pm5hbWUoKSwgdmFyaWFibGUtPnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCkBAIC0yODIyLDcgKzI4MDYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsKIAotICAgIGZsb2F0IHpvb21G
YWN0b3IgPSBzdGF0ZS5zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICAvLyBXaGF0IGZvbGxv
d3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3Jy
ZXNwb25kaW5nIGZyb250LWVuZAogICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4gU2hvcnRoYW5k
cyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3ZWxsIGFu
ZApAQCAtMjgzNiw3ICsyODIwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIC8vIG5vdGUg
aXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRvIGJlIHN1cHBv
cnRlZC4KIAogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5jbGVhckNvbnRlbnQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKQEAgLTI4NDgsMTkgKzI4MzIsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBD
U1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJ
bWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlz
R3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRp
ZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkp
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29u
dGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRW
YWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRp
ZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0
aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0p
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1h
Z2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250
ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0
PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVl
Kj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTI4NzEsMTcgKzI4NTUsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKIAogICAgICAgICAgICAgICAgIGlmIChjb250ZW50
VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFs
dWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAg
ICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVl
LT5pc0F0dHIoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNw
YWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGUuc3R5bGUtPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUtPnNldFVu
aXF1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0
VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRv
bSwgY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlk
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0
YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFs
dWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1
dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUKICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJl
cy5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKQEAgLTI4OTIsMjQg
KzI4NzYsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RTdHls
ZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RTdHls
ZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQgLSBDU1NW
YWx1ZURpc2MpOwogICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRlbnQ+IGNv
dW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5pZGVudGlm
aWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCks
IGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQo
Y291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChjb250ZW50VmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoQ0xPU0VfUVVPVEUs
IGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RFLCBk
aWRTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
Tm9DbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENv
bnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjkxOSwxNiArMjkwMywx
NiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmICghZGlkU2V0KQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckNv
bnRlbnQoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90
ZXM6CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUtPnF1b3RlcygpKTsKKyAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFF1b3RlcyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5xdW90ZXMoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAg
ICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFF1b3RlcygwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAgLTI5NDYsMTkgKzI5MzAsMTkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAg
ICAgICAgICAgcXVvdGVzLT5hZGRQYWlyKHN0ZDo6bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1
b3RlKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0UXVvdGVz
KHF1b3Rlcyk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMocXVvdGVzKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFF1b3RlcyhRdW90ZXNE
YXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVz
KFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKICAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmdz
IGFuZCBpZHMKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3Jp
cHRpb24gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShwYXJlbnRGb250RGVzY3JpcHRpb24uZ2VuZXJpY0Zh
bWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250
KCkpOwpAQCAtMjk2OCw3ICsyOTUyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBpZiAoaXNJ
bml0aWFsKSB7CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gaW5pdGlhbERlc2MgPSBGb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50
IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlCiAgICAgICAgICAg
ICAvLyB0byBub24tbW9ub3NwYWNlLgogICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5r
ZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCkBA
IC0yOTgyLDcgKzI5NjYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIGlmICghdmFsdWUtPmlz
VmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgRm9udEZhbWlseSYgZmlyc3RGYW1pbHkgPSBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKICAgICAgICAgRm9udEZhbWlseSogY3VyckZhbWlseSA9
IDA7CiAKQEAgLTMwNjAsMjQgKzMwNDQsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIC8vIHNob3J0aGFuZCBw
cm9wZXJ0aWVzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6CiAgICAgICAgIGlmIChp
c0luaXRpYWwpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckJhY2tncm91bmRMYXll
cnMoKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3Io
KSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckJhY2tncm91bmRMYXllcnMoKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5pbmhlcml0QmFja2dyb3VuZExheWVycygqc3RhdGUucGFyZW50U3R5bGUtPmJhY2tncm91bmRM
YXllcnMoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKHN0
YXRlLnBhcmVudFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5pbmhlcml0QmFja2dyb3VuZExheWVycygqc3RhdGUucGFyZW50U3R5bGUoKS0+YmFj
a2dyb3VuZExheWVycygpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJhY2tncm91
bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOgogICAg
ICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmNsZWFyTWFza0xh
eWVycygpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJNYXNrTGF5ZXJzKCk7CiAg
ICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5pbmhl
cml0TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUtPm1hc2tMYXllcnMoKSk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0TWFza0xheWVycygqc3RhdGUucGFyZW50U3R5bGUo
KS0+bWFza0xheWVycygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250OgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5
bGUtPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUgPSAwOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRM
aW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwog
ICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CiAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudFNldHRpbmdzKCk7CkBAIC0zMDg2LDggKzMwNzAsOCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUo
c2V0dGluZ3MpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAK
ICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgICAgICAg
ICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCksIGZvbnREZXNjcmlwdGlvbik7CkBAIC0zMTAzLDcgKzMwODcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9u
dChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1
dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFj
dG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUuZ2V0
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygp
KSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkp
IHsKQEAgLTMxMjEsNyArMzEwNSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICB1cGRhdGVG
b250KCk7CiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGZv
bnQtPnNpemUuZ2V0KCkpOwogCi0gICAgICAgICAgICBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSBm
b250LT5saW5lSGVpZ2h0LmdldCgpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZh
bHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOwogCiAgICAgICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQpA
QCAtMzEzMywxMSArMzExNywxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3c6IHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAg
aWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGUuc3R5bGUtPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50U3R5bGUtPnRleHRTaGFkb3co
KSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+dGV4dFNoYWRv
dygpKSkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZS0+c2V0Qm94
U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFk
b3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBh
cmVudFN0eWxlKCktPnRleHRTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0
ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5i
b3hTaGFkb3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5ib3hTaGFkb3coKSkpIDogbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5p
dGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJl
dHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBzdGF0ZS5zdHlsZS0+c2V0VGV4dFNo
YWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAg
ICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5bGUo
KS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhu
dWxscHRyKTsKIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzE0NywyOSArMzEzMSwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93
VmFsdWUqPihjdXJyVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpv
b21GYWN0b3IpOwotICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
OwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0
ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6
b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+c3ByZWFkID8g
aXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCB4ID0g
aXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+
Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0t
PnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOwogICAgICAgICAgICAg
U2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLT5zdHlsZSAmJiBpdGVtLT5zdHlsZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3JtYWw7CiAgICAgICAgICAgICBD
b2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKICAgICAgICAgICAgICAg
ICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKQotICAgICAgICAgICAgICAgIGNvbG9yID0g
c3RhdGUuc3R5bGUtPmNvbG9yKCk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgp
KQorICAgICAgICAgICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIAogICAg
ICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hh
ZG93RGF0YShJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0g
Q1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29s
b3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0
U2hhZG93KQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUZXh0U2hhZG93KHNoYWRv
d0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBp
cyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRo
ZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3co
c2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0
aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7CiAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxlY3QsIEJveFJlZmxlY3QpCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJveFJl
ZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3Qo
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzE4MCwxMyArMzE2NCwx
MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0
aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKICAgICAgICAgcmVmbGVjdGlvbi0+c2V0
RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKICAgICAgICAgaWYgKHJlZmxl
Y3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVm
bGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHls
ZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3RvcikpOworICAgICAgICAg
ICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRU
b0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxj
dWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCB6b29tRmFjdG9yKSk7CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1h
c2suc2V0TWFza0RlZmF1bHRzKCk7CiAgICAgICAgIG1fc3R5bGVNYXAubWFwTmluZVBpZWNlSW1h
Z2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKICAgICAgICAgcmVmbGVjdGlvbi0+
c2V0TWFzayhtYXNrKTsKIAotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94UmVmbGVjdChyZWZs
ZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3Qo
cmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVzLgpAQCAtMzE5
NSwyOSArMzE3OSwyOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAg
ICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50U3R5
bGUtPmNvbHVtblJ1bGVDb2xvcigpLmlzVmFsaWQoKSA/IHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1
bW5SdWxlQ29sb3IoKSA6IHN0YXRlLnBhcmVudFN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgICAg
IHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5SdWxlU3R5bGUoc3RhdGUucGFyZW50U3R5bGUtPmNvbHVt
blJ1bGVTdHlsZSgpKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb2x1bW5SdWxlV2lk
dGgoc3RhdGUucGFyZW50U3R5bGUtPmNvbHVtblJ1bGVXaWR0aCgpKTsKKyAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1
bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxl
Q29sb3IoKSA6IHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbG9yKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVudFN0eWxlKCktPmNvbHVt
blJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVX
aWR0aChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2x1bW5SdWxlV2lkdGgoKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnJlc2V0Q29sdW1u
UnVsZSgpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+cmVzZXRDb2x1bW5SdWxlKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKICAgICAg
ICAgaWYgKCFpc0luaGVyaXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRNYXJxdWVlRGlyZWN0aW9uKHN0YXRlLnBhcmVudFN0eWxlLT5tYXJxdWVlRGlyZWN0
aW9uKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChzdGF0ZS5w
YXJlbnRTdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNl
dE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZVNwZWVkKCkpOwotICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChzdGF0ZS5wYXJlbnRTdHlsZS0+bWFy
cXVlZUxvb3BDb3VudCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVCZWhhdmlv
cihzdGF0ZS5wYXJlbnRTdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRNYXJxdWVlRGlyZWN0aW9uKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVE
aXJlY3Rpb24oKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQo
c3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUluY3JlbWVudCgpKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVTcGVl
ZCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5tYXJxdWVlTG9vcENvdW50KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRNYXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUJlaGF2aW9y
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVS
ZXBldGl0aW9uOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVM
b29wQ291bnQsIE1hcnF1ZWVMb29wQ291bnQpCiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1h
cnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyByZXBlYXQgZm9yZXZlci4KKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyBy
ZXBlYXQgZm9yZXZlci4KICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRp
dmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRN
YXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOiB7
CkBAIC0zMjI3LDE5ICszMjExLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmIChpbnQgaWRl
bnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChp
ZGVudCkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6Ci0gICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4KKyAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMu
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFs
OgotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4
NW1zZWMuIFRoZSBXaW5JRSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKDEwKTsgLy8gMTBtc2VjLiBT
dXBlciBmYXN0LgorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVl
ZCgxMCk7IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkp
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwor
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwog
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9s
bGFtb3VudCBzdXBwb3J0LgotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVl
ZChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5j
cmVtZW50OiB7CkBAIC0zMjQ5LDE5ICszMjMzLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxs
OgotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0
aCgxLCBGaXhlZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TWFycXVlZUluY3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsg
Ly8gNnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCg2LCBGaXhlZCkpOyAvLyA2cHguIFRoZSBXaW5J
RSBkZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxhcmdlOgotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVt
ZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgzNiwgRml4ZWQpKTsgLy8gMzZweC4K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gY29udmVydFRvSW50TGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7
CisgICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRUb0ludExlbmd0aChw
cmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
ICAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFycXVl
ZUxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyNzAsMTEg
KzMyNTQsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMb2NhbGUobnVs
bEF0b20pOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKG51bGxBdG9tKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExvY2FsZShwcmltaXRp
dmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlv
bihzdGF0ZS5zdHlsZS0+bG9jYWxlKCkpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dExvY2FsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENv
ZGVGb3JGb250U2VsZWN0aW9uKHN0YXRlLnN0eWxlKCktPmxvY2FsZSgpKSk7CiAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzI5Myw3ICszMjc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25l
KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJT
dHlsZTo6bm9uZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXREYXNoYm9hcmRSZWdpb25zKFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zMzAzLDEwICszMjg3LDEw
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBmaXJzdCA9IHJlZ2lv
bjsKICAgICAgICAgd2hpbGUgKHJlZ2lvbikgewotICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9J
bnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50TGVu
Z3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJl
Z2lvbi0+bGVmdCgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSk7
CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9w
KCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAg
ICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgpLCBzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3Ro
IGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQg
PSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSk7CiAKICAgICAgICAgICAgIGlmICh0b3AuaXNVbmRlZmluZWQo
KSkKICAgICAgICAgICAgICAgICB0b3AgPSBMZW5ndGgoKTsKQEAgLTMzMTgsMTMgKzMzMDIsMTMg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBsZWZ0ID0gTGVuZ3RoKCk7CiAKICAgICAg
ICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6Q2lyY2xlLCByZWdp
b24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0ID8g
ZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9h
cmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0
b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7
CiAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUpCi0gICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lv
bjo6UmVjdGFuZ2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwg
cmVnaW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3Rhbmds
ZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBm
aXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICByZWdpb24gPSByZWdpb24tPm1fbmV4
dC5nZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkt
PnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLmRvY3VtZW50KCkt
PnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTMzMzMsOCArMzMxNyw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFwcFJlZ2lvbjogewogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUu
c3R5bGUtPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5v
RHJhZyk7Ci0gICAgICAgIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRl
ZFJlZ2lvbnModHJ1ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERyYWdnYWJsZVJlZ2lv
bk1vZGUocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVEcmFnID8gRHJhZ2dh
YmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJhZyk7CisgICAgICAgIHN0YXRlLmRv
Y3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYKQEAgLTMzNTAsMjEgKzMzMzQsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgICAgICByZXN1bHQgKj0gMzsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICAgICAgcmVzdWx0
ICo9IDU7Ci0gICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVz
dWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0
YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAg
ICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB3aWR0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewog
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7
CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRl
VHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VHJhbnNm
b3JtKG9wZXJhdGlvbnMpOworICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVl
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOwor
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7
CkBAIC0zMzc0LDM0ICszMzU4LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9u
ZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFBlcnNwZWN0aXZlKDApOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVyc3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgICAgICBwZXJzcGVjdGl2
ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxl
LmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAg
IC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2YWx1ZWxlc3MgbnVtYmVycyBh
cyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVW
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAocGVyc3Bl
Y3RpdmVWYWx1ZSA+PSAwLjBmKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFBlcnNwZWN0
aXZlKHBlcnNwZWN0aXZlVmFsdWUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVy
c3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkK
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPmNsZWFyQW5pbWF0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0lu
aGVyaXQpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUu
cGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5p
bmhlcml0QW5pbWF0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5hbmltYXRpb25zKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAg
ICAgIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJUcmFuc2l0
aW9ucygpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJUcmFuc2l0aW9ucygpOwog
ICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5o
ZXJpdFRyYW5zaXRpb25zKHN0YXRlLnBhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHls
ZSgpLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7CkBA
IC0zNDEwLDcgKzMzOTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUp
OwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzQxOSw3ICszNDAzLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodXNlVG91Y2hPdmVyZmxvd1Njcm9sbGlu
ZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFs
dWUpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVzZVRvdWNo
T3ZlcmZsb3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVU
b3VjaCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxp
bmcocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUb3VjaCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM0NjIsNyArMzQ0Niw3IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0aDoKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKICAgICB7Ci0gICAgICAgIENTU1Byb3Bl
cnR5SUQgbmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHko
aWQsIHN0YXRlLnN0eWxlLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5bGUtPndyaXRpbmdNb2RlKCkp
OworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJl
Y3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUu
c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7CiAg
ICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7CiAgICAgfQpAQCAtMzQ5
Nyw4ICszNDgxLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpw
cmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2Rp
ZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCi0gICAgICAgIGlmIChzdGF0
ZS5lbGVtZW50ICYmIHN0YXRlLmVsZW1lbnQgPT0gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgp
LT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOworICAgICAgICBpZiAo
c3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldFdyaXRp
bmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM1MTQsNyArMzQ5OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExpbmVCb3hDb250YWluOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKGxpbmVCb3hDb250YWluLCBMaW5lQm94Q29udGFpbikKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkgewot
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250YWlu
Tm9uZSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihMaW5l
Qm94Q29udGFpbk5vbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1
MjIsMjEgKzM1MDYsMjEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgc3RhdGUuc3R5
bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVl
LT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENTUyBGb250cyBN
b2R1bGUgTGV2ZWwgMwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250RmVhdHVyZVNldHRp
bmdzOiB7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0
aW9uKHN0YXRlLnN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRp
bmdzKCkpOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKHN0YXRlLnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGluZ3MoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWUpOwogICAgICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGlu
Z3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUoKTsKICAgICAgICAgaW50IGxlbiA9IGxp
c3QtPmxlbmd0aCgpOwpAQCAtMzU1Niw4ICszNTQwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGZpbHRlciwgRmlsdGVyKTsKICAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRp
b25zOwotICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5
bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpKQotICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldEZpbHRlcihvcGVyYXRpb25zKTsKKyAgICAgICAgaWYgKGNyZWF0
ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRGaWx0
ZXIob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM1NjUs
MTQgKzM1NDksMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+
IHRyYWNrU2l6ZXM7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJh
Y2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHls
ZS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93czogewogICAgICAgICBWZWN0b3I8R3JpZFRyYWNr
U2l6ZT4gdHJhY2tTaXplczsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVl
LCB0cmFja1NpemVzLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1
ODAsMTQgKzM1NjQsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgR3JpZFBvc2l0aW9uIGNvbHVt
bjsKICAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNvbHVtbikpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRHcmlkSXRlbUNvbHVtbihj
b2x1bW4pOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbUNvbHVtbihjb2x1bW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlk
Um93OiB7CiAgICAgICAgIEdyaWRQb3NpdGlvbiByb3c7CiAgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFBvc2l0aW9uKHZhbHVlLCByb3cpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0
ZS5zdHlsZS0+c2V0R3JpZEl0ZW1Sb3cocm93KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
R3JpZEl0ZW1Sb3cocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBUaGVzZSBw
cm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJs
ZS4KQEAgLTM5MDksMTQgKzM4OTMsMTQgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm8KIHsKICAg
ICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uo
KTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAg
ICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7
CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZh
bHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRp
ZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJv
cGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gU3R5bGVQZW5k
aW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUodmFsdWUpOwpAQCAtMzkyNyw3ICszOTExLDcgQEAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXIKIHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2Fj
aGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdl
LT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRp
ZXMuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJv
cGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNl
KCk7CiB9CiAjZW5kaWYKQEAgLTM5MzYsMTMgKzM5MjAsMTMgQEAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm8KIHsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQ
ZW5kaW5nSW1hZ2UoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRp
bmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHBy
b3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygp
LnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpCiB7Ci0gICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZS5nZXQoKTsKKyAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CiAKICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMTQsMTUgKzM5OTgsMTUgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICB9CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFs
dWVYeFNtYWxsICsgMSk7CiAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6
ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAgbV9z
dGF0ZS5zdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7Ci0gICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIG1fc3RhdGUuc3R5bGUo
KS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
bV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgp
LCBtX3N0YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
c2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3Rh
dGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNW
R1pvb21SdWxlcygpKSk7CiB9CiAKIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pv
b21SdWxlcykKQEAgLTQyMzEsMTUgKzQyMTUsMTUgQEAgQ29sb3IgU3R5bGVSZXNvbHZlcjo6Y29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIGZvclYK
ICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRUZXh0OgotICAgICAgICByZXR1cm4gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+dGV4
dENvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsK
ICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVt
ZW50LT5pc0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5lbGVtZW50LT5kb2N1bWVu
dCgpLT52aXNpdGVkTGlua0NvbG9yKCkgOiBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5saW5r
Q29sb3IoKTsKKyAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZv
clZpc2l0ZWRMaW5rKSA/IHN0YXRlLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IHN0
YXRlLmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwogICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3Rp
dmVsaW5rOgotICAgICAgICByZXR1cm4gc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+YWN0aXZl
TGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiBzdGF0ZS5kb2N1bWVudCgpLT5hY3RpdmVMaW5r
Q29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3I6CiAgICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IoKTsKICAgICBjYXNlIENTU1ZhbHVl
Q3VycmVudGNvbG9yOgotICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUtPmNvbG9yKCk7CisgICAg
ICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKICAgICB9CkBAIC00NTc0LDE3ICs0NTU4
LDE3IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0
aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQ
ZW5kaW5nU1ZHRG9jdW1lbnRzKCkKIHsKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IGlmICghc3RhdGUuc3R5bGUtPmhhc0ZpbHRlcigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVu
dHMuaXNFbXB0eSgpKQorICAgIGlmICghc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgc3Rh
dGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlLT5t
dXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJh
dGlvbnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRl
ck9wZXJhdGlvbnMuYXQoaSk7CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJh
dGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewogICAgICAgICAgICAg
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwogCi0gICAg
ICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IHN0YXRlLnBlbmRpbmdT
VkdEb2N1bWVudHMuZ2V0KHJlZmVyZW5jZUZpbHRlcikuZ2V0KCk7CisgICAgICAgICAgICBXZWJL
aXRDU1NTVkdEb2N1bWVudFZhbHVlKiB2YWx1ZSA9IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMo
KS5nZXQocmVmZXJlbmNlRmlsdGVyKS5nZXQoKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCog
Y2FjaGVkRG9jdW1lbnQgPSB2YWx1ZS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CkBAIC00
NTk1LDcgKzQ1NzksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1l
bnRzKCkKICAgICAgICAgICAgIHJlZmVyZW5jZUZpbHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERv
Y3VtZW50KSkpOwogICAgICAgICB9CiAgICAgfQotICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVu
dHMuY2xlYXIoKTsKKyAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKIH0K
ICNlbmRpZgogCkBAIC00NjExLDE4ICs0NTk1LDE4IEBAIFN0eWxlU2hhZGVyKiBTdHlsZVJlc29s
dmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJW
CiB7CiAgICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFk
ZXIoKTsKICAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCi0gICAg
ICAgIG1fc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMgPSB0cnVlOworICAgICAgICBtX3N0YXRlLnNl
dEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOwogICAgIHJldHVybiBzaGFkZXI7CiB9CiAKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUu
c3R5bGUtPmhhc0ZpbHRlcigpIHx8ICFtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKQorICAgIGlm
ICghbV9zdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hh
ZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJl
c291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0g
ICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBt
X3N0YXRlLnN0eWxlLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOworICAgIFZlY3RvcjxS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5zdHls
ZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7
CiAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0
ZXJPcGVyYXRpb246OkNVU1RPTSkgewpAQCAtNDYzOSw3ICs0NjIzLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotICAgIG1fc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKKyAgICBtX3N0YXRl
LnNldEhhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgc29ydFBhcmFt
ZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+
JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKQEAgLTQ2ODEsNyAr
NDY2NSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVy
OjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVy
VHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0
YXRlLnN0eWxlLmdldCgpLCBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUsIG9wZXJhdGlvbnMpOwor
ICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0YXRlLnN0eWxlKCksIG1f
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJh
bWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBh
cmFtZXRlci5yZWxlYXNlKCk7CiB9CkBAIC00OTMxLDEyICs0OTE1LDEyIEBAIGJvb2wgU3R5bGVS
ZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFdl
YktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1
cmwgPSBtX3N0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50
VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5kb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CiAKICAgICAgICAgICAgIFJl
ZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCB1cmwuZnJhZ21lbnRJ
ZGVudGlmaWVyKCksIG9wZXJhdGlvblR5cGUpOwotICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVy
ZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgbV9z
dGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVy
ZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgbV9z
dGF0ZS5kb2N1bWVudCgpKSkgewogICAgICAgICAgICAgICAgIGlmICghc3ZnRG9jdW1lbnRWYWx1
ZS0+bG9hZFJlcXVlc3RlZCgpKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdT
VkdEb2N1bWVudHMuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRp
b24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2
Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3Vt
ZW50KCkpKSk7CiAgICAgICAgICAgICB9CkBAIC01MDQwLDcgKzUwMjQsNyBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRl
clN0eWxlKiBzdHlsZQogCiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkKIHsKLSAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmVsZW1l
bnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1
ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2Ut
PmNzc0ltYWdlVmFsdWUoKTsKQEAgLTUwNzAsMjMgKzUwNTQsMjMgQEAgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdl
KiBwZW5kaW4KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiB7Ci0g
ICAgaWYgKG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgaWYg
KG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlz
IGVuZCA9IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcy5lbmQoKS5rZXlzKCk7Ci0gICAg
Zm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5
cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQoKS5rZXlzKCk7Cisg
ICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQg
PSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5iZWdpbigpLmtleXMoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgY3VycmVudFByb3BlcnR5ID0gKml0
OwogCiAgICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBi
YWNrZ3JvdW5kTGF5ZXIgPSBtX3N0YXRlLnN0eWxlLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7
IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0
KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0
YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBi
YWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFn
ZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQogICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5
ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDog
ewotICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0
PENvbnRlbnREYXRhKj4obV9zdGF0ZS5zdHlsZS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRh
OyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAo
Q29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3Rh
dGUuc3R5bGUoKS0+Y29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNv
bnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlz
SW1hZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRp
Y19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkgewpAQCAtNTA5OSw3ICs1
MDgzLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7
Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IG1fc3RhdGUuc3R5bGUt
PmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBt
X3N0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdl
KCkpIHsKQEAgLTUxMTEsMTcgKzUwOTUsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ0ltYWdlcygpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0
eWxlLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZS0+c2V0TGlz
dFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KG1fc3RhdGUuc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBpZiAo
bV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+bGlz
dFN0eWxlSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCktPmlz
UGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZS0+c2V0Qm9yZGVy
SW1hZ2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFn
ZSo+KG1fc3RhdGUuc3R5bGUtPmJvcmRlckltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBp
ZiAobV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUo
KS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnN0eWxlKCktPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPmJvcmRlcklt
YWdlU291cmNlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICAgICAgaWYgKFN0eWxl
UmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUuc3R5bGUtPmJveFJlZmxlY3QoKSkgewor
ICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUuc3R5
bGUoKS0+Ym94UmVmbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1h
Z2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKICAgICAgICAgICAgICAgICBpZiAo
bWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0g
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFn
ZS5pbWFnZSgpKSk7CkBAIC01MTMxLDEyICs1MTE1LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAg
ICAgaWYgKG1fc3RhdGUuc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5
bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3R5bGUtPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZS0+bWFza0JveElt
YWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TWFz
a0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3Rh
dGUuc3R5bGUtPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNr
TGF5ZXItPm5leHQoKSkgeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9
IG1fc3RhdGUuc3R5bGUoKS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXll
ciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+
aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKICAgICAgICAg
ICAgIH0KQEAgLTUxNDcsNyArNTEzMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdJbWFnZXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
Y2xlYXIoKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA4NGMzY2QxZmMwMzdkYWIwZGZkNzVh
OGZmZDdkOGI5YTVjNDk3M2Y4Li4wNjFhNTE4YzhiYThhMDZmZjY0MDNhYTllN2I0NTE3ZmE5MWM2
ZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTE2NCwyMCArMTY0LDEyIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckRv
Y3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9IDApOwogCi0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHlsZS5nZXQoKTsgfQotICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5
bGU7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZTsgfQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQ7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0eWxlKCk7IH0KKyAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBSZW5k
ZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpOyB9CisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZWxlbWVudCgpOyB9CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kb2N1bWVudDsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKCkgeyByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIHBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24o
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5mb250RGly
dHkgfD0gc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KLSAg
ICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5z
ZXRab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0
ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQg
c2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxlKCkt
PnNldFRleHRTaXplQWRqdXN0KGIpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0
T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuZm9udERpcnR5IHw9IHN0eWxl
KCktPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9Ci0gICAgYm9vbCBoYXNQ
YXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlOyB9CisgICAgYm9v
bCBoYXNQYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlKCk7IH0K
IAogICAgIHZvaWQgcmVzZXRBdXRob3JTdHlsZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5
bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiYpOwpAQCAtMjAxLDcgKzE5Myw2IEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAK
LSAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwogICAgIHZvaWQgaW5pdEVsZW1lbnQo
RWxlbWVudCopOwogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUq
IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CkBAIC0zMDksOCArMzAwLDYgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVs
ZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX3N0YXRlLm1hdGNoZWRSdWxlcy5hcHBlbmQocnVs
ZSk7IH0KLQogICAgIHN0cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RS
dWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQogICAgICAgICBpbnQm
IGZpcnN0UnVsZUluZGV4OwpAQCAtMzgyLDcgKzM3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
b3J0TWF0Y2hlZFJ1bGVzKCk7CiAgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
TWF0Y2hSZXN1bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBydWxlTWF0Y2hlcyhjb25zdCBS
dWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYpOwogICAgIGJv
b2wgY2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3Is
IEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGll
cyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKICAgICBlbnVtIFN0eWxlQXBw
bGljYXRpb25QYXNzIHsKQEAgLTQzMiw3MiArNDIxLDE2NSBAQCBwdWJsaWM6CiAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0YXRlKCkK
LSAgICAgICAgOiBlbGVtZW50KDApCi0gICAgICAgICwgc3R5bGVkRWxlbWVudCgwKQotICAgICAg
ICAsIHBhcmVudE5vZGUoMCkKLSAgICAgICAgLCBwYXJlbnRTdHlsZSgwKQotICAgICAgICAsIHJv
b3RFbGVtZW50U3R5bGUoMCkKLSAgICAgICAgLCByZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgICAg
ICwgc2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VVRE8p
Ci0gICAgICAgICwgZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICAgICAsIGRp
c3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKLSAgICAgICAgLCBlbGVtZW50QWZmZWN0
ZWRCeUNsYXNzUnVsZXMoZmFsc2UpCi0gICAgICAgICwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKHRydWUpCi0gICAgICAgICwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxz
ZSkKKyAgICAgICAgOiBtX2VsZW1lbnQoMCkKKyAgICAgICAgLCBtX3N0eWxlZEVsZW1lbnQoMCkK
KyAgICAgICAgLCBtX3BhcmVudE5vZGUoMCkKKyAgICAgICAgLCBtX3BhcmVudFN0eWxlKDApCisg
ICAgICAgICwgbV9yb290RWxlbWVudFN0eWxlKDApCisgICAgICAgICwgbV9yZWdpb25Gb3JTdHls
aW5nKDApCisgICAgICAgICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKKyAgICAgICAgLCBtX3Bz
ZXVkb1N0eWxlKE5PUFNFVURPKQorICAgICAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShOb3RJbnNp
ZGVMaW5rKQorICAgICAgICAsIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KGZhbHNlKQor
ICAgICAgICAsIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGZhbHNlKQorICAgICAgICAs
IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpCisgICAgICAgICwgbV9hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICAgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwg
bV9saW5lSGVpZ2h0VmFsdWUoMCkKKyAgICAgICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAg
ICAgLCBtX2hhc1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAgICAgLCBtX2JhY2tncm91bmREYXRh
KEJhY2tncm91bmRGaWxsTGF5ZXIpIHsgfQorCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGlu
aXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKERv
Y3VtZW50KiwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lk
ID0gTk9QU0VVRE8sIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOworICAgICAg
ICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9lbGVtZW50ID0gMDsKKyAg
ICAgICAgICAgIG1fc3R5bGVkRWxlbWVudCA9IDA7CisgICAgICAgICAgICBtX3BhcmVudFN0eWxl
ID0gMDsKKyAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBtX3JlZ2lv
bkZvclN0eWxpbmcgPSAwOworICAgICAgICAgICAgbV9ydWxlTGlzdCA9IDA7CisgICAgICAgICAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmNsZWFyKCk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICAgICAsIGhhc1Bl
bmRpbmdTaGFkZXJzKGZhbHNlKQorICAgICAgICAgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZh
bHNlOwogI2VuZGlmCi0gICAgICAgICwgbGluZUhlaWdodFZhbHVlKDApCi0gICAgICAgICwgZm9u
dERpcnR5KGZhbHNlKQotICAgICAgICAsIGhhc1VBQXBwZWFyYW5jZShmYWxzZSkKLSAgICAgICAg
LCBiYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExheWVyKSB7IH0KKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBtX3BlbmRpbmdTVkdEb2N1bWVu
dHMuY2xlYXIoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICAgICAgU3R5
bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVu
dDsgfQorICAgICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
KSB7IG1fc3R5bGUgPSBzdHlsZTsgfQorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHRha2VTdHlsZSgpIHsgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOyB9CisKKyAgICAgICAg
U3RhdGljQ1NTUnVsZUxpc3QqIGVuc3VyZVJ1bGVMaXN0KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX3J1bGVMaXN0KQorICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWND
U1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9ydWxlTGlzdC5nZXQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHRha2VSdWxl
TGlzdCgpIHsgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOyB9CisKKyAgICAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorICAg
ICAgICB2b2lkIHNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgeyBtX3Bh
cmVudFN0eWxlID0gcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBSZW5kZXJTdHls
ZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsg
fQorCisgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgICAgICB2b2lkIHNldFNhbWVPcmlnaW5Pbmx5
KGJvb2wgaXNTYW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gaXNTYW1lT3JpZ2lu
T25seTsgfQorICAgICAgICBib29sIGlzU2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7IHJldHVybiBt
X3NhbWVPcmlnaW5Pbmx5OyB9CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9wc2V1ZG9TdHlsZTsgfQorICAgICAgICBFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9CisgICAgICAgIGJv
b2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmli
dXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IH0KKyAgICAgICAgdm9pZCBzZXRFbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMoYm9vbCBpc0FmZmVjdGVkKSB7IG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzID0gaXNBZmZlY3RlZDsgfQorICAgICAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NS
dWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOyB9CiAg
ICAgICAgIAotcHVibGljOgorICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBpc0Fw
cGx5OyB9CisgICAgICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShi
b29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gaXNBcHBs
eTsgfQorICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CisgICAgICAgIGJvb2wgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAgICAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1h
cCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsgcmV0dXJuIG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllczsgfQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICAgICAg
UGVuZGluZ1NWR0RvY3VtZW50TWFwJiBwZW5kaW5nU1ZHRG9jdW1lbnRzKCkgeyByZXR1cm4gbV9w
ZW5kaW5nU1ZHRG9jdW1lbnRzOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgICAgIHZvaWQgc2V0SGFzUGVuZGluZ1NoYWRlcnMoYm9vbCBoYXNQZW5kaW5nU2hhZGVycykg
eyBtX2hhc1BlbmRpbmdTaGFkZXJzID0gaGFzUGVuZGluZ1NoYWRlcnM7IH0KKyAgICAgICAgYm9v
bCBoYXNQZW5kaW5nU2hhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUGVuZGluZ1NoYWRlcnM7
IH0KKyNlbmRpZgorCisgICAgICAgIHZvaWQgc2V0TGluZUhlaWdodFZhbHVlKENTU1ZhbHVlKiB2
YWx1ZSkgeyBtX2xpbmVIZWlnaHRWYWx1ZSA9IHZhbHVlOyB9CisgICAgICAgIENTU1ZhbHVlKiBs
aW5lSGVpZ2h0VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xpbmVIZWlnaHRWYWx1ZTsgfQorICAg
ICAgICB2b2lkIHNldEZvbnREaXJ0eShib29sIGlzRGlydHkpIHsgbV9mb250RGlydHkgPSBpc0Rp
cnR5OyB9CisgICAgICAgIGJvb2wgZm9udERpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGly
dHk7IH0KKworICAgICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5j
ZSgpOworICAgICAgICAgICAgaWYgKG1faGFzVUFBcHBlYXJhbmNlKSB7CisgICAgICAgICAgICAg
ICAgbV9ib3JkZXJEYXRhID0gbV9zdHlsZS0+Ym9yZGVyKCk7CisgICAgICAgICAgICAgICAgbV9i
YWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgICAgICAg
ICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBib29sIGhhc1VBQXBwZWFyYW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgICAgIEJvcmRlckRhdGEgYm9y
ZGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQorICAgICAgICBGaWxsTGF5
ZXIgYmFja2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9Cisg
ICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3Vu
ZENvbG9yOyB9CisKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24oKSB7IHJldHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9udERlc2Ny
aXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERp
cnR5IHw9IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9Cisg
ICAgICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNl
dFpvb20oZik7IH0KKyAgICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9m
b250RGlydHkgfD0gbV9zdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgICAgICB2b2lk
IHNldFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRU
ZXh0U2l6ZUFkanVzdChiKTsgfQorICAgICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFdyaXRpbmdNb2Rl
KHdyaXRpbmdNb2RlKTsgfQorICAgICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3Jp
ZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFRl
eHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0
IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNoZWRSdWxlczsg
fQorICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1f
bWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgogICAg
ICAgICAvLyBGSVhNRShidWcgMTA4NTYzKTogdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmV2aWV3LCB0
aGVzZSBtZW1iZXIKICAgICAgICAgLy8gdmFyaWFibGVzIGFyZSBwdWJsaWMuIEhvd2V2ZXIgd2Ug
c2hvdWxkIGFkZCBtZXRob2RzIHRvIGFjY2VzcwogICAgICAgICAvLyB0aGVzZSB2YXJpYWJsZXMu
Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGU7Ci0gICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQ7Ci0gICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGU7CisgICAgICAgIEVsZW1l
bnQqIG1fZWxlbWVudDsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOworICAg
ICAgICBTdHlsZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisgICAgICAgIENvbnRhaW5lck5v
ZGUqIG1fcGFyZW50Tm9kZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7Cisg
ICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CiAgICAgICAgIAotICAgICAg
ICBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgICAgIGJvb2wgc2FtZU9yaWdp
bk9ubHk7Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOwotCi0gICAgICAgIEVJbnNpZGVM
aW5rIGVsZW1lbnRMaW5rU3RhdGU7CisgICAgICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JT
dHlsaW5nOworICAgICAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7CisgICAgICAgIFBzZXVkb0lk
IG1fcHNldWRvU3R5bGU7CiAKLSAgICAgICAgYm9vbCBkaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQ7CisgICAgICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKIAotICAgICAgICBi
b29sIGVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsKKyAgICAgICAgYm9vbCBtX2Rpc3RyaWJ1
dGVkVG9JbnNlcnRpb25Qb2ludDsKIAotICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvOwor
ICAgICAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOwogCiAgICAgICAgIC8v
IEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVs
ZW1lbnQsCiAgICAgICAgIC8vIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IgbWVyZ2Ug
c29ydGluZy4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1hdGNoZWRSdWxl
czsKLSAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlzdDsKKyAgICAgICAg
VmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOworICAgICAgICBSZWZQ
dHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CiAKLSAgICAgICAgYm9vbCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsK
KyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7CiAKLSAgICAg
ICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgcGVuZGluZ0ltYWdlUHJvcGVydGllczsKKyAgICAg
ICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzOwogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5nU2hhZGVyczsKKyAg
ICAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgICAgICBQZW5kaW5nU1ZHRG9jdW1lbnRNYXAgcGVu
ZGluZ1NWR0RvY3VtZW50czsKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwIG1fcGVuZGlu
Z1NWR0RvY3VtZW50czsKICNlbmRpZgotICAgICAgICBDU1NWYWx1ZSogbGluZUhlaWdodFZhbHVl
OwotICAgICAgICBib29sIGZvbnREaXJ0eTsKKyAgICAgICAgQ1NTVmFsdWUqIG1fbGluZUhlaWdo
dFZhbHVlOworICAgICAgICBib29sIG1fZm9udERpcnR5OwogCi0gICAgICAgIGJvb2wgaGFzVUFB
cHBlYXJhbmNlOwotICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGE7Ci0gICAgICAgIEZpbGxM
YXllciBiYWNrZ3JvdW5kRGF0YTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworICAg
ICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgICAgICBCb3JkZXJEYXRhIG1fYm9yZGVy
RGF0YTsKKyAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7CisgICAgICAgIENvbG9y
IG1fYmFja2dyb3VuZENvbG9yOwogICAgIH07CiAKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0
eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQpA
QCAtNTEwLDE1ICs1OTIsMjMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZSopOwogCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQotICAg
IGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpOyB9CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQ
cmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogCiAgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVN
YXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMm
IGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBl
cnM7IH0KLQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyBy
ZXR1cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250
RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX3N0YXRl
LnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX3N0
YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJv
b2wgYikgeyBtX3N0YXRlLnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAgdm9pZCBzZXRXcml0
aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2Rl
KHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRh
dGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9y
aWVudGF0aW9uKTsgfQorICAgIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyopIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188028</attachid>
            <date>2013-02-13 00:12:41 -0800</date>
            <delta_ts>2013-02-13 01:01:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108563-20130213170909.patch</filename>
            <type>text/plain</type>
            <size>143685</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTAyNjM3NjJiMmMyNTdl
YmE4NTc2YzQ2ZWM3NjZlMTllZDJhOWE3OC4uYzFmZTcyYTVjNGMyZTg1ZTU4MjNlZmY3ZDUzYzVm
ZmI4NmY2MTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMi0xMSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcywgYmVjYXVzZSBtb3N0IG9mIHRo
ZSBtZW1iZXIgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuCisgICAgICAgIFdlIGRvbid0IG5lZWQg
dG8gdXBkYXRlIHRob3NlIHJlYWQtb25seSB2YXJpYWJsZXMgd2hpbGUgcmVzb2x2aW5nCisgICAg
ICAgIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRv
IGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAg
ICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3RhdGUncyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAg
ICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0
IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9u
ZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZpb3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAg
ICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxsIGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50
U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNldWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMg
b24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgZHluYW1pY1BzZXVkbywg
YmVjYXVzZSBkeW5hbWljUHNldWRvIGluCisgICAgICAgIFN0YXRlIGNsYXNzIGlzIGp1c3QgdXNl
ZCBmb3IgcmV0dXJuaW5nIG1hdGNoZWQgcHNldWRvIHN0eWxlIGZyb20KKyAgICAgICAgdGhpcyBy
dWxlTWF0Y2hlcyB0byBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIE5vIG5lZWQgdG8ga2Vl
cAorICAgICAgICBkeW5hbWljUHNldWRvIHdoaWxlIHJlc29sdmluZyBzdHlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
UmVtb3ZlZCBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE8sIGJlY2F1c2UgdGhpcyBtZXRob2QgdXNl
cyBqdXN0CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlZC4gU2VsZWN0b3JDaGVja2Vy
IGRvZXNuJ3Qgc2VlIFN0eWxlUmVzb2x2ZXIncworICAgICAgICBtX3BzZXVkb1N0eWxlIGRpcmVj
dGx5LiBOZWVkIHRvIHVzZSBTZWxlY3RvckNoZWNrZXJDb250ZXh0LiBTbyBubworICAgICAgICBu
ZWVkIHRvIHNldCBtX3BzZXVkb1N0eWxlIHRvIGJlIE5PUFNFVURPLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNr
QnJlYWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Omhhc1BhcmVudE5vZGUpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAgICAg
TW9kaWZpZWQgdG8gdXNlIGNsZWFyIGF0IHRoZSBlbmQgb2Ygc3R5bGVGb3JFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnRha2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0UGFyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6aXNTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0RWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aGFzUGVuZGluZ1NoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldExpbmVIZWln
aHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bGluZUhl
aWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRG
b250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpoYXNVQUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmJvcmRlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmJhY2tncm91bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpiYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLCAuLi4gYW5kIHNldFRleHRPcmllbnRhdGlvbiB3ZXJlIG1vdmVkIGZyb20KKyAg
ICAgICAgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjptYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIFRoZXNlIGZv
bnREZXNjcmlwdGlvbiwgLi4uLCBzZXRUZXh0T3JpZW50YXRpb24gYXJlIHdyYXBwZXJzIHRvCisg
ICAgICAgIGludm9rZSBTdGF0ZSdzIG1ldGhvZHMuIFN0eWxlQnVpbGRlciBzdGlsbCBkZXBlbmRz
IG9uIFN0eWxlUmVzb2x2ZXIKKyAgICAgICAgYW5kIGludm9rZXMgdGhlc2UgbWV0aG9kcy4gU28g
d2UgbmVlZCB0aGVzZSB3cmFwcGVycy4KKwogMjAxMy0wMi0xMiAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBHTGliIHVu
aWNvZGUgYmFja2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CmluZGV4IGFiNTZmNjYxMTc5N2ZkOTQ3Nzk2ZjQ4ZjMxMzllNzgxM2E5N2U4M2QuLmQxZTljNjBk
M2I5ZGVkN2UyMGZjNzY1ZTljNzdhNDMxNmUzYjZkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgSEFORExF
X0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5
bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAor
ICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+
cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0xMTAsMTAgKzExMCwxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
LSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZS0+YWNjZXNzU1ZHU3R5
bGUoKTsKKyAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nl
c3NTVkdTdHlsZSgpOwogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlICYm
IHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJp
dGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYg
dmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVy
aXRlZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMg
dGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZyb250
LWVuZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0yMzAs
NyArMjMwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHls
ZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
UGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5
cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5m
aWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQpAQCAtMjQwLDE0ICsyNDAsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAg
ICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBl
KCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xv
cigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JD
U1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmko
KSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFy
ZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ry
b2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHls
ZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwg
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjU3
LDcgKzI1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQ
YWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNW
R0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQt
PnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFp
bnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1Bh
aW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNjQsNyAr
MzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlclN0YXJ0
UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5n
KHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgpAQCAtMzc4LDcg
KzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJNaWRS
ZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmco
cywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJv
bUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgpAQCAtMzkyLDcgKzM5
Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNv
dXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywg
c3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOSw3ICs0
MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3Vy
Y2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0
YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0
ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJp
bmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5k
b2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZH
VVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRv
Y3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlDbGlwUGF0aDoKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgp
KSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dEFuY2hvcjoKQEAgLTQ3OCwxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwg
U3RvcENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1
ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsK
KyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNv
bG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdD
b2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRp
Y19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RP
cGFjaXR5OgpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29s
b3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0
aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0U3ZnU2hhZG93OiB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxl
LT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHls
ZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOworICAgICAgICAgICAgICAgIHJldHVybiBz
dmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxl
KCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0
eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJp
bWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN2
Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2NSw5ICs1NjUsOSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBz
dGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUpOwotICAgICAgICAgICAgSW50UG9p
bnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSwKLSAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21w
dXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUp
KTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSkg
OiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSksCisgICAgICAg
ICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVy
ID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAg
ICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggYjE5YWY3NjljMDdlMTM3MWViZDJkNjdiYmI4ZjU4NDRiMWVkNDYyNy4u
MTcxNmJhOTI5NDg4MjU0ODVkYTc2MGZjMjQ0ZGY1NzVmNGJjNmFjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTk0LDE0ICsxOTQsMTQgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAo
aXNJbmhlcml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlLT5zZXQjI1Byb3AobV9zdGF0ZS5wYXJl
bnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKG1fc3Rh
dGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5l
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklU
KHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3RhdGUuc3R5bGUtPnNl
dCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5
bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCiAgICAgcmV0
dXJuOyBcCiB9CiAKQEAgLTIyNCw2ICsyMjQsNDEgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQq
IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogfQogCiAKK2lubGluZSBTdGF0aWNDU1NSdWxlTGlz
dCogU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVJ1bGVMaXN0KCkKK3sKKyAgICBpZiAoIW1f
cnVsZUxpc3QpCisgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRl
KCk7CisgICAgcmV0dXJuIG1fcnVsZUxpc3QuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQoreworICAgIG1faGFz
VUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAgIGlmIChtX2hhc1VB
QXBwZWFyYW5jZSkgeworICAgICAgICBtX2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsK
KyAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7
CisgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7
CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQor
eworICAgIG1fZWxlbWVudCA9IDA7CisgICAgbV9zdHlsZWRFbGVtZW50ID0gMDsKKyAgICBtX3Bh
cmVudFN0eWxlID0gMDsKKyAgICBtX3BhcmVudE5vZGUgPSAwOworICAgIG1fcmVnaW9uRm9yU3R5
bGluZyA9IDA7CisgICAgbV9ydWxlTGlzdCA9IDA7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOworI2VuZGlmCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIG1fcGVuZGluZ1NWR0RvY3Vt
ZW50cy5jbGVhcigpOworI2VuZGlmCit9CisKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIo
RG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICA6
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCiAgICAg
LCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29sdmVy
Ojpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCkBAIC00MjEsMTEgKzQ1NiwxMSBAQCBib29s
IE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogdm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1h
dGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKG1hdGNoUmVx
dWVzdC5ydWxlU2V0KTsKLSAgICBBU1NFUlQobV9zdGF0ZS5lbGVtZW50KTsKKyAgICBBU1NFUlQo
bV9zdGF0ZS5lbGVtZW50KCkpOwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBzdHls
ZWRFbGVtZW50ID0gc3RhdGUuc3R5bGVkRWxlbWVudDsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGUuZWxlbWVudCgpOworICAgIGNvbnN0IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQg
PSBzdGF0ZS5zdHlsZWRFbGVtZW50KCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9J
ZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5
KCkpIHsKICAgICAgICAgQVNTRVJUKHN0eWxlZEVsZW1lbnQpOwpAQCAtNDY1LDEzICs1MDAsMTMg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJl
cXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwg
UnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxp
bmcpCisgICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciA9
IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkp
LnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rv
ciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZy0+bm9kZSgp
KSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+bm9kZSgpKSkp
IHsKICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gbWF0Y2hSZXF1ZXN0LnJ1bGVT
ZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAg
ICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7CiAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVsZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1w
dHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwgcnVsZVJhbmdlKTsKQEAgLTQ4MiwyNCArNTE3
LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
Y29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcy5pc0VtcHR5KCkp
CisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMgPSBzdGF0ZS5t
YXRjaGVkUnVsZXMoKTsKKyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwogCi0gICAgaWYgKHN0YXRlLm1vZGUg
PT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFzdGF0
ZS5ydWxlTGlzdCkKLSAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0
Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgc3RhdGUucnVsZUxpc3QtPnJ1bGVz
KCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBw
ZXIoKSk7CisgICAgaWYgKHN0YXRlLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3Rp
bmdSdWxlcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3RhdGUuZW5zdXJlUnVsZUxpc3QoKS0+cnVsZXMo
KS5hcHBlbmQobWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9m
IG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewot
ICAgICAgICBpZiAoc3RhdGUuc3R5bGUgJiYgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5jb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5t
YXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBzdGF0ZS5tYXRjaGVkUnVsZXNb
aV0tPnJ1bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRl
Lm1hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYg
KHN0YXRlLnN0eWxlKCkgJiYgbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOwor
ICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1hdGNoZWRSdWxlc1tpXS0+cnVs
ZSgpLT5wcm9wZXJ0aWVzKCksIG1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBtYXRjaGVkUnVsZXNb
aV0tPmxpbmtNYXRjaFR5cGUoKSwgbWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5
cGUoKSk7CiAgICAgfQogfQogCkBAIC01MTAsMTIgKzU0NCwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1
bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlm
IGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3Bl
ZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0
YXRlLmVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRl
LmVsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOworICAgIGlmIChtX3Nj
b3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJl
U3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9vbCBhcHBs
eUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRo
b3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAg
dW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAg
ICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0ZS5tYXRj
aGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9y
UnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgICAgICAg
ICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJl
c29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC01NDYsNyArNTgwLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJl
dHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2Nv
cGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKQEAgLTU1NywxNyArNTkxLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hI
b3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAg
IG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMo
KS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hl
ZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVt
ZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMo
bV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNo
ZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5
UnVsZXMsIG1fc3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5
UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKICAgICB9CiAgICAgc29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQpAQCAtNTc4LDEwICs2MTIsMTAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsK
LSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1
bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUuZWxlbWVu
dCkKKyAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgpAQCAtNTk5LDcgKzYzMyw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKICAgICBpZiAoIW1fcnVsZVNldHMudXNlclN0eWxlKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1f
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgTWF0Y2hS
ZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpbmNsdWRlRW1wdHlS
dWxlcyk7CkBAIC02MTIsNyArNjQ2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0
KiBydWxlcykKIHsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFu
Z2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5VQVJ1bGVSYW5nZSgpOwpAQCAtNjI5LDcgKzY2
Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBm
b3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNv
bHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRh
dGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KLSAgICBib29s
IGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0
ZW50KHN0YXRlLnBhcmVudE5vZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2Vs
ZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSgpKTsK
IAogICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTYzOSw3ICs2NzMsOCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBydWxlcywgYwogCiAgICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsK
ICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsK
LSAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHJ1bGVEYXRhLCBtYXRjaFJlcXVlc3Quc2NvcGUpKSB7
CisgICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgaWYg
KHJ1bGVNYXRjaGVzKHJ1bGVEYXRhLCBtYXRjaFJlcXVlc3Quc2NvcGUsIGR5bmFtaWNQc2V1ZG8p
KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBs
eSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAg
ICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFt
YXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CkBAIC02NDcsMTkgKzY4MiwxOSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgYwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQg
Z2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMg
bmVlZGVkLgotICAgICAgICAgICAgaWYgKHN0YXRlLnNhbWVPcmlnaW5Pbmx5ICYmICFydWxlRGF0
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5p
c1NhbWVPcmlnaW5Pbmx5KCkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4o
KSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hS
dWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQg
YSBwc2V1ZG8gYml0IGlmCiAgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEg
cHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAgICBpZiAoc3RhdGUuZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAg
ICAgIGlmIChzdGF0ZS5tb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7
CisgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1
ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUo
KSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNl
KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNF
VURPSUQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRIYXNQc2V1ZG9TdHls
ZShzdGF0ZS5keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVk
byA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5k
aWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1bGVS
YW5nZS5sYXN0UnVsZUluZGV4OwpAQCAtNjY3LDcgKzcwMiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1
bGVzLCBjCiAgICAgICAgICAgICAgICAgICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1
bGVSYW5nZS5sYXN0UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVs
ZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgICAgIGFkZE1hdGNo
ZWRSdWxlKCZydWxlRGF0YSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVs
ZSgmcnVsZURhdGEpOwogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC02ODUsNyArNzIwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBT
dHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0
ZS5tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBh
cmVSdWxlcyk7CisgICAgc3RkOjpzb3J0KG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuYmVnaW4oKSwg
bV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZVNNSUxQcm9wZXJ0aWVzKQpAQCAtNjk3LDE3ICs3MzIsMTcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQ
cm9wZXJ0aWUKICAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAv
LyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRp
b25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVk
RWxlbWVudCkgewotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9z
dGF0ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBp
ZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJv
cGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBw
ZWQgZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJl
IGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAg
Ly8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRz
IG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25h
bFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRF
bGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAg
ICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0
YXRlLnN0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShp
c0F1dG8pOworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1M
RWxlbWVudChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJB
dXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAg
ICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIg
PyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwog
ICAgICAgICB9CkBAIC03MTgsMTggKzc1MywxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
QWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQog
ICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNo
ZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVt
ZW50LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
ICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5p
bmxpbmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMg
bG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVk
aWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGlu
Zy4KLSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxl
bWVudC0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVh
YmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUo
KSAmJiAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAg
IC8vIEZJWE1FOiBDb25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHls
ZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBt
X3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBh
bmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAm
JiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRl
LnN0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyog
aXNDYWNoZWFibGUgKi8pOworICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5
bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5
bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlz
Q2FjaGVhYmxlICovKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVy
dGllcyk7CiAjZW5kaWYKQEAgLTc0NCwxMiArNzc5LDE3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05h
bWVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBtX2VsZW1lbnQgPSBlOworICAg
IG1fc3R5bGVkRWxlbWVudCA9IGUgJiYgZS0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4oZSkgOiAwOworICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBl
LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6
IE5vdEluc2lkZUxpbms7Cit9CisKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVt
ZW50KEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKG1fc3RhdGUuZWxlbWVudCAhPSBlKSB7Ci0gICAg
ICAgIG1fc3RhdGUuZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGVkRWxlbWVudCA9
IG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRlLmVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fc3RhdGUuZWxlbWVudCkgOiAwOwotICAgICAg
ICBtX3N0YXRlLmVsZW1lbnRMaW5rU3RhdGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRl
KCktPmRldGVybWluZUxpbmtTdGF0ZShlKTsKKyAgICBpZiAobV9zdGF0ZS5lbGVtZW50KCkgIT0g
ZSkgeworICAgICAgICBtX3N0YXRlLmluaXRFbGVtZW50KGUpOwogICAgICAgICBpZiAoZSAmJiBl
ID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBlLT5k
b2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CiAgICAg
ICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50
KGZhbHNlKTsKQEAgLTc1NywzNSArNzk3LDMyIEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJl
c29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6aW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSWQsIFJlbmRlclJlZ2lv
biogcmVnaW9uRm9yU3R5bGluZykKIHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IHN0YXRlLnBzZXVkb1N0eWxlID0gcHNldWRvSUQ7CisgICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVk
b0lkOworICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CiAKICAgICBp
ZiAoZSkgewogICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAg
ICBzdGF0ZS5wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5
bGUoKTsKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhl
cml0YW5jZSgpID8gMCA6CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9k
ZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0
LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/
IHBhcmVudFN0eWxlIDoKLSAgICAgICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPyBzdGF0ZS5wYXJl
bnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAgICAgICAgbV9w
YXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKKyAgICAgICAgbV9k
aXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA9IDA7Ci0gICAgICAgIHN0YXRl
LnBhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9J
bnNlcnRpb25Qb2ludCA9IGZhbHNlOworICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAg
ICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7CisgICAgICAgIG1fZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUg
PyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0gICAgUmVuZGVyU3R5bGUq
IGRvY1N0eWxlID0gZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICBzdGF0ZS5yb290RWxl
bWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9j
dW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVu
dCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5
bGU7CiAKLSAgICBzdGF0ZS5zdHlsZSA9IDA7Ci0KLSAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmNsZWFyKCk7Ci0KLSAgICBzdGF0ZS5ydWxlTGlzdCA9IDA7Ci0KLSAgICBzdGF0ZS5m
b250RGlydHkgPSBmYWxzZTsKKyAgICBtX3N0eWxlID0gMDsKKyAgICBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuY2xlYXIoKTsKKyAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBtX2ZvbnREaXJ0eSA9
IGZhbHNlOwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xk
ID0gMTA7CkBAIC04NDgsMTYgKzg4NSwxNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYg
KCFydWxlU2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVs
ZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKLSAgICBt
X3N0YXRlLm1vZGUgPSBTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlczsKKyAgICBtX3N0YXRl
LnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOwogICAgIGludCBmaXJzdFJ1
bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZShmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOwotICAgIG1fc3RhdGUubW9kZSA9
IFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGU7Ci0gICAgaWYgKG1fc3RhdGUubWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBtX3N0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpS
ZXNvbHZpbmdTdHlsZSk7CisgICAgaWYgKG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTg2NSw3ICs5MDIsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5
bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0
RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElucHV0RWxlbWVu
dCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwor
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudCgp
LT50b0lucHV0RWxlbWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhl
cklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODg2LDI1ICs5MjMsMjUg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxl
bWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJl
ZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRl
LmVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRW5h
YmxlZEZvcm1Db250cm9sKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0VuYWJsZWRGb3JtQ29udHJv
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0
QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0o
KSkKKyAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0
eWxlUnVsZXMoKSkgeworICAgIGlmIChzdGF0ZS5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5
U3R5bGVSdWxlcygpKSB7CiAgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVudC0+d2ls
bFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5lbGVtZW50
LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5lbGVt
ZW50KCktPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAg
ICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFu
Z2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9
IHN0YXRlLmVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNP
dXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc091dE9mUmFuZ2UoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTkyMCwyNSArOTU3LDI1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogYm9v
bCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3Rp
bmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7CiAg
ICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+
YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpLT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0
ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc3RhdGUu
ZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdD
YW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICBpZiAo
c3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0g
c2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFu
Z0F0dHIpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0
dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xh
c3NSdWxlcykgeworICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkp
IHsKICAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFz
Q2xhc3MoKSkgewogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1
aXJlIGEgKHNsb3chKSBnZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlz
IGFuIGFuaW1hdGFibGUgYXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChzdGF0ZS5lbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0ZShj
bGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkg
eworICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewogI2VuZGlmCi0gICAgICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFt
ZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIH0KQEAgLTk0NiwxMiArOTgz
LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50
KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihz
aGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50
KCktPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxI
VE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc3RhdGUuZWxlbWVudCgpKS0+aXNEZXRlcm1pbmF0ZSgpICE9
IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNE
ZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZgpA
QCAtOTY4LDcgKzEwMDUsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRlLmVsZW1lbnQtPnRhZ1FOYW1lKCkpCisg
ICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudCgpLT50YWdRTmFtZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3OCwyMSArMTAxNSwyMSBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0g
c3RhdGUuZWxlbWVudC0+aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IHN0
YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
ZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmhvdmVyZWQoKSkKKyAgICBpZiAo
ZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aG92ZXJlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IHN0YXRlLmVsZW1l
bnQtPmFjdGl2ZSgpKQorICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50
KCktPmFjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZv
Y3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5mb2N1c2VkKCkpCisgICAgaWYgKGVsZW1lbnQtPmZv
Y3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQt
PnNoYWRvd1BzZXVkb0lkKCkpCisgICAgaWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0g
c3RhdGUuZWxlbWVudCgpLT5zaGFkb3dQc2V1ZG9JZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGlj
YWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVt
ZW50LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5z
KGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKQEAgLTEwMDgsNyArMTA0
NSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250cm9sICE9IHN0YXRlLmVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0
ZS5lbGVtZW50KCktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVt
ZW50KSkKQEAgLTEwMzIsMjAgKzEwNjksMjAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAo
ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50TGlua1N0YXRlICE9
IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIHN0YXRl
LmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLy8gRGVueSBzaGFyaW5n
IHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4KLSAgICBpZiAoZWxl
bWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50
KCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQo
KS0+aXNXZWJWVFRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChl
bGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50LT5pc1dlYlZUVEVsZW1l
bnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dlYlZU
VEVsZW1lbnQoc3RhdGUuZWxlbWVudCktPmlzUGFzdE5vZGUoKSkKKyAgICBpZiAoZWxlbWVudC0+
aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1dlYlZUVEVsZW1lbnQoKSAm
JiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dlYlZUVEVsZW1l
bnQoc3RhdGUuZWxlbWVudCgpKS0+aXNQYXN0Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8
fCBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJl
bnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQo
KSA9PSBzdGF0ZS5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDY3
LDM3ICsxMTA0LDM3IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiBSZW5kZXJTdHlsZSogU3R5
bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewogICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7Ci0gICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50IHx8ICFzdGF0ZS5wYXJlbnRTdHls
ZSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3RhdGUucGFyZW50U3R5bGUo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5l
IHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVT
dHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oc3RhdGUuc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQor
ICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHls
ZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3Rv
cCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAg
aWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygp
Lmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0lEKCkg
JiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVk
RWxlbWVudCgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
c3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAg
ICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5lbGVtZW50
LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0
YXRlLmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3RhdGUuZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRI
YXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgLy8gQ2FjaGUgd2hldGhlciBzdGF0ZS5lbGVtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93
biBjbGFzcyBzZWxlY3RvcnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgbWVt
YmVyIHZhcmlhYmxlLiBUaGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxkIGJlIGZhY3RvcmVkIG91
dCBvZiBTdHlsZVJlc29sdmVyLgotICAgIHN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxl
cyA9IHN0YXRlLmVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05h
bWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSk7CisgICAgc3Rh
dGUuc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0
ZS5lbGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0
ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMoKSkpOwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2li
bGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIHVu
c2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwogICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxl
bWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPnBy
ZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CiAgICAg
ICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3Qs
IGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKQEAgLTExMTksNyArMTE1Niw3IEBA
IFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgaWYg
KHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZv
ciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBh
Ym92ZS4KLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5n
KHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KQEAgLTEzNDEsOSArMTM3
OCw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOwogICAgIGluaXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUo
ZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0gICAgc3RhdGUucmVnaW9uRm9yU3R5bGluZyA9IHJl
Z2lvbkZvclN0eWxpbmc7Ci0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hh
cmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgc3RhdGUu
aW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlbGVtZW50LCBkZWZhdWx0UGFyZW50LCBO
T1BTRVVETywgcmVnaW9uRm9yU3R5bGluZyk7CisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBB
bGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkp
IHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUo
KTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0
eWxlOwpAQCAtMTM1MSwzMiArMTM4NywzMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAgIGlmIChzdGF0ZS5w
YXJlbnRTdHlsZSkgewotICAgICAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlLCBp
c0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFy
eSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICBpZiAoc3RhdGUucGFy
ZW50U3R5bGUoKSkgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHls
ZSgpLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dC
b3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBzdGF0ZS5zdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKLSAgICAg
ICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUuZ2V0KCkp
OwotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOworICAg
ICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOworICAgICAgICBj
bG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHlsZSgpKTsKKyAgICAg
ICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkpOwogICAgIH0KICAg
ICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAtd2Via2l0LXVz
ZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hhZG93IGhvc3Qg
dG8gZGlzdHJpYnV0ZWQgbm9kZS4KLSAgICBpZiAoc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50KSB7CisgICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7
CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJl
bnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVzZXJN
b2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9zdC0+dXNlck1vZGlm
eSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SXNMaW5rKHRydWUpOwotICAgICAgICBFSW5zaWRlTGlu
ayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IHN0
YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKICAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNp
ZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRv
VmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAgICAgICAg
IGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQ29sbGVj
dGlvbiA9IGZhbHNlOwpAQCAtMTM5MywxNyArMTQyOSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVu
ZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQpOwog
CiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVj
b3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlLCBlbGVtZW50KTsKLQotICAgIGluaXRF
bGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisgICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7
CiAKLSAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0g
MDsKKyAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUu
CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBO
b3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwor
ICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxl
bWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYg
a2V5ZnJhbWVWYWx1ZSkKQEAgLTE0MTIsMTQgKzE0NDUsMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSog
ZWxlbWUKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VS
VCghbV9zdGF0ZS5zdHlsZSk7CisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkpOwogCiAgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBz
dGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOwotCi0gICAgc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6
Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwog
CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0
aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92
ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KQEAgLTE0MzEsOCArMTQ2
Myw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAg
Ly8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUg
Zm9udC1zaXplCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7Cisg
ICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8g
Tm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0
aWVzKCkpCkBAIC0xNDU5LDcgKzE0OTEsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogCiAg
ICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0gICAgcmV0dXJuIHN0
YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCog
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpA
QCAtMTQ4Myw3ICsxNTE1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0Zv
ckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEFw
cGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZl
cnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAogICAgICAgICBpbml0RWxlbWVu
dChlKTsKLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKKyAgICAgICAgbV9zdGF0ZS5p
bml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwogCiAgICAgICAgIGNvbnN0IFN0eWxl
S2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCkBAIC0xNTI3LDcgKzE1
NTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVs
ZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBF
bGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fc3Rh
dGUucGFyZW50U3R5bGUpOworICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFlKQog
ICAgICAgICByZXR1cm4gMDsKIApAQCAtMTUzNSw5ICsxNTY3LDkgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBz
ZXVkbywgRWwKIAogICAgIGluaXRFbGVtZW50KGUpOwogCi0gICAgaW5pdEZvclN0eWxlUmVzb2x2
ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxl
OjpjcmVhdGUoKTsKLSAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20obV9zdGF0ZS5wYXJlbnRT
dHlsZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJl
bnRTdHlsZSwgcHNldWRvKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUo
KSk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBv
ZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxr
aW5nCiAgICAgLy8gdGhvc2UgcnVsZXMuCkBAIC0xNTU0LDEyICsxNTg2LDEyIEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1
ZG9JZCBwc2V1ZG8sIEVsCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzdGF0ZS5zdHlsZS0+c2V0U3R5bGVU
eXBlKHBzZXVkbyk7CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAK
ICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENs
ZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChh
bW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlLmdl
dCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0
ZS5zdHlsZSgpLCBtX3N0YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAgICAgLy8gU3RhcnQgbG9h
ZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5n
UmVzb3VyY2VzKCk7CkBAIC0xNTY3LDE1ICsxNTk5LDE1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8s
IEVsCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8g
Tm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewotICAgIGlu
aXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jv
b3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIG1f
c3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9j
dW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OwotICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIG1f
c3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwog
CiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29u
c3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKQEAgLTE1ODYsNyArMTYx
OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9ydWxlU2V0cy51
c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVy
IHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhU
TUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0
eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFs
dWUgPSAwOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5o
ZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwpAQCAt
MTU5Nyw4ICsxNjI5LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8g
TGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9u
dC1zaXplLgotICAgIGlmIChtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKTsK
KyAgICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwg
ZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRP
bmx5KTsKIApAQCAtMTYwOCwyMCArMTY0MCwyMCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBkb2N1bWVudCgp
LT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHls
ZS4KLSAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG1fc3Rh
dGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewotICAgIG1fc3RhdGUuc3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCkpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdl
IGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXpl
Rm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUtPmZv
bnQoKS51cGRhdGUoMCk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgw
KTsKIAotICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9z
dGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMTkwOSw3ICsxOTQxLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZl
IGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHls
ZSh0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UsIG1fc3RhdGUuYm9yZGVy
RGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0
eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwg
bV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKIAog
ICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJl
IHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIp
KQpAQCAtMTk5MiwyNiArMjAyNCwxNiBAQCBzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9u
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSkKIAogdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVG
b250KCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KQorICAgIGlmICghbV9zdGF0ZS5m
b250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVz
dCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7Ci0gICAg
Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKTsK
LSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUoKTsKKyAgICBjaGVja0ZvckdlbmVy
aWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tG
b3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9y
T3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fc3RhdGUuZm9udERpcnR5ID0gZmFsc2U7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKLXsKLSAgICBt
X3N0YXRlLmhhc1VBQXBwZWFyYW5jZSA9IG1fc3RhdGUuc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsK
LSAgICBpZiAobV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9zdGF0ZS5ib3Jk
ZXJEYXRhID0gbV9zdGF0ZS5zdHlsZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fc3RhdGUuYmFja2dy
b3VuZERhdGEgPSAqbV9zdGF0ZS5zdHlsZS0+YmFja2dyb3VuZExheWVycygpOwotICAgICAgICBt
X3N0YXRlLmJhY2tncm91bmRDb2xvciA9IG1fc3RhdGUuc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
OwotICAgIH0KKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAg
bV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25l
ZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwMjQsMTAgKzIwNDYsMTAgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVu
dCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xv
YWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3RhdGUubW9kZSA9IFNlbGVjdG9y
Q2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzOworICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNo
ZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBpbml0RWxlbWVudChlKTsKLSAgICBpbml0
Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lkKTsKKyAgICBtX3N0YXRlLmluaXRGb3JTdHls
ZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwgcHNldWRvSWQpOwogCiAgICAgTWF0Y2hSZXN1bHQg
ZHVtbXk7CiAgICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYgVUFBbmRVc2VyQ1NTUnVsZXMpIHsKQEAg
LTIwNDAsNTIgKzIwNjIsNTEgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICB9CiAKICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0
aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVz
VG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CisgICAgICAgIG1fc3RhdGUuc2V0U2Ft
ZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKIAog
ICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KICAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAot
ICAgICAgICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CisgICAgICAgIG1fc3RhdGUu
c2V0U2FtZU9yaWdpbk9ubHkoZmFsc2UpOwogICAgIH0KIAotICAgIG1fc3RhdGUubW9kZSA9IFNl
bGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGU7CisgICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVj
dG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwogCi0gICAgcmV0dXJuIG1fc3RhdGUucnVsZUxp
c3QucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnRha2VSdWxlTGlzdCgpOwogfQogCi1p
bmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNv
bHZlcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCiB7CiAgICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKLSAgICBzdGF0ZS5keW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICAg
ICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8g
V2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50
cy4KLSAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlICE9IE5PUFNFVURPKQorICAgICAgICBp
ZiAoc3RhdGUucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBh
cnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBy
dWxlIGhhc2guCiAgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAocnVsZURhdGEu
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0
ZS5lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1Jp
Z2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgc3RhdGUuZWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFz
TXVsdGlwYXJ0U2VsZWN0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQotICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoc3RhdGUuZWxlbWVudCwg
cnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChydWxlRGF0YS5z
ZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tl
cjo6dGFnTWF0Y2hlcyhzdGF0ZS5lbGVtZW50KCksIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FO
YW1lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9y
Q2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3Ioc3RhdGUuZWxlbWVu
dCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpm
YXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihzdGF0ZS5lbGVtZW50KCksIHJ1bGVE
YXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHJl
dHVybiBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0
ZS5lbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKHJ1
bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgfQogCiAgICAgLy8gU2xv
dyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwg
c3RhdGUubW9kZSk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQsIFNlbGVjdG9yQ2hl
Y2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBz
dGF0ZS5zdHlsZS5nZXQoKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRv
Y3VtZW50KCksIHN0YXRlLm1vZGUoKSk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQo
KSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVs
ZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwot
ICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIHN0
YXRlLmR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBj
b250ZXh0LnBzZXVkb1N0eWxlID0gc3RhdGUucHNldWRvU3R5bGUoKTsKKyAgICBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIGR5bmFt
aWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKICAgICBpZiAobWF0Y2gg
IT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRv
U3R5bGUgIT0gc3RhdGUuZHluYW1pY1BzZXVkbykKKyAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUo
KSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IGR5bmFtaWNQc2V1ZG8pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwOTUsOSArMjEx
Niw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lCiAgICAgaWYgKCFyZWdpb25TZWxlY3RvciB8
fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9zdGF0ZS5w
c2V1ZG9TdHlsZSA9IE5PUFNFVURPOwotCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hl
Y2tlcihkb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKKyAgICBT
ZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIG1fc3RhdGUubW9kZSgp
KTsKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMg
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIu
bWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjEyMSw3ICsyMTQwLDcgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIHRlbXBsYXRlIDxTdHls
ZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgogdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5
bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3Bl
cnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJUKChw
cm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3Rh
dGUucmVnaW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
IT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygp
KTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7
CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3Vu
dCgpOwpAQCAtMjE2NSw3ICsyMTg0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICAgICAg
ICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsK
ICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCiAgICAgICAgICAgICBl
bHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoY3VycmVudC52YWx1ZSgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvd1ByaW9yaXR5UHJvcGVydGllczoKICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKQEAgLTIxODIsMTgg
KzIyMDEsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbAogICAgICAgICByZXR1cm47CiAKICAg
ICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5zdHlsZS0+aW5zaWRlTGlu
aygpICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGlu
aygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7
IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07
CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRpZXMu
bGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0
byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2VzIGluIG1h
bnkgcGxhY2VzLgotICAgICAgICAgICAgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
ID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOwotICAgICAgICAg
ICAgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgICAgIHN0YXRlLnNldEFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaExpbmspOworICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQp
OwogCiAgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMu
cHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFu
dCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRj
aGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gdHJ1ZTsKLSAgICAgICAgc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICBzdGF0ZS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKQEAgLTIz
MDksMTUgKzIzMjgsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgLy8gV2Ug
Y2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGll
cyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0
CiAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBw
bHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4g
ZGVwZW5kIG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3Qg
YW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCi0g
ICAgICAgIHN0YXRlLnN0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLmdldCgpKTsKLSAgICAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlLT5pbmhlcml0ZWRE
YXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hh
ZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0
dXMgPSBzdGF0ZS5zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5j
b3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAg
ICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVt
LT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50
KSkgeworICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0YXRlLnN0eWxlKCkt
Pmluc2lkZUxpbmsoKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBz
dHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBh
cmVudCBzdHlsZSB0aGVuIHRoZQogICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwg
YmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBm
cm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5o
ZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAog
ICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBs
aWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUg
aXQuCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5
ID0gdHJ1ZTsgCkBAIC0yMzM1LDE0ICsyMzU0LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0
CiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9w
ZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCiAgICAgLy8gVGhlIG9yZGVy
IGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGlt
cG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8gYW5kICg0KSBub3JtYWwg
aW1wb3J0YW50LgotICAgIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUuc2V0
TGluZUhlaWdodFZhbHVlKDApOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9y
aXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwogCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAg
ICBzdGF0ZS5mb250RGlydHkgPSB0cnVlOworICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVt
LT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkgeworICAgICAgICBzdGF0ZS5zZXRGb250RGlydHkodHJ1ZSk7CiAgICAgICAgIGFw
cGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIH0KIApAQCAtMjM1MCwxOCArMjM2OSwxOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExp
bmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQt
c2l6ZS4KLSAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKTsKKyAgICBp
ZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBNYW55
IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBw
bHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkpCisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBw
cmlvcml0eSBVQSBwcm9wZXJ0aWVzLgogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJp
b3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7CiAgICAgCiAgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0
aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3Jv
dW5kKCk7CisgICAgc3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAgICAgCiAgICAg
Ly8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMg
YW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgogICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKQEAgLTIzNzIsMTMgKzIzOTEsMTMgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCiAgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKICAg
ICAKLSAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSk7CisgICAgQVNTRVJUKCFzdGF0ZS5mb250
RGlydHkoKSk7CiAgICAgCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShz
dGF0ZS5lbGVtZW50LCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUpKQorICAg
IGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuZWxlbWVudCgp
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUu
cGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBjYWNoZUhh
c2gsIG1hdGNoUmVzdWx0KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVs
ZXMoY29uc3QgU3R5bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIyKQpAQCAt
MjQ0Myw3ICsyNDYyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxp
c3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogYm9vbCBTdHlsZVJlc29s
dmVyOjppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0
UGFnZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmICghbV9zdGF0ZS5yb290RWxlbWVudFN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0g
dHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAw
KSkgJSAyOwpAQCAtMjQ2NCw4ICsyNDgzLDggQEAgU3RyaW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VO
YW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlKQogewogICAgIGluaXRFbGVtZW50KDApOwotICAgIGluaXRGb3JTdHlsZVJl
c29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3RhdGUuc3R5bGUgPSBzdHlsZTsKKyAgICBtX3N0YXRl
LmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgMCwgc3R5bGUpOworICAgIG1fc3RhdGUu
c2V0U3R5bGUoc3R5bGUpOwogICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFs
dWUpOwogfQogCkBAIC0yNTc3LDcgKzI1OTYsNyBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVy
Ojppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogLy8gcHJvcGVydGll
cyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3Vt
ZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCiBib29sIFN0eWxlUmVzb2x2ZXI6
OnVzZVNWR1pvb21SdWxlcygpCiB7Ci0gICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0
YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOworICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQo
KSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29s
IGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0
aCkKQEAgLTI1OTIsNyArMjYxMSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFk
dGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1
ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVy
c2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHN0YXRlLnN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpOworICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZp
ZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpOwogICAgIGlmICh3b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMjY5OCw3ICsyNzE3LDcgQEAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVS
ZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVW
YXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucykKIHsKLSAgICBz
dGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2Vy
aWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRlLnN0eWxlLT52YXJpYWJsZXMoKSkpOwor
ICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVl
LT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVz
KCkpKTsKIAogICAgIGlmIChrbm93bkV4cHJlc3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24pKQog
ICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRldGVjdGVkLgpAQCAtMjczMSwxOSArMjc1MCwxOSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogI2VuZGlmCiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgIGJv
b2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZh
bHVlKCk7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAo
IXN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAg
IEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5p
dGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8
IChzdGF0ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAt
PiAoc3RhdGUucGFyZW50Tm9kZSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSkKKyAgICBBU1NFUlQoIWlz
SW5oZXJpdCB8fCAoc3RhdGUucGFyZW50Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpKTsg
Ly8gaXNJbmhlcml0IC0+IChzdGF0ZS5wYXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUo
KSkKIAotICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlICYmICghc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5r
UHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlz
VmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHBy
b3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkg
OnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXNJbmhlcml0ICYm
ICFzdGF0ZS5wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAm
JiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBzdGF0ZS5w
YXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICBp
ZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNFeHBsaWNpdGx5SW5oZXJp
dGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkp
CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQ
cm9wZXJ0aWVzKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBpZiAoaWQgPT0g
Q1NTUHJvcGVydHlWYXJpYWJsZSkgewpAQCAtMjc1MSw3ICsyNzcwLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgQ1NTVmFyaWFibGVWYWx1ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxDU1NWYXJp
YWJsZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5uYW1lKCkuaXNF
bXB0eSgpKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+dmFsdWUoKS5pc0VtcHR5KCkpOwot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFi
bGUtPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWYXJpYWJsZSh2YXJpYWJs
ZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKQEAgLTI3NzAsNyArMjc4OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9v
bUZhY3RvciA9IHN0YXRlLnN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZh
Y3RvciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIC8vIFdoYXQgZm9s
bG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyIGNv
cnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhh
bmRzIChlLmcuIGJvcmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwg
YW5kCkBAIC0yNzg0LDcgKzI4MDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgLy8gbm90
ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3Vw
cG9ydGVkLgogCiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KIApAQCAtMjc5NiwxOSArMjgxNSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
IENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5p
c0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+
aXNHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3Jh
ZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQo
KSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVu
dFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0
YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRl
bSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJ
bWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENv
bnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFs
dWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjgxOSwxNyArMjgzOCwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
bnRWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUtPmlzQXR0cigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1l
c3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZS0+c2V0
VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxB
dG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0ZS5lbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBk
aWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
c3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2
YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJp
YnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAgICBtX3J1bGVT
ZXRzLmZlYXR1cmVzKCkuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7
CkBAIC0yODQwLDI0ICsyODU5LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
IGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHls
ZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50
ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJW
YWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRv
cigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50
ZXIucmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRT
ZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xv
c2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9f
T1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI4
NjcsMTYgKzI4ODYsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xl
YXJDb250ZW50KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5UXVvdGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHN0YXRlLnBhcmVudFN0eWxlLT5xdW90ZXMoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVv
dGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0lu
aXRpYWwpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0yODk0LDE5
ICsyOTEzLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3Rl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1
ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFy
dFF1b3RlLCBlbmRRdW90ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVv
dGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRR
dW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxp
c3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFt
aWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlz
U3BlY2lmaWVkRm9udCgpKTsKQEAgLTI5MTYsNyArMjkzNSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAg
ICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRp
YWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNp
emUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFj
ZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250
RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpKQpAQCAtMjkzMCw3ICsyOTQ5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFt
aWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkq
IGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMDA4LDI0ICszMDI3LDI0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAv
LyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgog
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJC
YWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKENvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJCYWNrZ3Jv
dW5kTGF5ZXJzKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxl
LT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tn
cm91bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVu
dFN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3VuZENvbG9y
KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5jbGVhck1hc2tMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFz
a0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5tYXNrTGF5ZXJz
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRl
LnBhcmVudFN0eWxlKCktPm1hc2tMYXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udDoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0
YXRlLnBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUo
KS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWln
aHRWYWx1ZSgwKTsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzAzNCw4ICszMDUzLDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVl
ID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKDApOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
OwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzA1MSw3ICsz
MDcwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVl
bkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0
YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERl
c2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlv
bi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VT
Vkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
c0ZvbnRWYWx1ZSgpKSB7CkBAIC0zMDY5LDcgKzMwODgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgdXBkYXRlRm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgc3RhdGUubGluZUhl
aWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLnNl
dExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVpZ2h0LmdldCgpKTsKIAogICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7
CiAgICAgICAgIH0KQEAgLTMwODEsMTEgKzMxMDAsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsK
ICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxl
LT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5
bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGUu
c3R5bGUtPnNldEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNo
YWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hh
ZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc3RhdGUucGFy
ZW50U3R5bGUoKS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUu
cGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0g
ICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5
bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/
IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOTUsMjkgKzMxMTQsMjkgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRp
Y19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRl
bS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0t
PmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0
ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxl
LmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAg
ICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkg
PSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+
Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBz
cHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsK
ICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRl
bS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwog
ICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAg
ICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xv
ci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSkKLSAgICAgICAgICAg
ICAgICBjb2xvciA9IHN0YXRlLnN0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgZWxzZSBpZiAo
c3RhdGUuc3R5bGUoKSkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNv
bG9yKCk7CiAKICAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRv
cHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93
U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkg
PyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4
dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBs
aXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7
IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNo
YWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDog
ewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZs
ZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMx
MjgsMTMgKzMxNDcsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVj
dGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJl
ZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAg
ICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+
c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZElu
dGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lv
bj4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
KTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNl
dCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNr
OwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1h
cE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAg
IHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJv
eFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBy
dWxlcy4KQEAgLTMxNDMsMjkgKzMxNjIsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKHN0
YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJl
bnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sb3IoKSk7
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVu
dFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
Q29sdW1uUnVsZVdpZHRoKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50
U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUo
KS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5jb2x1bW5SdWxlU3R5bGUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5yZXNldENvbHVtblJ1bGUoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0Q29s
dW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWU6CiAgICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+
bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNy
ZW1lbnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVl
ZCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFy
ZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRN
YXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5tYXJxdWVlRGlyZWN0aW9uKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJx
dWVlSW5jcmVtZW50KHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5tYXJxdWVlU3BlZWQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29w
Q291bnQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1h
cnF1ZWVCZWhhdmlvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlUmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2
ZXIuCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsg
Ly8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29w
Q291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWVTcGVlZDogewpAQCAtMzE3NSwxOSArMzE5NCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1z
ZWMuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7
IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNw
ZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBk
ZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7
IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzVGltZSgpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlz
ZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlz
ZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
IC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzE5NywxOSArMzIxNiwxOSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAg
IHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUlu
Y3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6
Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3Ro
KDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8g
NnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVk
KSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRU
b0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0
VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQo
KSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJx
dWVlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5j
cmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zMjE4LDExICszMjM3LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0TG9jYWxlKG51bGxBdG9tKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2Fs
ZShudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRM
b2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZv
ckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9j
YWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkp
OwogICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTMyNDEsNyArMzI2MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJl
Z2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hi
b2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzI1
MSwxMCArMzI3MCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiog
Zmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExl
bmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUu
Z2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0
ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRU
b0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPnRvcCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
OworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+
cmlnaHQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAg
ICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20o
KSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAg
IExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCiAgICAgICAgICAgICBpZiAodG9w
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zMjY2
LDEzICszMjg1LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0
aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246
OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lv
biA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lv
bi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBm
YWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xl
KQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVE
YXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0g
cmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0ZS5lbGVtZW50
LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0
ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogCiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zMjgxLDggKzMzMDAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246IHsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFn
Z2FibGVSZWdpb25Ob0RyYWcpOwotICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5z
ZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRE
cmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
RHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOworICAg
ICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMjk4LDIxICszMzE3LDIxIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVu
Z3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5
bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAg
ICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUZXh0U3Ryb2tlV2lk
dGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lk
dGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3Jt
LCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0g
ICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBv
cGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlv
bnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQ
ZXJzcGVjdGl2ZTogewpAQCAtMzMyMiwzNCArMzM0MSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2
ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKDApOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVW
YWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAg
ICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9v
bUZhY3Rvcik7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7
CiAgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVs
ZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxl
LmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tRmFjdG9yKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgaWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CiAgICAgICAgIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAg
ZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRBbmlt
YXRpb25zKHN0YXRlLnBhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+YW5pbWF0
aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyVHJh
bnNpdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZS0+dHJhbnNpdGlv
bnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0VHJhbnNpdGlvbnMoc3Rh
dGUucGFyZW50U3R5bGUoKS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGln
aHRDb2xvcjogewpAQCAtMzM1OCw3ICszMzc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9y
KGNvbCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTMzNjcsNyArMzM4Niw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3Zl
cmZsb3dTY3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAo
IXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92
ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91
Y2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNDEwLDcgKzM0MjksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAg
ICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53
cml0aW5nTW9kZSgpKTsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5
OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0
aW9uKCksIHN0YXRlLnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3
SWQgIT0gaWQpOwogICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwog
ICAgIH0KQEAgLTM0NDUsOCArMzQ2NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXRX
cml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBu
b3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgc3RhdGUuZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsK
KyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUu
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0ZS5kb2N1bWVu
dCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0zNDYyLDcgKzM0ODEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihM
aW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJv
eENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0zNDcwLDIxICszNDg5LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgQ1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5W
YWx1ZSA9IHN0YXRpY19jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52
YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJv
eENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAv
LyBDU1MgRm9udHMgTW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9u
dEZlYXR1cmVTZXR0aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1h
bEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0
ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0
dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7CiAgICAgICAg
IGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKQEAgLTM1MDQsOCArMzUyMyw4IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFs
dWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25z
KSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAg
ICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCkBAIC0zNTEzLDE0ICszNTMyLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIFZlY3RvcjxH
cmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xp
c3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVj
dG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFRy
YWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zNTI4LDE0ICszNTQ3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQ
b3NpdGlvbiBjb2x1bW47CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBj
b2x1bW4pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3Jp
ZEl0ZW1Db2x1bW4oY29sdW1uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1D
b2x1bW4oY29sdW1uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0R3JpZFJvdzogewogICAgICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBp
ZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRl
ciBsb29rdXAgdGFibGUuCkBAIC0zODU3LDE0ICszODc2LDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9y
UGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9w
ZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4g
U3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKQEAgLTM4NzUsNyArMzg5NCw3IEBA
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVyCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdl
ID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChp
bWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4g
aW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBAIC0zODg0LDEzICszOTAzLDEzIEBAIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFs
dWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBp
bWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVs
ZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3Qo
KQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwogCiAgICAgaWYgKHN0eWxlLT50
ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTYyLDE1ICszOTgxLDE1IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGlu
Z3MpCiAgICAgfQogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1l
ZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxz
ZSkpOwotICAgIG1fc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOwotICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBt
X3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIHNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNl
dEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQog
ewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1
bWVudCgpLCBtX3N0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgp
LCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRl
clN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwg
Ym9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC00MTc5LDE1ICs0MTk4LDE1IEBAIENvbG9yIFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSwgYm9vbCBmb3JWCiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBj
YXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRv
Y3VtZW50KCktPnRleHRDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+
dGV4dENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVy
biAoc3RhdGUuZWxlbWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUuZWxlbWVudC0+ZG9j
dW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudCgpLT5p
c0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlu
a0NvbG9yKCkgOiBzdGF0ZS5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3Vt
ZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQo
KS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAg
Y2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5j
b2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAt
NDUyMiwxNyArNDU0MSwxNyBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQogdm9pZCBTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKLSAgICBpZiAoIXN0YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0Zp
bHRlcigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
ciA9IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBz
dGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+
JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJh
dGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5z
aXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVy
YXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0
aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
ICAgICAgICAgICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0g
c3RhdGljX2Nhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdl
dCgpKTsKIAotICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBz
dGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOworICAg
ICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5n
U1ZHRG9jdW1lbnRzKCkuZ2V0KHJlZmVyZW5jZUZpbHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVk
U1ZHRG9jdW1lbnQqIGNhY2hlZERvY3VtZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpOwpAQCAtNDU0Myw3ICs0NTYyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ1NWR0RvY3VtZW50cygpCiAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZShjYWNoZWREb2N1bWVudCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CisgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygp
LmNsZWFyKCk7CiB9CiAjZW5kaWYKIApAQCAtNDU1OSwxOCArNDU3OCwxOCBAQCBTdHlsZVNoYWRl
ciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2Vi
S2l0Q1NTU2hhZGVyVgogewogICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVk
T3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1No
YWRlcigpKQotICAgICAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICAg
ICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVy
OwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAg
aWYgKCFtX3N0YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hh
ZGVycykKKyAgICBpZiAoIW1fc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUu
aGFzUGVuZGluZ1NoYWRlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJP
cGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
KyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9
IG1fc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVy
YXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25U
eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ1ODcsNyArNDYwNiw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7
CisgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRpYyBi
b29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIp
CkBAIC00NjI5LDcgKzQ2NDgsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbQogewogICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9
IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbHVlcywgbV9zdGF0ZS5zdHlsZS5nZXQoKSwgbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLCBv
cGVyYXRpb25zKTsKKyAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0
ZS5zdHlsZSgpLCBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAg
dHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVy
biB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQpAQCAtNDg3OSwxMiArNDg5OCwxMiBA
QCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGlu
VmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0g
c3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAg
ICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IG1fc3Rh
dGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAg
ICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwg
dXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCksIG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCksIG1fc3RhdGUuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2
Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMo
KS5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFk
b3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5j
YWNoZWRTVkdEb2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNDk4OCw3ICs1MDA3LDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1h
Z2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAogICAgIGlmIChwZW5kaW5nSW1hZ2Ut
PmNzc0ltYWdlVmFsdWUoKSkgewogICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0g
cGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7CkBAIC01MDE4LDIzICs1MDM3LDIzIEBAIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHls
ZVBlbmRpbmdJbWFnZSogcGVuZGluCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJ
bWFnZXMoKQogewotICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0
eSgpKQorICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9p
dGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCku
a2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9y
OjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3Rf
aXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5k
KCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJh
dG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5r
ZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQ
cm9wZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3Ig
KEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZS0+YWNjZXNzQmFja2dy
b3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91
bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3Vu
ZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tn
cm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91
bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAg
YmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRh
ID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkp
OyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAg
ICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVu
dERhdGEqPihtX3N0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29u
dGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNv
bnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSog
aW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsK
QEAgLTUwNDcsNyArNTA2Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFn
ZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBt
X3N0YXRlLnN0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBj
dXJzb3JMaXN0ID0gbV9zdGF0ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5h
dChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVu
dEN1cnNvci5pbWFnZSgpKSB7CkBAIC01MDU5LDE3ICs1MDc4LDE3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBp
ZiAobV9zdGF0ZS5zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5saXN0
U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAg
ICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRl
LnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5
bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0
ZS5zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5
bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwor
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBt
X3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHls
ZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hS
ZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24g
PSBtX3N0YXRlLnN0eWxlKCktPmJveFJlZmxlY3QoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBs
b2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwpAQCAtNTA3OSwxMiArNTA5OCwxMiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6
IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAm
JiBtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9h
ZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5
bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5
bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1h
Z2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0
eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNr
TGF5ZXIgPSBtX3N0YXRlLnN0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFz
a0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVy
KiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xh
eWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkp
KSk7CiAgICAgICAgICAgICB9CkBAIC01MDk1LDcgKzUxMTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZjE1NjkzNTUw
NzczY2ZjZDliOTI1NTk3Y2I0MWVlNjRlNzZjOWM3ZS4uZjU0NzZmNDA4YjlkYTA5NzNjMmU2NGIx
MmUyNmJjMmEyMzcwZTc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xNjUs
MjEgKzE2NSwxMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0
KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnBhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50OyB9Ci0gICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIFJlbmRlclN0eWxl
KiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQorICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsg
fQorICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5yb290RWxlbWVudFN0eWxlKCk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgeyByZXR1
cm4gbV9zdGF0ZS5lbGVtZW50KCk7IH0KKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVy
biBtX2RvY3VtZW50OyB9CiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBzY29wZVJlc29sdmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zY29wZVJlc29sdmVyLmdldCgpOyB9Ci0gICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0
aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2
b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fc3RhdGUu
Zm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2
ZVpvb20oZmxvYXQgZikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3Rp
dmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9zdGF0
ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KLSAgICB2b2lk
IHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fc3RhdGUuZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgIHZvaWQg
c2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9z
dGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRh
dGlvbik7IH0KLSAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnBhcmVudE5vZGU7IH0KKyAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnBhcmVudE5vZGUoKTsgfQogCiAgICAgLy8gRklYTUU6IEl0IGNvdWxkIGJlIGJldHRl
ciB0byBjYWxsIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoKSBkaXJlY3RseSBh
ZnRlciB3ZSBmYWN0b3IgU3R5bGVSc29sdmVyIGZ1cnRoZXIuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg5MApAQCAtMjA3LDcgKzE5OSw2IEBAIHB1
YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShF
bGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVE
Tyk7CiAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7CiAgICAgUmVuZGVyU3R5bGUqIGxv
Y2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
UnVsZVNldChSdWxlU2V0Kik7CkBAIC0zMTQsOCArMzA1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShj
b25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX3N0YXRlLm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7
IH0KLQogICAgIHN0cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxl
SW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQogICAgICAgICBpbnQmIGZp
cnN0UnVsZUluZGV4OwpAQCAtMzg3LDcgKzM3Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzb3J0
TWF0Y2hlZFJ1bGVzKCk7CiAgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBydWxlTWF0Y2hlcyhjb25zdCBSdWxl
RGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYpOwogICAgIGJvb2wg
Y2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVs
ZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKICAgICBlbnVtIFN0eWxlQXBwbGlj
YXRpb25QYXNzIHsKQEAgLTQzMiw3NSArNDIxLDE0MCBAQCBwdWJsaWM6CiAgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0YXRlKCkKLSAg
ICAgICAgOiBlbGVtZW50KDApCi0gICAgICAgICwgc3R5bGVkRWxlbWVudCgwKQotICAgICAgICAs
IHBhcmVudE5vZGUoMCkKLSAgICAgICAgLCBwYXJlbnRTdHlsZSgwKQotICAgICAgICAsIHJvb3RF
bGVtZW50U3R5bGUoMCkKLSAgICAgICAgLCByZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgICAgICwg
c2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VVRE8pCi0g
ICAgICAgICwgZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICAgICAsIGRpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKLSAgICAgICAgLCBlbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMoZmFsc2UpCi0gICAgICAgICwgbW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29s
dmluZ1N0eWxlKQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQot
ICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisgICAgICAg
IDogbV9lbGVtZW50KDApCisgICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCisgICAgICAgICwg
bV9wYXJlbnROb2RlKDApCisgICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQorICAgICAgICAsIG1f
cm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAg
ICAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwgbV9wc2V1ZG9TdHlsZShO
T1BTRVVETykKKyAgICAgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKKyAg
ICAgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAgICAgLCBt
X2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBtX21vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgLCBtX2FwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZShmYWxzZSkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgICAgICwgaGFzUGVu
ZGluZ1NoYWRlcnMoZmFsc2UpCisgICAgICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkK
ICNlbmRpZgotICAgICAgICAsIGxpbmVIZWlnaHRWYWx1ZSgwKQotICAgICAgICAsIGZvbnREaXJ0
eShmYWxzZSkKLSAgICAgICAgLCBoYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgICAgICwgYmFj
a2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikgeyB9CisgICAgICAgICwgbV9saW5lSGVp
Z2h0VmFsdWUoMCkKKyAgICAgICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAgICAgLCBtX2hh
c1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91
bmRGaWxsTGF5ZXIpIHsgfQorCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGluaXRFbGVtZW50
KEVsZW1lbnQqKTsKKyAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50Kiwg
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VV
RE8sIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOworICAgICAgICB2b2lkIGNs
ZWFyKCk7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVudDsgfQorICAgICAgICB2b2lkIHNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQor
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgp
OyB9CisgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHRha2VTdHlsZSgpIHsgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOyB9CisKKyAgICAgICAgU3RhdGljQ1NTUnVsZUxpc3QqIGVuc3Vy
ZVJ1bGVMaXN0KCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHRha2VSdWxlTGlz
dCgpIHsgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOyB9CisKKyAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQor
ICAgICAgICB2b2lkIHNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgeyBt
X3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBSZW5kZXJT
dHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHls
ZTsgfQorCisgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgICAgICB2b2lkIHNldFNhbWVP
cmlnaW5Pbmx5KGJvb2wgaXNTYW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gaXNT
YW1lT3JpZ2luT25seTsgfQorICAgICAgICBib29sIGlzU2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7
IHJldHVybiBtX3NhbWVPcmlnaW5Pbmx5OyB9CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9TdHlsZTsgfQorICAgICAgICBFSW5zaWRlTGluayBl
bGVtZW50TGlua1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9Cisg
ICAgICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IH0KKyAgICAgICAgdm9pZCBzZXRFbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMoYm9vbCBpc0FmZmVjdGVkKSB7IG1fZWxlbWVudEFmZmVjdGVk
QnlDbGFzc1J1bGVzID0gaXNBZmZlY3RlZDsgfQorICAgICAgICBib29sIGVsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzOyB9CisgICAgICAgIHZvaWQgc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbW9kZSkg
eyBtX21vZGUgPSBtb2RlOyB9CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgICAgIAotcHVibGljOgorICAgICAgICB2b2lk
IHNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBpc0FwcGx5OyB9CisgICAgICAgIHZvaWQgc2V0QXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlID0gaXNBcHBseTsgfQorICAgICAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlOyB9CisgICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAg
ICAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsg
cmV0dXJuIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgfQorI2lmIEVOQUJMRShDU1NfRklMVEVS
UykgJiYgRU5BQkxFKFNWRykKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwJiBwZW5kaW5n
U1ZHRG9jdW1lbnRzKCkgeyByZXR1cm4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOyB9CisjZW5kaWYK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIHZvaWQgc2V0SGFzUGVuZGluZ1NoYWRl
cnMoYm9vbCBoYXNQZW5kaW5nU2hhZGVycykgeyBtX2hhc1BlbmRpbmdTaGFkZXJzID0gaGFzUGVu
ZGluZ1NoYWRlcnM7IH0KKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nU2hhZGVycygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzUGVuZGluZ1NoYWRlcnM7IH0KKyNlbmRpZgorCisgICAgICAgIHZvaWQgc2V0
TGluZUhlaWdodFZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkgeyBtX2xpbmVIZWlnaHRWYWx1ZSA9IHZh
bHVlOyB9CisgICAgICAgIENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWUoKSB7IHJldHVybiBtX2xp
bmVIZWlnaHRWYWx1ZTsgfQorICAgICAgICB2b2lkIHNldEZvbnREaXJ0eShib29sIGlzRGlydHkp
IHsgbV9mb250RGlydHkgPSBpc0RpcnR5OyB9CisgICAgICAgIGJvb2wgZm9udERpcnR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGlydHk7IH0KKworICAgICAgICB2b2lkIGNhY2hlQm9yZGVyQW5k
QmFja2dyb3VuZCgpOworICAgICAgICBib29sIGhhc1VBQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgICAgIEJvcmRlckRhdGEgYm9yZGVyRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQorICAgICAgICBGaWxsTGF5ZXIgYmFja2dy
b3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9CisgICAgICAgIENv
bG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9
CisKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJl
dHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1f
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgICAgIHZv
aWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFpvb20oZik7
IH0KKyAgICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkg
fD0gbV9zdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgICAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRUZXh0U2l6ZUFk
anVzdChiKTsgfQorICAgICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKTsgfQorICAgICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24g
dGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFRleHRPcmllbnRh
dGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRh
KiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNoZWRSdWxlczsgfQorICAgICAg
ICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgogICAgICAgICAvLyBG
SVhNRShidWcgMTA4NTYzKTogdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmV2aWV3LCB0aGVzZSBtZW1i
ZXIKICAgICAgICAgLy8gdmFyaWFibGVzIGFyZSBwdWJsaWMuIEhvd2V2ZXIgd2Ugc2hvdWxkIGFk
ZCBtZXRob2RzIHRvIGFjY2VzcwogICAgICAgICAvLyB0aGVzZSB2YXJpYWJsZXMuCi0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0g
ICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQ7Ci0gICAgICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudE5vZGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZTsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGU7CisgICAgICAgIEVsZW1lbnQqIG1fZWxl
bWVudDsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOworICAgICAgICBTdHls
ZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisgICAgICAgIENvbnRhaW5lck5vZGUqIG1fcGFy
ZW50Tm9kZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7CisgICAgICAgIFJl
bmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgICAgIGJvb2wgc2FtZU9yaWdpbk9ubHk7Ci0g
ICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOworICAgICAgICBSZW5kZXJSZWdpb24qIG1fcmVn
aW9uRm9yU3R5bGluZzsKKyAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OworICAgICAgICBQ
c2V1ZG9JZCBtX3BzZXVkb1N0eWxlOwogCi0gICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5r
U3RhdGU7CisgICAgICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKIAotICAgICAg
ICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKKyAgICAgICAgYm9vbCBtX2Rpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAotICAgICAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlczsKKyAgICAgICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsK
IAotICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvOwotCi0gICAgICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZSBtb2RlOworICAgICAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbV9tb2RlOwog
CiAgICAgICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgZm9yIGFuIGVsZW1lbnQsCiAgICAgICAgIC8vIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNl
ZCBmb3IgbWVyZ2Ugc29ydGluZy4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+
IG1hdGNoZWRSdWxlczsKLSAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlz
dDsKKyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwor
ICAgICAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CiAKLSAgICAgICAg
Ym9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGU7CiAKLSAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgcGVuZGluZ0ltYWdlUHJvcGVy
dGllczsKKyAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5n
U2hhZGVyczsKKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwogI2VuZGlmCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgICAgICBQZW5kaW5nU1ZHRG9j
dW1lbnRNYXAgcGVuZGluZ1NWR0RvY3VtZW50czsKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50
TWFwIG1fcGVuZGluZ1NWR0RvY3VtZW50czsKICNlbmRpZgotICAgICAgICBDU1NWYWx1ZSogbGlu
ZUhlaWdodFZhbHVlOwotICAgICAgICBib29sIGZvbnREaXJ0eTsKKyAgICAgICAgQ1NTVmFsdWUq
IG1fbGluZUhlaWdodFZhbHVlOworICAgICAgICBib29sIG1fZm9udERpcnR5OwogCi0gICAgICAg
IGJvb2wgaGFzVUFBcHBlYXJhbmNlOwotICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGE7Ci0g
ICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yOworICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgICAgICBCb3JkZXJE
YXRhIG1fYm9yZGVyRGF0YTsKKyAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Cisg
ICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogICAgIH07CiAKICAgICBzdGF0aWMgUmVu
ZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2
YWlsYWJsZTsgfQpAQCAtNTEzLDE1ICs1NjcsMjMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwogCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAg
IGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0lu
dExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogCiAgICAgQ1NTVG9TdHls
ZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNT
U09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckNTU09NV3JhcHBlcnM7IH0KLQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0
ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX3N0YXRlLnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAg
dm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNl
dFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9u
KFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50
YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorICAgIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188031</attachid>
            <date>2013-02-13 01:01:26 -0800</date>
            <delta_ts>2013-02-13 09:28:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108563-20130213175754.patch</filename>
            <type>text/plain</type>
            <size>146583</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTAyNjM3NjJiMmMyNTdl
YmE4NTc2YzQ2ZWM3NjZlMTllZDJhOWE3OC4uYzFmZTcyYTVjNGMyZTg1ZTU4MjNlZmY3ZDUzYzVm
ZmI4NmY2MTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wMi0xMSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1JlZmFjdG9yaW5n
XSBTdHlsZVJlc29sdmVyOjpTdGF0ZSBzaG91bGQgaGF2ZSBtZXRob2RzIHRvIGFjY2VzcyBpdHMg
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU2MworCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgor
CisgICAgICAgIE1hZGUgYWxsIG1lbWJlciB2YXJpYWJsZXMgcHJpdmF0ZSBhbmQgYWRkZWQgbWV0
aG9kcyB0byBhY2Nlc3MgdGhlCisgICAgICAgIHZhcmlhYmxlcywgYmVjYXVzZSBtb3N0IG9mIHRo
ZSBtZW1iZXIgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuCisgICAgICAgIFdlIGRvbid0IG5lZWQg
dG8gdXBkYXRlIHRob3NlIHJlYWQtb25seSB2YXJpYWJsZXMgd2hpbGUgcmVzb2x2aW5nCisgICAg
ICAgIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlY2F1c2UganVzdCByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhv
clJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudCk6CisgICAgICAgIE1vZGlmaWVkIHRv
IGludm9rZSBtX3N0YXRlLmluaXRFbGVtZW50IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcworICAgICAg
ICBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IG1fc3RhdGUncyBlbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAg
ICBNb3ZlZCBmcm9tIFN0eWxlUmVzb2x2ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxl
QWZmZWN0aW5nQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxl
Rm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVT
dHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBBU1NFUlQgaW4gdGhlIGZpcnN0
IGxpbmUuIEFTU0VSVChtX3N0YXRlLnBhcmVudFN0eWxlKSB3b3VsZCBiZQorICAgICAgICB3cm9u
ZywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIHByZXZpb3VzIHJlc29sdmluZy4gSG93ZXZlciwKKyAg
ICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZSB3aWxsIGFsc28gdXBkYXRlIG1fc3RhdGUucGFyZW50
U3R5bGUuIE5vIGNvZGUgaW4KKyAgICAgICAgcHNldWRvU3R5bGVGb3JFbGVtZW50IGRlcGVuZHMg
b24gcHJldmlvdXMgcmVzb2x2aW5nIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRqdXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIHBhcmFtZXRlciwgZHluYW1pY1BzZXVkbywg
YmVjYXVzZSBkeW5hbWljUHNldWRvIGluCisgICAgICAgIFN0YXRlIGNsYXNzIGlzIGp1c3QgdXNl
ZCBmb3IgcmV0dXJuaW5nIG1hdGNoZWQgcHNldWRvIHN0eWxlIGZyb20KKyAgICAgICAgdGhpcyBy
dWxlTWF0Y2hlcyB0byBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QuIE5vIG5lZWQgdG8ga2Vl
cAorICAgICAgICBkeW5hbWljUHNldWRvIHdoaWxlIHJlc29sdmluZyBzdHlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAg
UmVtb3ZlZCBtX3BzZXVkb1N0eWxlID0gTk9QU0VVRE8sIGJlY2F1c2UgdGhpcyBtZXRob2QgdXNl
cyBqdXN0CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlZC4gU2VsZWN0b3JDaGVja2Vy
IGRvZXNuJ3Qgc2VlIFN0eWxlUmVzb2x2ZXIncworICAgICAgICBtX3BzZXVkb1N0eWxlIGRpcmVj
dGx5LiBOZWVkIHRvIHVzZSBTZWxlY3RvckNoZWNrZXJDb250ZXh0LiBTbyBubworICAgICAgICBu
ZWVkIHRvIHNldCBtX3BzZXVkb1N0eWxlIHRvIGJlIE5PUFNFVURPLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNr
QnJlYWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5k
aW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NW
R0RvY3VtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Omhhc1BhcmVudE5vZGUpOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAgICAg
TW9kaWZpZWQgdG8gdXNlIGNsZWFyIGF0IHRoZSBlbmQgb2Ygc3R5bGVGb3JFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnRha2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6ZW5zdXJlUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6cGFyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0UGFyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnBhcmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjpyZWdpb25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpzZXRTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpTdGF0ZTo6aXNTYW1lT3JpZ2luT25seSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6cHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmVsZW1lbnRMaW5rU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0RWxlbWVudEFmZmVjdGVkQnlDbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwZW5kaW5nU1ZHRG9jdW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRIYXNQZW5kaW5nU2hhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aGFzUGVuZGluZ1NoYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldExpbmVIZWln
aHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bGluZUhl
aWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRG
b250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmZvbnRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3Jk
ZXJBbmRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpoYXNVQUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmJvcmRlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmJhY2tncm91bmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpiYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnNldEVmZmVjdGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9uKToKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLCAuLi4gYW5kIHNldFRleHRPcmllbnRhdGlvbiB3ZXJlIG1vdmVkIGZyb20KKyAg
ICAgICAgU3R5bGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjptYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmFkZE1hdGNoZWRSdWxlKToKKyAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgIFRoZXNlIGZv
bnREZXNjcmlwdGlvbiwgLi4uLCBzZXRUZXh0T3JpZW50YXRpb24gYXJlIHdyYXBwZXJzIHRvCisg
ICAgICAgIGludm9rZSBTdGF0ZSdzIG1ldGhvZHMuIFN0eWxlQnVpbGRlciBzdGlsbCBkZXBlbmRz
IG9uIFN0eWxlUmVzb2x2ZXIKKyAgICAgICAgYW5kIGludm9rZXMgdGhlc2UgbWV0aG9kcy4gU28g
d2UgbmVlZCB0aGVzZSB3cmFwcGVycy4KKwogMjAxMy0wMi0xMiAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBHTGliIHVu
aWNvZGUgYmFja2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CmluZGV4IGFiNTZmNjYxMTc5N2ZkOTQ3Nzk2ZjQ4ZjMxMzllNzgxM2E5N2U4M2QuLmQxZTljNjBk
M2I5ZGVkN2UyMGZjNzY1ZTljNzdhNDMxNmUzYjZkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgSEFORExF
X0lOSEVSSVQocHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgXAogeyBcCi0gICAgc3Znc3R5
bGUtPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKS0+cHJvcCgpKTsgXAor
ICAgIHN2Z3N0eWxlLT5zZXQjI1Byb3Aoc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKS0+
cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCkBAIC0xMTAsMTAgKzExMCwxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwogCiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
LSAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZS0+YWNjZXNzU1ZHU3R5
bGUoKTsKKyAgICBTVkdSZW5kZXJTdHlsZSogc3Znc3R5bGUgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nl
c3NTVkdTdHlsZSgpOwogCi0gICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlICYm
IHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSB8fCAoIXN0YXRlLnBhcmVudE5vZGUgJiYgdmFsdWUtPmlzSW5oZXJp
dGVkVmFsdWUoKSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYg
dmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVy
aXRlZFZhbHVlKCkpOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEgbGlzdCB0aGF0IG1hcHMg
dGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIKICAgICAvLyBjb3JyZXNwb25kaW5nIGZyb250
LWVuZCBSZW5kZXJTdHlsZSB2YWx1ZXMuIFNob3J0aGFuZHMoZS5nLiBib3JkZXIsCkBAIC0yMzAs
NyArMjMwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnUGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHls
ZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
UGFyZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5
cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5m
aWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQpAQCAtMjQwLDE0ICsyNDAsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7CiAgICAgICAgICAgICAg
ICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBl
KCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xv
cigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JD
U1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmko
KSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFy
ZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ry
b2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHls
ZS0+c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRVcmkoKSwg
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMjU3
LDcgKzI1Nyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQ
YWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2
Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNW
R0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlLT5jb2xvcigpKSwgc3ZnUGFpbnQt
PnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3Ryb2tlUGFp
bnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2Z1Bh
aW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNjQsNyAr
MzY0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hcmtlclN0YXJ0
UmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5n
KHMsIHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5z
ZXRNYXJrZXJTdGFydFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVy
RnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgpAQCAtMzc4LDcg
KzM3OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJNaWRS
ZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmco
cywgc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dE1hcmtlck1pZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJv
bUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFya2VyRW5kOgpAQCAtMzkyLDcgKzM5
Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VSSSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFN0cmluZ1ZhbHVlKCk7CiAKLSAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXJrZXJFbmRSZXNv
dXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywg
c3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1h
cmtlckVuZFJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKQEAgLTQyOSw3ICs0
MjksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpCiAgICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsdGVyUmVzb3Vy
Y2UoU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0
YXRlLmVsZW1lbnQtPmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWx0
ZXJSZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJp
bmcocywgc3RhdGUuZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6CkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KTsKIAotICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5k
b2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZH
VVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0YXRlLmRv
Y3VtZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlDbGlwUGF0aDoKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpCiAgICAg
ICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogCi0gICAg
ICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgp
KSk7CisgICAgICAgICAgICBzdmdzdHlsZS0+c2V0Q2xpcHBlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdGF0ZS5kb2N1bWVudCgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dEFuY2hvcjoKQEAgLTQ3OCwxNCArNDc4LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwg
U3RvcENvbG9yKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAg
ICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1
ZShzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsK
KyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0NvbG9y
Q1NTVmFsdWUoc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNv
bG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNl
dExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0aWNfY2FzdDxTVkdD
b2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAgICAgICAgICAgICBz
dmdzdHlsZS0+c2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN0YXRp
Y19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RP
cGFjaXR5OgpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29kQ29s
b3IpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdGF0
aWNfY2FzdDxTVkdDb2xvcio+KHZhbHVlKSwgc3RhdGUuc3R5bGUtPmNvbG9yKCkpKTsKKyAgICAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBAIC01NTAsNyArNTUwLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0U3ZnU2hhZG93OiB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBzdmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxl
LT5zdmdTdHlsZSgpLT5zaGFkb3coKSA/IG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHls
ZS0+c3ZnU3R5bGUoKS0+c2hhZG93KCkpIDogMCkpOworICAgICAgICAgICAgICAgIHJldHVybiBz
dmdzdHlsZS0+c2V0U2hhZG93KGFkb3B0UHRyKHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxl
KCktPnNoYWRvdygpID8gbmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0
eWxlKCktPnNoYWRvdygpKSA6IDApKTsKICAgICAgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJp
bWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN2
Z3N0eWxlLT5zZXRTaGFkb3cobnVsbHB0cik7CiAKQEAgLTU2NSw5ICs1NjUsOSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBz
dGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGZpcnN0VmFsdWUpOwotICAgICAgICAgICAgSW50UG9p
bnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKSwKLSAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21w
dXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUp
KTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSkg
OiAwOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSksCisgICAgICAg
ICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVy
ID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAg
ICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggYjE5YWY3NjljMDdlMTM3MWViZDJkNjdiYmI4ZjU4NDRiMWVkNDYyNy4u
MTcxNmJhOTI5NDg4MjU0ODVkYTc2MGZjMjQ0ZGY1NzVmNGJjNmFjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTk0LDE0ICsxOTQsMTQgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAo
aXNJbmhlcml0KSB7IFwKLSAgICBtX3N0YXRlLnN0eWxlLT5zZXQjI1Byb3AobV9zdGF0ZS5wYXJl
bnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKG1fc3Rh
dGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5l
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklU
KHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3RhdGUuc3R5bGUtPnNl
dCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5
bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCiAgICAgcmV0
dXJuOyBcCiB9CiAKQEAgLTIyNCw2ICsyMjQsNDEgQEAgc3RhdGljIFN0eWxlUHJvcGVydHlTZXQq
IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogfQogCiAKK2lubGluZSBTdGF0aWNDU1NSdWxlTGlz
dCogU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVJ1bGVMaXN0KCkKK3sKKyAgICBpZiAoIW1f
cnVsZUxpc3QpCisgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRl
KCk7CisgICAgcmV0dXJuIG1fcnVsZUxpc3QuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjpjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKQoreworICAgIG1faGFz
VUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFzQXBwZWFyYW5jZSgpOworICAgIGlmIChtX2hhc1VB
QXBwZWFyYW5jZSkgeworICAgICAgICBtX2JvcmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsK
KyAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7
CisgICAgICAgIG1fYmFja2dyb3VuZENvbG9yID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7
CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQor
eworICAgIG1fZWxlbWVudCA9IDA7CisgICAgbV9zdHlsZWRFbGVtZW50ID0gMDsKKyAgICBtX3Bh
cmVudFN0eWxlID0gMDsKKyAgICBtX3BhcmVudE5vZGUgPSAwOworICAgIG1fcmVnaW9uRm9yU3R5
bGluZyA9IDA7CisgICAgbV9ydWxlTGlzdCA9IDA7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOworI2VuZGlmCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIG1fcGVuZGluZ1NWR0RvY3Vt
ZW50cy5jbGVhcigpOworI2VuZGlmCit9CisKIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIo
RG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICA6
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCiAgICAg
LCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29sdmVy
Ojpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCkBAIC00MjEsMTEgKzQ1NiwxMSBAQCBib29s
IE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogdm9pZCBT
dHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVlc3QmIG1h
dGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKG1hdGNoUmVx
dWVzdC5ydWxlU2V0KTsKLSAgICBBU1NFUlQobV9zdGF0ZS5lbGVtZW50KTsKKyAgICBBU1NFUlQo
bV9zdGF0ZS5lbGVtZW50KCkpOwogCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudDsKLSAgICBTdHlsZWRFbGVtZW50KiBzdHls
ZWRFbGVtZW50ID0gc3RhdGUuc3R5bGVkRWxlbWVudDsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGUuZWxlbWVudCgpOworICAgIGNvbnN0IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQg
PSBzdGF0ZS5zdHlsZWRFbGVtZW50KCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9J
ZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5
KCkpIHsKICAgICAgICAgQVNTRVJUKHN0eWxlZEVsZW1lbnQpOwpAQCAtNDY1LDEzICs1MDAsMTMg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJl
cXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVIKIAogdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0
TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwg
UnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxp
bmcpCisgICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNl
bGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciA9
IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkp
LnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rv
ciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZy0+bm9kZSgp
KSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+bm9kZSgpKSkp
IHsKICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gbWF0Y2hSZXF1ZXN0LnJ1bGVT
ZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAg
ICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7CiAgICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVsZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1w
dHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwgcnVsZVJhbmdlKTsKQEAgLTQ4MiwyNCArNTE3
LDIzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
Y29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLm1hdGNoZWRSdWxlcy5pc0VtcHR5KCkp
CisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMgPSBzdGF0ZS5t
YXRjaGVkUnVsZXMoKTsKKyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwogCi0gICAgaWYgKHN0YXRlLm1vZGUg
PT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKLSAgICAgICAgaWYgKCFzdGF0
ZS5ydWxlTGlzdCkKLSAgICAgICAgICAgIHN0YXRlLnJ1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxp
c3Q6OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUubWF0
Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgc3RhdGUucnVsZUxpc3QtPnJ1bGVz
KCkuYXBwZW5kKHN0YXRlLm1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5jcmVhdGVDU1NPTVdyYXBw
ZXIoKSk7CisgICAgaWYgKHN0YXRlLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3Rp
bmdSdWxlcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3RhdGUuZW5zdXJlUnVsZUxpc3QoKS0+cnVsZXMo
KS5hcHBlbmQobWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9m
IG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm1hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewot
ICAgICAgICBpZiAoc3RhdGUuc3R5bGUgJiYgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5jb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRVbmlxdWUoKTsKLSAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5t
YXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+cHJvcGVydGllcygpLCBzdGF0ZS5tYXRjaGVkUnVsZXNb
aV0tPnJ1bGUoKSwgc3RhdGUubWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCksIHN0YXRl
Lm1hdGNoZWRSdWxlc1tpXS0+cHJvcGVydHlXaGl0ZWxpc3RUeXBlKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYg
KHN0YXRlLnN0eWxlKCkgJiYgbWF0Y2hlZFJ1bGVzW2ldLT5jb250YWluc1VuY29tbW9uQXR0cmli
dXRlU2VsZWN0b3IoKSkKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOwor
ICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIG1hdGNoZWRSdWxlc1tpXS0+cnVs
ZSgpLT5wcm9wZXJ0aWVzKCksIG1hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLCBtYXRjaGVkUnVsZXNb
aV0tPmxpbmtNYXRjaFR5cGUoKSwgbWF0Y2hlZFJ1bGVzW2ldLT5wcm9wZXJ0eVdoaXRlbGlzdFR5
cGUoKSk7CiAgICAgfQogfQogCkBAIC01MTAsMTIgKzU0NCwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1
bGVzIGJ5IHRyYXZlcnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlm
IGl0IGdvdCBpbmNvbnNpc3RlbnQpLgotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3Bl
ZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0
YXRlLmVsZW1lbnQpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHlsZXMgPSBtX3N0YXRl
LmVsZW1lbnQtPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOworICAgIGlmIChtX3Nj
b3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYmIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJl
U3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgYm9vbCBhcHBs
eUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgpLT50cmVlU2NvcGUoKS0+YXBwbHlBdXRo
b3JTdHlsZXMoKTsKICAgICAgICAgYm9vbCBkb2N1bWVudFNjb3BlID0gdHJ1ZTsKICAgICAgICAg
dW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29sdmVyLT5zdGFja1NpemUoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3BlU2l6ZTsgKytpKSB7Ci0gICAgICAgICAg
ICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0ZS5tYXRj
aGVkUnVsZXMoKS5jbGVhcigpOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9y
UnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwogCiAgICAgICAgICAg
ICBjb25zdCBTdHlsZVNjb3BlUmVzb2x2ZXI6OlN0YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVJl
c29sdmVyLT5zdGFja0ZyYW1lQXQoaSk7CkBAIC01NDYsNyArNTgwLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHQKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAgIHJl
dHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5k
aWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCk7CisgICAgcmV0dXJuIG1fc2Nv
cGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKQEAgLTU1NywxNyArNTkxLDE3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hI
b3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKICNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBBU1NFUlQobV9zY29wZVJlc29sdmVyKTsKIAotICAg
IG1fc3RhdGUubWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMo
KS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAogICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hl
ZFJ1bGVzOwotICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVt
ZW50LCBtYXRjaGVkUnVsZXMpOworICAgIG1fc2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMo
bV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNo
ZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5
UnVsZXMsIG1fc3RhdGUuZWxlbWVudCksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5
UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKICAgICB9CiAgICAgc29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAjZWxzZQpAQCAtNTc4LDEwICs2MTIsMTAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsK
LSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1
bGVzKCkuY2xlYXIoKTsKICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0
Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKLSAgICBpZiAoIW1fc3RhdGUuZWxlbWVu
dCkKKyAgICBpZiAoIW1fc3RhdGUuZWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBNYXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgpAQCAtNTk5LDcgKzYzMyw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKICAgICBpZiAoIW1fcnVsZVNldHMudXNlclN0eWxlKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1f
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVz
ZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgTWF0Y2hS
ZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBpbmNsdWRlRW1wdHlS
dWxlcyk7CkBAIC02MTIsNyArNjQ2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0
KiBydWxlcykKIHsKLSAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fc3Rh
dGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKICAgICAKICAgICByZXN1bHQucmFuZ2VzLmxhc3RV
QVJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKICAgICBSdWxlUmFu
Z2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5VQVJ1bGVSYW5nZSgpOwpAQCAtNjI5LDcgKzY2
Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjCiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBm
b3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNv
bHZlLgogICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRh
dGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KLSAgICBib29s
IGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0
ZW50KHN0YXRlLnBhcmVudE5vZGUpOworICAgIGJvb2wgY2FuVXNlRmFzdFJlamVjdCA9IG1fc2Vs
ZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQoc3RhdGUucGFyZW50Tm9kZSgpKTsK
IAogICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTYzOSw3ICs2NzMsOCBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBydWxlcywgYwogCiAgICAgICAgIFN0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsK
ICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbE1hdGNoUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsK
LSAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHJ1bGVEYXRhLCBtYXRjaFJlcXVlc3Quc2NvcGUpKSB7
CisgICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICAgICAgaWYg
KHJ1bGVNYXRjaGVzKHJ1bGVEYXRhLCBtYXRjaFJlcXVlc3Quc2NvcGUsIGR5bmFtaWNQc2V1ZG8p
KSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBs
eSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKICAg
ICAgICAgICAgIGlmICghcHJvcGVydGllcyB8fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFt
YXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMpKSB7CkBAIC02NDcsMTkgKzY4MiwxOSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgYwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQg
Z2V0TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMg
bmVlZGVkLgotICAgICAgICAgICAgaWYgKHN0YXRlLnNhbWVPcmlnaW5Pbmx5ICYmICFydWxlRGF0
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5p
c1NhbWVPcmlnaW5Pbmx5KCkgJiYgIXJ1bGVEYXRhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4o
KSkgewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hS
dWxlKGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQg
YSBwc2V1ZG8gYml0IGlmCiAgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEg
cHNldWRvLWVsZW1lbnQuCi0gICAgICAgICAgICBpZiAoc3RhdGUuZHluYW1pY1BzZXVkbyAhPSBO
T1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSA9PSBOT1BTRVVETykgewotICAgICAgICAgICAg
ICAgIGlmIChzdGF0ZS5tb2RlID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7
CisgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVkbyAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1
ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1vZGUo
KSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNl
KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZS5keW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNF
VURPSUQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRIYXNQc2V1ZG9TdHls
ZShzdGF0ZS5keW5hbWljUHNldWRvKTsKKyAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1BzZXVk
byA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9sYXN0IHJ1bGUgaW5k
aWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KICAgICAgICAgICAgICAgICArK3J1bGVS
YW5nZS5sYXN0UnVsZUluZGV4OwpAQCAtNjY3LDcgKzcwMiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1
bGVzLCBjCiAgICAgICAgICAgICAgICAgICAgIHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9IHJ1
bGVSYW5nZS5sYXN0UnVsZUluZGV4OwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVs
ZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgICAgIGFkZE1hdGNo
ZWRSdWxlKCZydWxlRGF0YSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVs
ZSgmcnVsZURhdGEpOwogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC02ODUsNyArNzIwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKIAogdm9pZCBT
dHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKIHsKLSAgICBzdGQ6OnNvcnQobV9zdGF0
ZS5tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBh
cmVSdWxlcyk7CisgICAgc3RkOjpzb3J0KG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuYmVnaW4oKSwg
bV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKIH0KIAogdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZVNNSUxQcm9wZXJ0aWVzKQpAQCAtNjk3LDE3ICs3MzIsMTcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQ
cm9wZXJ0aWUKICAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVzdWx0LCBmYWxzZSk7CiAKICAgICAv
LyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRp
b25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAgaWYgKG1fc3RhdGUuc3R5bGVk
RWxlbWVudCkgewotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9z
dGF0ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKKyAgICBp
ZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJv
cGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpKTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBw
ZWQgZGVjbGFyYXRpb25zLgogICAgICAgICAvLyBUYWJsZXMgYW5kIHRhYmxlIGNlbGxzIHNoYXJl
IGFuIGFkZGl0aW9uYWwgbWFwcGVkIHJ1bGUgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICAgICAgICAg
Ly8gYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRz
IG9uIHRoZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25h
bFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKIAotICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRF
bGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAg
ICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0
YXRlLnN0eWxlZEVsZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShp
c0F1dG8pOworICAgICAgICAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1M
RWxlbWVudChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJB
dXRvQXR0cmlidXRlKGlzQXV0byk7CiAgICAgICAgICAgICBpZiAoaXNBdXRvKQogICAgICAgICAg
ICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKHJlc3VsdCwgdGV4dERpcmVjdGlvbiA9PSBMVFIg
PyBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwog
ICAgICAgICB9CkBAIC03MTgsMTggKzc1MywxOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
QWxsUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZQog
ICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNo
ZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYgbV9zdGF0ZS5zdHlsZWRFbGVt
ZW50LT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
ICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5p
bmxpbmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMg
bG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVk
aWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGlu
Zy4KLSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVk
RWxlbWVudC0+aW5saW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIW1fc3RhdGUuc3R5bGVkRWxl
bWVudC0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVh
YmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUo
KSAmJiAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAg
IC8vIEZJWE1FOiBDb25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhy
ZXN1bHQsIG1fc3RhdGUuc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHls
ZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBt
X3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hl
YWJsZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBh
bmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAm
JiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQgJiYg
bV9zdGF0ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVu
dFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihtX3N0YXRl
LnN0eWxlZEVsZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyog
aXNDYWNoZWFibGUgKi8pOworICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5
bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5
bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlz
Q2FjaGVhYmxlICovKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVy
dGllcyk7CiAjZW5kaWYKQEAgLTc0NCwxMiArNzc5LDE3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05h
bWVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBtX2VsZW1lbnQgPSBlOworICAg
IG1fc3R5bGVkRWxlbWVudCA9IGUgJiYgZS0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4oZSkgOiAwOworICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBl
LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6
IE5vdEluc2lkZUxpbms7Cit9CisKIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVt
ZW50KEVsZW1lbnQqIGUpCiB7Ci0gICAgaWYgKG1fc3RhdGUuZWxlbWVudCAhPSBlKSB7Ci0gICAg
ICAgIG1fc3RhdGUuZWxlbWVudCA9IGU7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGVkRWxlbWVudCA9
IG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0YXRlLmVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fc3RhdGUuZWxlbWVudCkgOiAwOwotICAgICAg
ICBtX3N0YXRlLmVsZW1lbnRMaW5rU3RhdGUgPSBkb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRl
KCktPmRldGVybWluZUxpbmtTdGF0ZShlKTsKKyAgICBpZiAobV9zdGF0ZS5lbGVtZW50KCkgIT0g
ZSkgeworICAgICAgICBtX3N0YXRlLmluaXRFbGVtZW50KGUpOwogICAgICAgICBpZiAoZSAmJiBl
ID09IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBlLT5k
b2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CiAgICAg
ICAgICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50
KGZhbHNlKTsKQEAgLTc1NywzNSArNzk3LDMyIEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZVJl
c29sdmVyOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSUQpCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6aW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCogZG9jdW1lbnQsIEVsZW1lbnQqIGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUHNldWRvSWQgcHNldWRvSWQsIFJlbmRlclJlZ2lv
biogcmVnaW9uRm9yU3R5bGluZykKIHsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IHN0YXRlLnBzZXVkb1N0eWxlID0gcHNldWRvSUQ7CisgICAgbV9wc2V1ZG9TdHlsZSA9IHBzZXVk
b0lkOworICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CiAKICAgICBp
ZiAoZSkgewogICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBjb250ZXh0KGUpOwotICAgICAg
ICBzdGF0ZS5wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5
bGUoKTsKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhl
cml0YW5jZSgpID8gMCA6CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9k
ZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0
LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6CiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA/
IHBhcmVudFN0eWxlIDoKLSAgICAgICAgICAgIHN0YXRlLnBhcmVudE5vZGUgPyBzdGF0ZS5wYXJl
bnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAgICAgICAgc3RhdGUuZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOworICAgICAgICAgICAgbV9w
YXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKKyAgICAgICAgbV9k
aXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBvaW50KCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUucGFyZW50Tm9kZSA9IDA7Ci0gICAgICAgIHN0YXRl
LnBhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgICAgIHN0YXRlLmRpc3RyaWJ1dGVkVG9J
bnNlcnRpb25Qb2ludCA9IGZhbHNlOworICAgICAgICBtX3BhcmVudE5vZGUgPSAwOworICAgICAg
ICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7CisgICAgICAgIG1fZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgTm9kZSogZG9jRWxlbWVudCA9IGUg
PyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0gICAgUmVuZGVyU3R5bGUq
IGRvY1N0eWxlID0gZG9jdW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICBzdGF0ZS5yb290RWxl
bWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9j
dW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgbV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVu
dCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5
bGU7CiAKLSAgICBzdGF0ZS5zdHlsZSA9IDA7Ci0KLSAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLmNsZWFyKCk7Ci0KLSAgICBzdGF0ZS5ydWxlTGlzdCA9IDA7Ci0KLSAgICBzdGF0ZS5m
b250RGlydHkgPSBmYWxzZTsKKyAgICBtX3N0eWxlID0gMDsKKyAgICBtX3BlbmRpbmdJbWFnZVBy
b3BlcnRpZXMuY2xlYXIoKTsKKyAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBtX2ZvbnREaXJ0eSA9
IGZhbHNlOwogfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xk
ID0gMTA7CkBAIC04NDgsMTYgKzg4NSwxNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYg
KCFydWxlU2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVs
ZXMuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAKLSAgICBt
X3N0YXRlLm1vZGUgPSBTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlczsKKyAgICBtX3N0YXRl
LnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpTaGFyaW5nUnVsZXMpOwogICAgIGludCBmaXJzdFJ1
bGVJbmRleCA9IC0xLCBsYXN0UnVsZUluZGV4ID0gLTE7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZShmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOwotICAgIG1fc3RhdGUubW9kZSA9
IFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGU7Ci0gICAgaWYgKG1fc3RhdGUubWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICBtX3N0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpS
ZXNvbHZpbmdTdHlsZSk7CisgICAgaWYgKG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTg2NSw3ICs5MDIsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5
bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0
RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElucHV0RWxlbWVu
dCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwor
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudCgp
LT50b0lucHV0RWxlbWVudCgpOwogCiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhl
cklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODg2LDI1ICs5MjMsMjUg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxl
bWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJl
ZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRl
LmVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzRW5h
YmxlZEZvcm1Db250cm9sKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0VuYWJsZWRGb3JtQ29udHJv
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0
QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0o
KSkKKyAgICBpZiAoZWxlbWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0
eWxlUnVsZXMoKSkgeworICAgIGlmIChzdGF0ZS5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5
U3R5bGVSdWxlcygpKSB7CiAgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVudC0+d2ls
bFZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5lbGVtZW50
LT53aWxsVmFsaWRhdGUoKSkKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5lbGVt
ZW50KCktPndpbGxWYWxpZGF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAg
ICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlbGVtZW50LT5pc0luUmFu
Z2UoKSAhPSBzdGF0ZS5lbGVtZW50LT5pc0luUmFuZ2UoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9
IHN0YXRlLmVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNP
dXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc091dE9mUmFuZ2UoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTkyMCwyNSArOTU3LDI1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogYm9v
bCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3Rp
bmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7CiAg
ICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+
YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpLT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0
ZS0+YXR0cmlidXRlRGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc3RhdGUu
ZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdD
YW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICBpZiAo
c3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0g
c2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFu
Z0F0dHIpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0
dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xh
c3NSdWxlcykgeworICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkp
IHsKICAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1l
c0FmZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFz
Q2xhc3MoKSkgewogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1
aXJlIGEgKHNsb3chKSBnZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlz
IGFuIGFuaW1hdGFibGUgYXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChzdGF0ZS5lbGVt
ZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0ZShj
bGFzc0F0dHIpKQorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkg
eworICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewogI2VuZGlmCi0gICAgICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudC0+Y2xhc3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PmNsYXNzTmFtZXMoKSkKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFt
ZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIH0KQEAgLTk0NiwxMiArOTgz
LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0
eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50LT5wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzdGF0ZS5lbGVtZW50
KS0+aXNEZXRlcm1pbmF0ZSgpICE9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihz
aGFyaW5nQ2FuZGlkYXRlKS0+aXNEZXRlcm1pbmF0ZSgpKQorICAgIGlmIChzdGF0ZS5lbGVtZW50
KCktPmhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxI
VE1MUHJvZ3Jlc3NFbGVtZW50Kj4oc3RhdGUuZWxlbWVudCgpKS0+aXNEZXRlcm1pbmF0ZSgpICE9
IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihzaGFyaW5nQ2FuZGlkYXRlKS0+aXNE
ZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZgpA
QCAtOTY4LDcgKzEwMDUsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRlLmVsZW1lbnQtPnRhZ1FOYW1lKCkpCisg
ICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxlbWVudCgpLT50YWdRTmFtZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk3OCwyMSArMTAxNSwyMSBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4oZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0g
c3RhdGUuZWxlbWVudC0+aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IHN0
YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
ZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQtPmhvdmVyZWQoKSkKKyAgICBpZiAo
ZWxlbWVudC0+aG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aG92ZXJlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IHN0YXRlLmVsZW1l
bnQtPmFjdGl2ZSgpKQorICAgIGlmIChlbGVtZW50LT5hY3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50
KCktPmFjdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZv
Y3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50LT5mb2N1c2VkKCkpCisgICAgaWYgKGVsZW1lbnQtPmZv
Y3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQt
PnNoYWRvd1BzZXVkb0lkKCkpCisgICAgaWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0g
c3RhdGUuZWxlbWVudCgpLT5zaGFkb3dQc2V1ZG9JZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGlj
YWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkpCisgICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVt
ZW50LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5z
KGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKQEAgLTEwMDgsNyArMTA0
NSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNDb250cm9sICE9IHN0YXRlLmVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0
ZS5lbGVtZW50KCktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVt
ZW50KSkKQEAgLTEwMzIsMjAgKzEwNjksMjAgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAo
ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50TGlua1N0YXRlICE9
IHN0eWxlLT5pbnNpZGVMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYmIHN0YXRl
LmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLy8gRGVueSBzaGFyaW5n
IHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4KLSAgICBpZiAoZWxl
bWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50
KCkpCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICE9IHN0YXRlLmVsZW1lbnQo
KS0+aXNXZWJWVFRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChl
bGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50LT5pc1dlYlZUVEVsZW1l
bnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dlYlZU
VEVsZW1lbnQoc3RhdGUuZWxlbWVudCktPmlzUGFzdE5vZGUoKSkKKyAgICBpZiAoZWxlbWVudC0+
aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1dlYlZUVEVsZW1lbnQoKSAm
JiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dlYlZUVEVsZW1l
bnQoc3RhdGUuZWxlbWVudCgpKS0+aXNQYXN0Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9
PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8
fCBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1cnJl
bnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQo
KSA9PSBzdGF0ZS5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDY3
LDM3ICsxMTA0LDM3IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHlsZVJlc29sdmVyOjpmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiBSZW5kZXJTdHlsZSogU3R5
bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogewogICAgIFN0YXRlJiBzdGF0ZSA9IG1f
c3RhdGU7Ci0gICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50IHx8ICFzdGF0ZS5wYXJlbnRTdHls
ZSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1lbnQoKSB8fCAhc3RhdGUucGFyZW50U3R5bGUo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5l
IHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4KLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVT
dHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4oc3RhdGUuc3R5bGVkRWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQor
ICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxTdHls
ZVByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAvLyBJZHMgc3Rv
cCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5bGVzaGVldHMuCi0gICAg
aWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygp
Lmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudC0+aWRGb3JTdHlsZVJlc29s
dXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0lEKCkg
JiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVk
RWxlbWVudCgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmco
c3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAg
ICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCA9PSBzdGF0ZS5lbGVtZW50
LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0
YXRlLmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
ZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3RhdGUuZWxlbWVudCkpCisgICAgaWYgKGVsZW1lbnRI
YXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgLy8gQ2FjaGUgd2hldGhlciBzdGF0ZS5lbGVtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93
biBjbGFzcyBzZWxlY3RvcnMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgbWVt
YmVyIHZhcmlhYmxlLiBUaGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxkIGJlIGZhY3RvcmVkIG91
dCBvZiBTdHlsZVJlc29sdmVyLgotICAgIHN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxl
cyA9IHN0YXRlLmVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBjbGFzc05h
bWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQtPmNsYXNzTmFtZXMoKSk7CisgICAgc3Rh
dGUuc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0
ZS5lbGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzdGF0
ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMoKSkpOwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2li
bGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIHVu
c2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwogICAgIFN0eWxlZEVsZW1lbnQqIHNoYXJlRWxl
bWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQtPnBy
ZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CiAgICAg
ICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3Qs
IGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKQEAgLTExMTksNyArMTE1Niw3IEBA
IFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgaWYg
KHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZv
ciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBh
Ym92ZS4KLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpKQorICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5n
KHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KQEAgLTEzNDEsOSArMTM3
OCw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTCiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOwogICAgIGluaXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGluaXRGb3JTdHlsZVJlc29sdmUo
ZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0gICAgc3RhdGUucmVnaW9uRm9yU3R5bGluZyA9IHJl
Z2lvbkZvclN0eWxpbmc7Ci0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hh
cmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KSB7CisgICAgc3RhdGUu
aW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlbGVtZW50LCBkZWZhdWx0UGFyZW50LCBO
T1BTRVVETywgcmVnaW9uRm9yU3R5bGluZyk7CisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBB
bGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkp
IHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUo
KTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0
eWxlOwpAQCAtMTM1MSwzMiArMTM4NywzMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZUZvclBhcmVudDsKIAotICAgIGlmIChzdGF0ZS5w
YXJlbnRTdHlsZSkgewotICAgICAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlLCBp
c0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFy
eSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICBpZiAoc3RhdGUucGFy
ZW50U3R5bGUoKSkgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHls
ZSgpLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dC
b3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBzdGF0ZS5zdHlsZSA9IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKLSAgICAg
ICAgY2xvbmVGb3JQYXJlbnQgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUuZ2V0KCkp
OwotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSA9IGNsb25lRm9yUGFyZW50LmdldCgpOworICAg
ICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOworICAgICAgICBj
bG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHlsZSgpKTsKKyAgICAg
ICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoY2xvbmVGb3JQYXJlbnQuZ2V0KCkpOwogICAgIH0KICAg
ICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAtd2Via2l0LXVz
ZXItbW9kaWZ5KSBzaG91bGQKICAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hhZG93IGhvc3Qg
dG8gZGlzdHJpYnV0ZWQgbm9kZS4KLSAgICBpZiAoc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlv
blBvaW50KSB7CisgICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7
CiAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJl
bnQtPnJlbmRlclN0eWxlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldFVzZXJN
b2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVzZXJNb2RpZnkoKSk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VXNlck1vZGlmeShzdHlsZU9mU2hhZG93SG9zdC0+dXNlck1vZGlm
eSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSkgewot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SXNMaW5rKHRydWUpOwotICAgICAgICBFSW5zaWRlTGlu
ayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlOworICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRJc0xpbmsodHJ1ZSk7CisgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IHN0
YXRlLmVsZW1lbnRMaW5rU3RhdGUoKTsKICAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNp
ZGVMaW5rKSB7CiAgICAgICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRv
VmlzaXRlZCk7CiAgICAgICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQogICAgICAgICAgICAgICAg
IGxpbmtTdGF0ZSA9IEluc2lkZVZpc2l0ZWRMaW5rOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0ZSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQ29sbGVj
dGlvbiA9IGZhbHNlOwpAQCAtMTM5MywxNyArMTQyOSwxNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVu
ZGVyUwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQpOwog
CiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVj
b3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnBhcmVudFN0eWxlLCBlbGVtZW50KTsKLQotICAgIGluaXRF
bGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCisgICAgYWRqdXN0
UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7
CiAKLSAgICBpZiAoY2xvbmVGb3JQYXJlbnQpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlID0g
MDsKKyAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUu
CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBO
b3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gc3RhdGUuc3R5bGUucmVsZWFzZSgpOwor
ICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxl
bWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYg
a2V5ZnJhbWVWYWx1ZSkKQEAgLTE0MTIsMTQgKzE0NDUsMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSog
ZWxlbWUKICAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKICAgICAgICAgYWRkTWF0Y2hl
ZFByb3BlcnRpZXMocmVzdWx0LCBrZXlmcmFtZS0+cHJvcGVydGllcygpKTsKIAotICAgIEFTU0VS
VCghbV9zdGF0ZS5zdHlsZSk7CisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkpOwogCiAgICAg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBz
dGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpOwotCi0gICAgc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6
Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwog
CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0
aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92
ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KQEAgLTE0MzEsOCArMTQ2
Myw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5
ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAg
Ly8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUg
Zm9udC1zaXplCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSk7Cisg
ICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8g
Tm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0
aWVzKCkpCkBAIC0xNDU5LDcgKzE0OTEsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZQogCiAg
ICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCi0gICAgcmV0dXJuIHN0
YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCog
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQpA
QCAtMTQ4Myw3ICsxNTE1LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0Zv
ckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSogZWwKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEFw
cGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZl
cnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAogICAgICAgICBpbml0RWxlbWVu
dChlKTsKLSAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKKyAgICAgICAgbV9zdGF0ZS5p
bml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwogCiAgICAgICAgIGNvbnN0IFN0eWxl
S2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCkBAIC0xNTI3LDcgKzE1
NTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVs
ZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBF
bGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fc3Rh
dGUucGFyZW50U3R5bGUpOworICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFlKQog
ICAgICAgICByZXR1cm4gMDsKIApAQCAtMTUzNSw5ICsxNTY3LDkgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBz
ZXVkbywgRWwKIAogICAgIGluaXRFbGVtZW50KGUpOwogCi0gICAgaW5pdEZvclN0eWxlUmVzb2x2
ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBzdGF0ZS5zdHlsZSA9IFJlbmRlclN0eWxl
OjpjcmVhdGUoKTsKLSAgICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEZyb20obV9zdGF0ZS5wYXJlbnRT
dHlsZSk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJl
bnRTdHlsZSwgcHNldWRvKTsKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRl
KCkpOworICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUo
KSk7CiAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBv
ZiBvdXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxr
aW5nCiAgICAgLy8gdGhvc2UgcnVsZXMuCkBAIC0xNTU0LDEyICsxNTg2LDEyIEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1
ZG9JZCBwc2V1ZG8sIEVsCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzdGF0ZS5zdHlsZS0+c2V0U3R5bGVU
eXBlKHBzZXVkbyk7CisgICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAK
ICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENs
ZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChh
bW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlLmdl
dCgpLCBtX3N0YXRlLnBhcmVudFN0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0
ZS5zdHlsZSgpLCBtX3N0YXRlLnBhcmVudFN0eWxlKCksIDApOwogCiAgICAgLy8gU3RhcnQgbG9h
ZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxvYWRQZW5kaW5n
UmVzb3VyY2VzKCk7CkBAIC0xNTY3LDE1ICsxNTk5LDE1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8s
IEVsCiAgICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwogCiAgICAgLy8g
Tm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIHN0YXRlLnN0eWxlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogewotICAgIGlu
aXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jv
b3RFbGVtZW50U3R5bGUgd2lsbCBiZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorICAgIG1f
c3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9j
dW1lbnQgc3R5bGUuCiAKLSAgICBtX3N0YXRlLnN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OwotICAgIG1fc3RhdGUuc3R5bGUtPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIG1f
c3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwog
CiAgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29u
c3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKQEAgLTE1ODYsNyArMTYx
OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9ydWxlU2V0cy51
c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVy
IHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhU
TUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0
eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFs
dWUgPSAwOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5o
ZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwg
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwpAQCAt
MTU5Nyw4ICsxNjI5LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8g
TGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9u
dC1zaXplLgotICAgIGlmIChtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSkKLSAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKTsK
KyAgICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwg
ZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRP
bmx5KTsKIApAQCAtMTYwOCwyMCArMTY0MCwyMCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBkb2N1bWVudCgp
LT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHls
ZS4KLSAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG1fc3Rh
dGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKQogewotICAgIG1fc3RhdGUuc3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCkpOwogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVkIGlmIHdl
IGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCiAgICAgaWYgKFNldHRp
bmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewogICAgICAgICBpbml0aWFsaXpl
Rm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdGF0ZS5zdHlsZS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUtPmZv
bnQoKS51cGRhdGUoMCk7CisgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZSgw
KTsKIAotICAgIHJldHVybiBtX3N0YXRlLnN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbV9z
dGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JUZXh0KFRleHQqIHRleHROb2RlKQpAQCAtMTkwOSw3ICsxOTQxLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZl
IGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KICAgICBpZiAoc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHls
ZSh0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UsIG1fc3RhdGUuYm9yZGVy
RGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKHRoaXMsIHN0
eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwg
bV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKIAog
ICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJl
IHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIp
KQpAQCAtMTk5MiwyNiArMjAyNCwxNiBAQCBzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9u
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSkKIAogdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVG
b250KCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KQorICAgIGlmICghbV9zdGF0ZS5m
b250RGlydHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVz
dCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7Ci0gICAg
Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKTsK
LSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUpOworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUoKTsKKyAgICBjaGVja0ZvckdlbmVy
aWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tG
b3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogICAgIGNoZWNrRm9y
T3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIG1fc3RhdGUuc3R5bGUtPmZvbnQoKS51cGRh
dGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fc3RhdGUuZm9udERpcnR5ID0gZmFsc2U7Ci19Ci0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKLXsKLSAgICBt
X3N0YXRlLmhhc1VBQXBwZWFyYW5jZSA9IG1fc3RhdGUuc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsK
LSAgICBpZiAobV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9zdGF0ZS5ib3Jk
ZXJEYXRhID0gbV9zdGF0ZS5zdHlsZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fc3RhdGUuYmFja2dy
b3VuZERhdGEgPSAqbV9zdGF0ZS5zdHlsZS0+YmFja2dyb3VuZExheWVycygpOwotICAgICAgICBt
X3N0YXRlLmJhY2tncm91bmRDb2xvciA9IG1fc3RhdGUuc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
OwotICAgIH0KKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CisgICAg
bV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25l
ZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwMjQsMTAgKzIwNDYsMTAgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVu
dCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xv
YWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fc3RhdGUubW9kZSA9IFNlbGVjdG9y
Q2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzOworICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNo
ZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKICAgICBpbml0RWxlbWVudChlKTsKLSAgICBpbml0
Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lkKTsKKyAgICBtX3N0YXRlLmluaXRGb3JTdHls
ZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCwgcHNldWRvSWQpOwogCiAgICAgTWF0Y2hSZXN1bHQg
ZHVtbXk7CiAgICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYgVUFBbmRVc2VyQ1NTUnVsZXMpIHsKQEAg
LTIwNDAsNTIgKzIwNjIsNTEgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZl
cjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICB9CiAKICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0
aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIG1fc3RhdGUuc2FtZU9yaWdpbk9ubHkgPSAhKHJ1bGVz
VG9JbmNsdWRlICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcyk7CisgICAgICAgIG1fc3RhdGUuc2V0U2Ft
ZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKIAog
ICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KICAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAot
ICAgICAgICBtX3N0YXRlLnNhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CisgICAgICAgIG1fc3RhdGUu
c2V0U2FtZU9yaWdpbk9ubHkoZmFsc2UpOwogICAgIH0KIAotICAgIG1fc3RhdGUubW9kZSA9IFNl
bGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGU7CisgICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVj
dG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOwogCi0gICAgcmV0dXJuIG1fc3RhdGUucnVsZUxp
c3QucmVsZWFzZSgpOworICAgIHJldHVybiBtX3N0YXRlLnRha2VSdWxlTGlzdCgpOwogfQogCi1p
bmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNv
bHZlcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBDb250YWlu
ZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCiB7CiAgICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKLSAgICBzdGF0ZS5keW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAKICAg
ICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8g
V2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50
cy4KLSAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxlICE9IE5PUFNFVURPKQorICAgICAgICBp
ZiAoc3RhdGUucHNldWRvU3R5bGUoKSAhPSBOT1BTRVVETykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgLy8gV2Uga25vdyBhIHN1ZmZpY2llbnRseSBzaW1wbGUgc2luZ2xlIHBh
cnQgc2VsZWN0b3IgbWF0Y2hlcyBzaW1wbHkgYmVjYXVzZSB3ZSBmb3VuZCBpdCBmcm9tIHRoZSBy
dWxlIGhhc2guCiAgICAgICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgbmFtZXNwYWNlLgotICAgICAgICBpZiAocnVsZURhdGEu
aGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiBzdGF0
ZS5lbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1Jp
Z2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgc3RhdGUuZWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFz
TXVsdGlwYXJ0U2VsZWN0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQotICAgICAgICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoc3RhdGUuZWxlbWVudCwg
cnVsZURhdGEuc2VsZWN0b3IoKS0+dGFnUU5hbWUoKSkpCisgICAgICAgIGlmIChydWxlRGF0YS5z
ZWxlY3RvcigpLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcgJiYgIVNlbGVjdG9yQ2hlY2tl
cjo6dGFnTWF0Y2hlcyhzdGF0ZS5lbGVtZW50KCksIHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZ1FO
YW1lKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIVNlbGVjdG9y
Q2hlY2tlcjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3Ioc3RhdGUuZWxlbWVu
dCwgcnVsZURhdGEuc2VsZWN0b3IoKSkpCisgICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjpm
YXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVTZWxlY3RvcihzdGF0ZS5lbGVtZW50KCksIHJ1bGVE
YXRhLnNlbGVjdG9yKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHJl
dHVybiBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVjayhydWxlRGF0YS5zZWxlY3RvcigpLCBzdGF0
ZS5lbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrKHJ1
bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQoKSk7CiAgICAgfQogCiAgICAgLy8gU2xv
dyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwg
c3RhdGUubW9kZSk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQsIFNlbGVjdG9yQ2hl
Y2tlcjo6VmlzaXRlZE1hdGNoRW5hYmxlZCk7Ci0gICAgY29udGV4dC5lbGVtZW50U3R5bGUgPSBz
dGF0ZS5zdHlsZS5nZXQoKTsKKyAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRv
Y3VtZW50KCksIHN0YXRlLm1vZGUoKSk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1lbnQo
KSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKKyAgICBjb250ZXh0LmVs
ZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7CiAgICAgY29udGV4dC5zY29wZSA9IHNjb3BlOwot
ICAgIGNvbnRleHQucHNldWRvU3R5bGUgPSBzdGF0ZS5wc2V1ZG9TdHlsZTsKLSAgICBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIHN0
YXRlLmR5bmFtaWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKKyAgICBj
b250ZXh0LnBzZXVkb1N0eWxlID0gc3RhdGUucHNldWRvU3R5bGUoKTsKKyAgICBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoIG1hdGNoID0gc2VsZWN0b3JDaGVja2VyLm1hdGNoKGNvbnRleHQsIGR5bmFt
aWNQc2V1ZG8sIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSgpKTsKICAgICBpZiAobWF0Y2gg
IT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgc3RhdGUucHNldWRv
U3R5bGUgIT0gc3RhdGUuZHluYW1pY1BzZXVkbykKKyAgICBpZiAoc3RhdGUucHNldWRvU3R5bGUo
KSAhPSBOT1BTRVVETyAmJiBzdGF0ZS5wc2V1ZG9TdHlsZSgpICE9IGR5bmFtaWNQc2V1ZG8pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwOTUsOSArMjEx
Niw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lCiAgICAgaWYgKCFyZWdpb25TZWxlY3RvciB8
fCAhcmVnaW9uRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9zdGF0ZS5w
c2V1ZG9TdHlsZSA9IE5PUFNFVURPOwotCi0gICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hl
Y2tlcihkb2N1bWVudCgpLCBTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKKyAgICBT
ZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIG1fc3RhdGUubW9kZSgp
KTsKICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMg
PSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIu
bWF0Y2hlcyhzLCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjEyMSw3ICsyMTQwLDcgQEAgTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmUKIHRlbXBsYXRlIDxTdHls
ZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgogdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5
bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHksIFByb3Bl
cnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCiB7Ci0gICAgQVNTRVJUKChw
cm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3Rh
dGUucmVnaW9uRm9yU3R5bGluZyk7CisgICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
IT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygp
KTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7
CiAKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3Vu
dCgpOwpAQCAtMjE2NSw3ICsyMTg0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWwKICAgICAg
ICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsK
ICAgICAgICAgICAgIC8vIHdlIGFwcGx5IGxpbmUtaGVpZ2h0IGxhdGVyCiAgICAgICAgICAgICBl
bHNlIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUgPSBjdXJyZW50LnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoY3VycmVudC52YWx1ZSgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvd1ByaW9yaXR5UHJvcGVydGllczoKICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdodCkKQEAgLTIxODIsMTgg
KzIyMDEsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbAogICAgICAgICByZXR1cm47CiAKICAg
ICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5zdHlsZS0+aW5zaWRlTGlu
aygpICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGlu
aygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7
IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRp
ZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07
CiAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRpZXMu
bGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0
byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2VzIGluIG1h
bnkgcGxhY2VzLgotICAgICAgICAgICAgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
ID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOwotICAgICAgICAg
ICAgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsKKyAgICAgICAgICAgIHN0YXRlLnNldEFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaExpbmspOworICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQp
OwogCiAgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMu
cHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFu
dCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRj
aGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGUu
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gdHJ1ZTsKLSAgICAgICAgc3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGZhbHNlOworICAgICAgICBzdGF0ZS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKQEAgLTIz
MDksMTUgKzIzMjgsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0
aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgLy8gV2Ug
Y2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBjb3B5aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGll
cyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2JqZWN0IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0
CiAgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0aW9ucy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBw
bHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzLCBpZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4g
ZGVwZW5kIG9uIHRoZSAKICAgICAgICAgLy8gZWxlbWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3Qg
YW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5nIHRoZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCi0g
ICAgICAgIHN0YXRlLnN0eWxlLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLmdldCgpKTsKLSAgICAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlLT5pbmhlcml0ZWRE
YXRhU2hhcmVkKGNhY2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hh
ZG93Qm91bmRhcnkoZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0
dXMgPSBzdGF0ZS5zdHlsZS0+aW5zaWRlTGluaygpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5j
b3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAg
ICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVt
LT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50
KSkgeworICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0YXRlLnN0eWxlKCkt
Pmluc2lkZUxpbmsoKTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBz
dHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBh
cmVudCBzdHlsZSB0aGVuIHRoZQogICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwg
YmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBm
cm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+aW5o
ZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKIAog
ICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMgaXMgdHJlYXRlZCBs
aWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNpdGx5IHJlc3RvcmUg
aXQuCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsK
KyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5
ID0gdHJ1ZTsgCkBAIC0yMzM1LDE0ICsyMzU0LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0
CiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9w
ZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCiAgICAgLy8gVGhlIG9yZGVy
IGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGlt
cG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8gYW5kICg0KSBub3JtYWwg
aW1wb3J0YW50LgotICAgIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSA9IDA7CisgICAgc3RhdGUuc2V0
TGluZUhlaWdodFZhbHVlKDApOwogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9y
aXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwogCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAg
ICBzdGF0ZS5mb250RGlydHkgPSB0cnVlOworICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVt
LT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkgeworICAgICAgICBzdGF0ZS5zZXRGb250RGlydHkodHJ1ZSk7CiAgICAgICAgIGFw
cGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIH0KIApAQCAtMjM1MCwxOCArMjM2OSwxOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExp
bmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQt
c2l6ZS4KLSAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKQotICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKTsKKyAgICBp
ZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAvLyBNYW55
IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBw
bHkgYWxsIHByb3BlcnRpZXMuCi0gICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRl
clN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkpCisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBw
cmlvcml0eSBVQSBwcm9wZXJ0aWVzLgogICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJp
b3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7CiAgICAgCiAgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0
aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3Jv
dW5kKCk7CisgICAgc3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAgICAgCiAgICAg
Ly8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMg
YW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgogICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKQEAgLTIzNzIsMTMgKzIzOTEsMTMgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCiAgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKICAg
ICAKLSAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSk7CisgICAgQVNTRVJUKCFzdGF0ZS5mb250
RGlydHkoKSk7CiAgICAgCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShz
dGF0ZS5lbGVtZW50LCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUpKQorICAg
IGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuZWxlbWVudCgp
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUu
cGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOworICAgIGFkZFRvTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBjYWNoZUhh
c2gsIG1hdGNoUmVzdWx0KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVs
ZXMoY29uc3QgU3R5bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIyKQpAQCAt
MjQ0Myw3ICsyNDYyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxp
c3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogYm9vbCBTdHlsZVJlc29s
dmVyOjppc0xlZnRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0CiB7CiAgICAgYm9vbCBpc0ZpcnN0
UGFnZUxlZnQgPSBmYWxzZTsKLSAgICBpZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgIGlmICghbV9zdGF0ZS5yb290RWxlbWVudFN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgaXNGaXJzdFBhZ2VMZWZ0ID0g
dHJ1ZTsKIAogICAgIHJldHVybiAocGFnZUluZGV4ICsgKGlzRmlyc3RQYWdlTGVmdCA/IDEgOiAw
KSkgJSAyOwpAQCAtMjQ2NCw4ICsyNDgzLDggQEAgU3RyaW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VO
YW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlKQogewogICAgIGluaXRFbGVtZW50KDApOwotICAgIGluaXRGb3JTdHlsZVJl
c29sdmUoMCwgc3R5bGUpOwotICAgIG1fc3RhdGUuc3R5bGUgPSBzdHlsZTsKKyAgICBtX3N0YXRl
LmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgMCwgc3R5bGUpOworICAgIG1fc3RhdGUu
c2V0U3R5bGUoc3R5bGUpOwogICAgIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFs
dWUpOwogfQogCkBAIC0yNTc3LDcgKzI1OTYsNyBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVy
Ojppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogLy8gcHJvcGVydGll
cyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3Vt
ZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCiBib29sIFN0eWxlUmVzb2x2ZXI6
OnVzZVNWR1pvb21SdWxlcygpCiB7Ci0gICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCAmJiBtX3N0
YXRlLmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOworICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQo
KSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29s
IGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0
aCkKQEAgLTI1OTIsNyArMjYxMSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFk
dGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1
ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVy
c2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3Rh
dGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHN0YXRlLnN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpOworICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZp
ZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpOwogICAgIGlmICh3b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMjY5OCw3ICsyNzE3LDcgQEAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVS
ZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVW
YXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucykKIHsKLSAgICBz
dGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1ZS0+c2Vy
aWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRlLnN0eWxlLT52YXJpYWJsZXMoKSkpOwor
ICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVl
LT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJsZXMoKm1fc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVz
KCkpKTsKIAogICAgIGlmIChrbm93bkV4cHJlc3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24pKQog
ICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRldGVjdGVkLgpAQCAtMjczMSwxOSArMjc1MCwxOSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogI2VuZGlmCiAKICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRW
YWx1ZSgpOwotICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwg
KCFzdGF0ZS5wYXJlbnROb2RlICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgIGJv
b2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZh
bHVlKCk7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCAo
IXN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKIAogICAg
IEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5p
dGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8
IChzdGF0ZS5wYXJlbnROb2RlICYmIHN0YXRlLnBhcmVudFN0eWxlKSk7IC8vIGlzSW5oZXJpdCAt
PiAoc3RhdGUucGFyZW50Tm9kZSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSkKKyAgICBBU1NFUlQoIWlz
SW5oZXJpdCB8fCAoc3RhdGUucGFyZW50Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpKTsg
Ly8gaXNJbmhlcml0IC0+IChzdGF0ZS5wYXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUo
KSkKIAotICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlICYmICghc3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5r
UHJvcGVydHkoaWQpKSkgeworICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlz
VmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHBy
b3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkg
OnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXNJbmhlcml0ICYm
ICFzdGF0ZS5wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAm
JiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBzdGF0ZS5w
YXJlbnRTdHlsZS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICBp
ZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5oYXNFeHBsaWNpdGx5SW5oZXJp
dGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShpZCkp
CisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQ
cm9wZXJ0aWVzKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBpZiAoaWQgPT0g
Q1NTUHJvcGVydHlWYXJpYWJsZSkgewpAQCAtMjc1MSw3ICsyNzcwLDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgQ1NTVmFyaWFibGVWYWx1ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxDU1NWYXJp
YWJsZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5uYW1lKCkuaXNF
bXB0eSgpKTsKICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+dmFsdWUoKS5pc0VtcHR5KCkpOwot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUoKSwgdmFyaWFi
bGUtPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWYXJpYWJsZSh2YXJpYWJs
ZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKQEAgLTI3NzAsNyArMjc4OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9v
bUZhY3RvciA9IHN0YXRlLnN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgZmxvYXQgem9vbUZh
Y3RvciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAogICAgIC8vIFdoYXQgZm9s
bG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyIGNv
cnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiBTaG9ydGhh
bmRzIChlLmcuIGJvcmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwg
YW5kCkBAIC0yNzg0LDcgKzI4MDMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgLy8gbm90
ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3Vw
cG9ydGVkLgogCiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUtPmNsZWFyQ29udGVudCgpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPmNsZWFyQ29udGVudCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KIApAQCAtMjc5NiwxOSArMjgxNSwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAg
IENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChpdGVtLT5p
c0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+
aXNHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3Jh
ZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQo
KSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVu
dFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0
YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlKj4oaXRl
bSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJ
bWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENv
bnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFs
dWUqPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjgxOSwxNyArMjgzOCwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
bnRWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRW
YWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUtPmlzQXR0cigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1l
c3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5zdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZS0+c2V0
VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxB
dG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0ZS5lbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBk
aWRTZXQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
c3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2
YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJp
YnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZQogICAgICAgICAgICAgICAgICAgICBtX3J1bGVT
ZXRzLmZlYXR1cmVzKCkuYXR0cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7
CkBAIC0yODQwLDI0ICsyODU5LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgICAg
IGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHls
ZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50
ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJW
YWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRv
cigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50KGNvdW50
ZXIucmVsZWFzZSgpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KGNvdW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAg
ICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRT
ZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xv
c2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRDb250ZW50
KENMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9f
T1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI4
NjcsMTYgKzI4ODYsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIWRpZFNldCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xl
YXJDb250ZW50KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICBjYXNlIENT
U1Byb3BlcnR5UXVvdGVzOgogICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBz
dGF0ZS5zdHlsZS0+c2V0UXVvdGVzKHN0YXRlLnBhcmVudFN0eWxlLT5xdW90ZXMoKSk7CisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVv
dGVzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0lu
aXRpYWwpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRRdW90ZXMoMCk7CisgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0yODk0LDE5
ICsyOTEzLDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3Rl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1
ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFy
dFF1b3RlLCBlbmRRdW90ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVv
dGVzKHF1b3Rlcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRR
dW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CiAgICAgICAgIC8vIGxp
c3Qgb2Ygc3RyaW5ncyBhbmQgaWRzCiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsKLSAgICAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAg
ICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFt
aWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlz
U3BlY2lmaWVkRm9udCgpKTsKQEAgLTI5MTYsNyArMjkzNSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAg
ICAgICAgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRp
YWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNp
emUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFj
ZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250
RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpKQpAQCAtMjkzMCw3ICsyOTQ5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFt
aWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAgICAgICAgIEZvbnRGYW1pbHkq
IGN1cnJGYW1pbHkgPSAwOwogCkBAIC0zMDA4LDI0ICszMDI3LDI0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAv
LyBzaG9ydGhhbmQgcHJvcGVydGllcwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgog
ICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJC
YWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKENvbG9yKCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJCYWNrZ3Jv
dW5kTGF5ZXJzKCk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAg
ICBzdGF0ZS5zdHlsZS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxl
LT5iYWNrZ3JvdW5kTGF5ZXJzKCkpOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJhY2tn
cm91bmRDb2xvcihzdGF0ZS5wYXJlbnRTdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEJhY2tncm91bmRMYXllcnMoKnN0YXRlLnBhcmVu
dFN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YmFja2dyb3VuZENvbG9y
KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFzazoKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5jbGVhck1hc2tMYXllcnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyTWFz
a0xheWVycygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBzdGF0
ZS5zdHlsZS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRlLnBhcmVudFN0eWxlLT5tYXNrTGF5ZXJz
KCkpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdE1hc2tMYXllcnMoKnN0YXRl
LnBhcmVudFN0eWxlKCktPm1hc2tMYXllcnMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udDoKICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewotICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lSGVpZ2h0KHN0
YXRlLnBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3Rh
dGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUo
KS0+c3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWln
aHRWYWx1ZSgwKTsKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwpAQCAtMzAzNCw4ICszMDUzLDggQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAgICAgICAgICAgc3RhdGUubGluZUhlaWdodFZhbHVl
ID0gMDsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKDApOwogCiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
OwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzA1MSw3ICsz
MDcwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVl
bkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0
YXRlLnN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERl
c2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlv
bi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VT
Vkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
c0ZvbnRWYWx1ZSgpKSB7CkBAIC0zMDY5LDcgKzMwODgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgdXBkYXRlRm9udCgpOwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAotICAgICAgICAgICAgc3RhdGUubGluZUhl
aWdodFZhbHVlID0gZm9udC0+bGluZUhlaWdodC5nZXQoKTsKKyAgICAgICAgICAgIHN0YXRlLnNl
dExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVpZ2h0LmdldCgpKTsKIAogICAgICAgICAgICAg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7
CiAgICAgICAgIH0KQEAgLTMwODEsMTEgKzMxMDAsMTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CiAgICAgICAgIGlmIChpc0luaGVyaXQpIHsK
ICAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxl
LT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5
bGUtPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGUu
c3R5bGUtPnNldEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZS0+Ym94U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUtPmJveFNoYWRvdygpKSkgOiBu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNo
YWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hh
ZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSkgOiBudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coc3RhdGUucGFy
ZW50U3R5bGUoKS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUu
cGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCi0g
ICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUuc3R5
bGUtPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/
IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOTUsMjkgKzMxMTQsMjkgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRp
Y19jYXN0PFNoYWRvd1ZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRl
bS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0t
PmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0
ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxl
LmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAg
ICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkg
PSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+
Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCBz
cHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsK
ICAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRl
bS0+c3R5bGUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwog
ICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAg
ICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xv
ci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSkKLSAgICAgICAgICAg
ICAgICBjb2xvciA9IHN0YXRlLnN0eWxlLT5jb2xvcigpOworICAgICAgICAgICAgZWxzZSBpZiAo
c3RhdGUuc3R5bGUoKSkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNv
bG9yKCk7CiAKICAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0gYWRv
cHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93
U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkg
PyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0VGV4
dFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBs
aXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7
IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Qm94U2hhZG93KHNo
YWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDog
ewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZs
ZWN0KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3QoUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3hSZWZsZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMx
MjgsMTMgKzMxNDcsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1By
b3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVj
dGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJl
ZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAg
ICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+
c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZElu
dGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lv
bj4oc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3Ip
KTsKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUtPm9mZnNl
dCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNr
OwogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygpOwogICAgICAgICBtX3N0eWxlTWFwLm1h
cE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAg
IHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEJv
eFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBy
dWxlcy4KQEAgLTMxNDMsMjkgKzMxNjIsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgogICAgICAgICBpZiAoaXNJ
bmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZUNvbG9yKHN0
YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKS5pc1ZhbGlkKCkgPyBzdGF0ZS5wYXJl
bnRTdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZS0+Y29sb3IoKSk7
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0Q29sdW1uUnVsZVN0eWxlKHN0YXRlLnBhcmVu
dFN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
Q29sdW1uUnVsZVdpZHRoKHN0YXRlLnBhcmVudFN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb2x1bW5SdWxlQ29sb3Ioc3RhdGUucGFyZW50
U3R5bGUoKS0+Y29sdW1uUnVsZUNvbG9yKCkuaXNWYWxpZCgpID8gc3RhdGUucGFyZW50U3R5bGUo
KS0+Y29sdW1uUnVsZUNvbG9yKCkgOiBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5jb2xvcigpKTsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbHVtblJ1bGVTdHlsZShzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5jb2x1bW5SdWxlU3R5bGUoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb2x1bW5SdWxlV2lkdGgoc3RhdGUucGFyZW50U3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5yZXNldENvbHVtblJ1bGUoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnJlc2V0Q29s
dW1uUnVsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWU6CiAgICAgICAgIGlmICghaXNJbmhlcml0KQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHlsZS0+
bWFycXVlZURpcmVjdGlvbigpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNy
ZW1lbnQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Ci0gICAgICAgIHN0
YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVTcGVl
ZCgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29wQ291bnQoc3RhdGUucGFy
ZW50U3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRN
YXJxdWVlQmVoYXZpb3Ioc3RhdGUucGFyZW50U3R5bGUtPm1hcnF1ZWVCZWhhdmlvcigpKTsKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZURpcmVjdGlvbihzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5tYXJxdWVlRGlyZWN0aW9uKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJx
dWVlSW5jcmVtZW50KHN0YXRlLnBhcmVudFN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKSk7Cisg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChzdGF0ZS5wYXJlbnRTdHlsZSgp
LT5tYXJxdWVlU3BlZWQoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVMb29w
Q291bnQoc3RhdGUucGFyZW50U3R5bGUoKS0+bWFycXVlZUxvb3BDb3VudCgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUJlaGF2aW9yKHN0YXRlLnBhcmVudFN0eWxlKCktPm1h
cnF1ZWVCZWhhdmlvcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXJxdWVlUmVwZXRpdGlvbjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChtYXJxdWVlTG9vcENvdW50LCBNYXJxdWVlTG9vcENvdW50KQogICAgICAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgICAgIHN0YXRl
LnN0eWxlLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2
ZXIuCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsg
Ly8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVMb29w
Q291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWVTcGVlZDogewpAQCAtMzE3NSwxOSArMzE5NCwxOSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBpZiAoaW50IGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgotICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1z
ZWMuCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7
IC8vIDUwMCBtc2VjLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZVNw
ZWVkKDg1KTsgLy8gODVtc2VjLiBUaGUgV2luSUUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoODUpOyAvLyA4NW1zZWMuIFRoZSBXaW5JRSBk
ZWZhdWx0LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUZhc3Q6Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZCgxMCk7
IC8vIDEwbXNlYy4gU3VwZXIgZmFzdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzVGltZSgpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlz
ZWNvbmRzPigpKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlz
ZWNvbmRzPigpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
IC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5z
ZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRW
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZUluY3JlbWVudDogewpAQCAtMzE5NywxOSArMzIxNiwxOSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAg
IHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUlu
Y3JlbWVudChMZW5ndGgoMSwgRml4ZWQpKTsgLy8gMXB4LgorICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDEsIEZpeGVkKSk7IC8vIDFweC4K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6
Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3Ro
KDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoNiwgRml4ZWQpKTsgLy8g
NnB4LiBUaGUgV2luSUUgZGVmYXVsdC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVMYXJnZToKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0
TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVk
KSk7IC8vIDM2cHguCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IGNvbnZlcnRU
b0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGggPSBjb252ZXJ0
VG9JbnRMZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQo
KSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0TWFycXVlZUluY3JlbWVudChtYXJx
dWVlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRNYXJxdWVlSW5j
cmVtZW50KG1hcnF1ZWVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zMjE4LDExICszMjM3LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+
c2V0TG9jYWxlKG51bGxBdG9tKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2Fs
ZShudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRM
b2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZv
ckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUtPmxvY2FsZSgpKSk7CisgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9j
YWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUoKSkp
OwogICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTMyNDEsNyArMzI2MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPnNldERhc2hib2FyZFJl
Z2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOworICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hi
b2FyZFJlZ2lvbnMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzI1
MSwxMCArMzI3MCwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiog
Zmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExl
bmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUu
Z2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0
ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUuZ2V0KCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0ZS5zdHlsZS5nZXQoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRU
b0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUuZ2V0KCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0
aChyZWdpb24tPnRvcCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkp
OworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+
cmlnaHQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAg
ICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20o
KSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAg
IExlbmd0aCBsZWZ0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwogCiAgICAgICAgICAgICBpZiAodG9w
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgdG9wID0gTGVuZ3RoKCk7CkBAIC0zMjY2
LDEzICszMjg1LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0
aCgpOwogCiAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246
OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lv
biA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lv
bi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBm
YWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xl
KQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVE
YXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgcmVnaW9uID0g
cmVnaW9uLT5tX25leHQuZ2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0ZS5lbGVtZW50
LT5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0
ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogCiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zMjgxLDggKzMzMDAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246IHsKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHN0YXRlLnN0eWxlLT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlRHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFn
Z2FibGVSZWdpb25Ob0RyYWcpOwotICAgICAgICBzdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5z
ZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRE
cmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
RHJhZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOworICAg
ICAgICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMjk4LDIxICszMzE3LDIxIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCAqPSA1OwotICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVu
Z3RoPGZsb2F0PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5
bGUuZ2V0KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAg
ICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnN0eWxlLT5zZXRUZXh0U3Ryb2tlV2lk
dGgod2lkdGgpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lk
dGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3Jt
LCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0g
ICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlLmdldCgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgc3RhdGUuc3R5
bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBv
cGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlv
bnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQ
ZXJzcGVjdGl2ZTogewpAQCAtMzMyMiwzNCArMzM0MSwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRQZXJzcGVjdGl2
ZSgwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKDApOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVW
YWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAg
ICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdGF0ZS5zdHlsZS5nZXQoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9v
bUZhY3Rvcik7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7
CiAgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVs
ZXNzIG51bWJlcnMgYXMgcHguCi0gICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxl
LmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAg
IHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tRmFjdG9yKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgaWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0gMC4wZikKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CiAgICAgICAgIGlm
IChpc0luaXRpYWwpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckFuaW1hdGlvbnMoKTsKICAgICAgICAg
ZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgc3RhdGUuc3R5bGUtPmluaGVyaXRBbmlt
YXRpb25zKHN0YXRlLnBhcmVudFN0eWxlLT5hbmltYXRpb25zKCkpOworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+aW5oZXJpdEFuaW1hdGlvbnMoc3RhdGUucGFyZW50U3R5bGUoKS0+YW5pbWF0
aW9ucygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUt
PmNsZWFyVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyVHJh
bnNpdGlvbnMoKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgc3Rh
dGUuc3R5bGUtPmluaGVyaXRUcmFuc2l0aW9ucyhzdGF0ZS5wYXJlbnRTdHlsZS0+dHJhbnNpdGlv
bnMoKSk7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0VHJhbnNpdGlvbnMoc3Rh
dGUucGFyZW50U3R5bGUoKS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGln
aHRDb2xvcjogewpAQCAtMzM1OCw3ICszMzc3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUtPnNldFRhcEhpZ2hsaWdodENvbG9y
KGNvbCk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9yKGNvbCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTMzNjcsNyArMzM4Niw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3Zl
cmZsb3dTY3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcpOwogICAgICAgICBpZiAo
IXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0YXRlLnN0eWxl
LT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92
ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlVG91
Y2gpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNDEwLDcgKzM0MjksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsV2lkdGg6
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6CiAgICAgewotICAg
ICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlLT53
cml0aW5nTW9kZSgpKTsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5
OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0
aW9uKCksIHN0YXRlLnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQobmV3
SWQgIT0gaWQpOwogICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwog
ICAgIH0KQEAgLTM0NDUsOCArMzQ2NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBzZXRX
cml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBu
b3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5nIHN0eWxlLgotICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudCAmJiBzdGF0ZS5lbGVtZW50ID09IHN0YXRlLmVsZW1lbnQt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgc3RhdGUuZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsK
KyAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUu
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0ZS5kb2N1bWVu
dCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0zNDYyLDcgKzM0ODEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJveENvbnRhaW4pCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihM
aW5lQm94Q29udGFpbk5vbmUpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJv
eENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0zNDcwLDIxICszNDg5LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgQ1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5W
YWx1ZSA9IHN0YXRpY19jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAg
ICAgIHN0YXRlLnN0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52
YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJv
eENvbnRhaW5WYWx1ZS0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAv
LyBDU1MgRm9udHMgTW9kdWxlIExldmVsIDMKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9u
dEZlYXR1cmVTZXR0aW5nczogewogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIHNl
dEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1h
bEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0
ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKICAgICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0
dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRlKCk7CiAgICAgICAg
IGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKQEAgLTM1MDQsOCArMzUyMyw4IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFs
dWUsIHN0YXRlLnN0eWxlLmdldCgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlLCBvcGVyYXRpb25z
KSkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAg
ICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCkBAIC0zNTEzLDE0ICszNTMyLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIFZlY3RvcjxH
cmlkVHJhY2tTaXplPiB0cmFja1NpemVzOwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xp
c3QodmFsdWUsIHRyYWNrU2l6ZXMsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgc3RhdGUuc3R5bGUtPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRHcmlkQ29sdW1ucyh0cmFja1NpemVzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd3M6IHsKICAgICAgICAgVmVj
dG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFRy
YWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3JpZFJvd3ModHJhY2tTaXplcyk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zNTI4LDE0ICszNTQ3LDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIEdyaWRQ
b3NpdGlvbiBjb2x1bW47CiAgICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBj
b2x1bW4pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZS0+c2V0R3Jp
ZEl0ZW1Db2x1bW4oY29sdW1uKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1D
b2x1bW4oY29sdW1uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0R3JpZFJvdzogewogICAgICAgICBHcmlkUG9zaXRpb24gcm93OwogICAgICAgICBp
ZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93KSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgc3RhdGUuc3R5bGUtPnNldEdyaWRJdGVtUm93KHJvdyk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEdyaWRJdGVtUm93KHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIFN0eWxlQnVpbGRl
ciBsb29rdXAgdGFibGUuCkBAIC0zODU3LDE0ICszODc2LDE0IEBAIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9y
UGVuZGluZ0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgp
KQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9w
ZXJ0eSwgdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4g
U3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKQEAgLTM4NzUsNyArMzg5NCw3IEBA
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVyCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdl
ID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChp
bWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBl
bmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4g
aW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCkBAIC0zODg0LDEzICszOTAzLDEzIEBAIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvCiB7CiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFs
dWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBp
bWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVs
ZWFzZSgpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3Qo
KQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUuZ2V0KCk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwogCiAgICAgaWYgKHN0eWxlLT50
ZXh0U2l6ZUFkanVzdCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTYyLDE1ICszOTgxLDE1IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGlu
Z3MpCiAgICAgfQogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1l
ZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxz
ZSkpOwotICAgIG1fc3RhdGUuc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOwotICAgIG1fc3RhdGUubGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBt
X3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIHNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNl
dEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQog
ewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1
bWVudCgpLCBtX3N0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgp
LCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpn
ZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRl
clN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwg
Ym9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC00MTc5LDE1ICs0MTk4LDE1IEBAIENvbG9yIFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSwgYm9vbCBmb3JWCiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICBj
YXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRv
Y3VtZW50KCktPnRleHRDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+
dGV4dENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVy
biAoc3RhdGUuZWxlbWVudC0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogc3RhdGUuZWxlbWVudC0+ZG9j
dW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudCgpLT5p
c0xpbmsoKSAmJiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlu
a0NvbG9yKCkgOiBzdGF0ZS5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKICAgICBjYXNlIENTU1Zh
bHVlV2Via2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmVsZW1lbnQtPmRvY3Vt
ZW50KCktPmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQo
KS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CiAgICAg
Y2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlLT5j
b2xvcigpOworICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShpZGVudCk7CiAgICAgfQpAQCAt
NDUyMiwxNyArNDU0MSwxNyBAQCBzdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdQogdm9pZCBTdHlsZVJl
c29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKLSAgICBpZiAoIXN0YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzLmlzRW1wdHkoKSkKKyAgICBpZiAoIXN0YXRlLnN0eWxlKCktPmhhc0Zp
bHRlcigpIHx8IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
ciA9IHN0YXRlLmVsZW1lbnQtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBz
dGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+
JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJh
dGlvbnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5z
aXplKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVy
YXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0
aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
ICAgICAgICAgICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0g
c3RhdGljX2Nhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdl
dCgpKTsKIAotICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBz
dGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLmdldChyZWZlcmVuY2VGaWx0ZXIpLmdldCgpOworICAg
ICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5n
U1ZHRG9jdW1lbnRzKCkuZ2V0KHJlZmVyZW5jZUZpbHRlcikuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQ2FjaGVk
U1ZHRG9jdW1lbnQqIGNhY2hlZERvY3VtZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpOwpAQCAtNDU0Myw3ICs0NTYyLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVu
ZGluZ1NWR0RvY3VtZW50cygpCiAgICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXItPnNldENhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZShjYWNoZWREb2N1bWVudCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0ZS5wZW5k
aW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CisgICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygp
LmNsZWFyKCk7CiB9CiAjZW5kaWYKIApAQCAtNDU1OSwxOCArNDU3OCwxOCBAQCBTdHlsZVNoYWRl
ciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2Vi
S2l0Q1NTU2hhZGVyVgogewogICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVk
T3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1No
YWRlcigpKQotICAgICAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gdHJ1ZTsKKyAgICAg
ICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVy
OwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAg
aWYgKCFtX3N0YXRlLnN0eWxlLT5oYXNGaWx0ZXIoKSB8fCAhbV9zdGF0ZS5oYXNQZW5kaW5nU2hh
ZGVycykKKyAgICBpZiAoIW1fc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUu
aGFzUGVuZGluZ1NoYWRlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJP
cGVyYXRpb25zID0gbV9zdGF0ZS5zdHlsZS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsK
KyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9
IG1fc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVy
YXRpb25zLmF0KGkpOwogICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25U
eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKQEAgLTQ1ODcsNyArNDYwNiw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7
CisgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyhmYWxzZSk7CiB9CiAKIHN0YXRpYyBi
b29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIp
CkBAIC00NjI5LDcgKzQ2NDgsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
U3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbQogewogICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9
IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwogICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbHVlcywgbV9zdGF0ZS5zdHlsZS5nZXQoKSwgbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlLCBv
cGVyYXRpb25zKTsKKyAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlcywgbV9zdGF0
ZS5zdHlsZSgpLCBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucyk7CiAgICAg
dHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOwogICAgIHJldHVy
biB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwogfQpAQCAtNDg3OSwxMiArNDg5OCwxMiBA
QCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGlu
VmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVlID0g
c3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAgICAg
ICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CisgICAgICAgICAgICBLVVJMIHVybCA9IG1fc3Rh
dGUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOwogCiAg
ICAgICAgICAgICBSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwg
dXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBvcGVyYXRpb25UeXBlKTsKLSAgICAgICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCksIG1fc3RhdGUuZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlm
IChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+dXJsKCksIG1fc3RhdGUuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2
Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMo
KS5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFk
b3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5j
YWNoZWRTVkdEb2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNDk4OCw3ICs1MDA3LDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1h
Z2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
bV9zdGF0ZS5lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKIAogICAgIGlmIChwZW5kaW5nSW1hZ2Ut
PmNzc0ltYWdlVmFsdWUoKSkgewogICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0g
cGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7CkBAIC01MDE4LDIzICs1MDM3LDIzIEBAIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZShTdHls
ZVBlbmRpbmdJbWFnZSogcGVuZGluCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJ
bWFnZXMoKQogewotICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0
eSgpKQorICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9p
dGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMuZW5kKCku
a2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9y
OjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCkua2V5cygp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3Rf
aXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5k
KCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJh
dG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5r
ZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQ
cm9wZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3Ig
KEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZS0+YWNjZXNzQmFja2dy
b3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91
bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3Vu
ZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tn
cm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91
bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAg
YmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRh
ID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUtPmNvbnRlbnREYXRhKCkp
OyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAg
ICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVu
dERhdGEqPihtX3N0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29u
dGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNv
bnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSog
aW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsK
QEAgLTUwNDcsNyArNTA2Niw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFn
ZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBt
X3N0YXRlLnN0eWxlLT5jdXJzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBj
dXJzb3JMaXN0ID0gbV9zdGF0ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEN1cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5h
dChpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVu
dEN1cnNvci5pbWFnZSgpKSB7CkBAIC01MDU5LDE3ICs1MDc4LDE3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOiB7Ci0gICAgICAgICAgICBp
ZiAobV9zdGF0ZS5zdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5saXN0
U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3R5bGUtPnNldExpc3RTdHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAg
ICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRl
LnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdl
KHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5
bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0
ZS5zdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFn
ZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5
bGUtPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwor
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBt
X3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHls
ZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAg
ICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlLT5ib3hS
ZWZsZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24g
PSBtX3N0YXRlLnN0eWxlKCktPmJveFJlZmxlY3QoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2UgPSByZWZsZWN0aW9uLT5tYXNrKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFnZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1Bl
bmRpbmdJbWFnZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBs
b2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwpAQCAtNTA3OSwxMiArNTA5OCwxMiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6
IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAm
JiBtX3N0YXRlLnN0eWxlLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlLT5zZXRNYXNrQm94SW1hZ2VTb3VyY2UobG9h
ZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5
bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5
bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1h
Z2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0
eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2Uo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNr
TGF5ZXIgPSBtX3N0YXRlLnN0eWxlLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFz
a0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVy
KiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xh
eWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlm
IChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKQogICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5n
SW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkp
KSk7CiAgICAgICAgICAgICB9CkBAIC01MDk1LDcgKzUxMTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcygpLmNsZWFyKCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZjE1NjkzNTUw
NzczY2ZjZDliOTI1NTk3Y2I0MWVlNjRlNzZjOWM3ZS4uZjU0NzZmNDA4YjlkYTA5NzNjMmU2NGIx
MmUyNmJjMmEyMzcwZTc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xNjUs
MjEgKzE2NSwxMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUuZ2V0
KCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnBhcmVudFN0eWxlOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGU7IH0KLSAgICBFbGVtZW50KiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50OyB9Ci0gICAgRG9jdW1lbnQq
IGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIFJlbmRlclN0eWxl
KiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQorICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsg
fQorICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5yb290RWxlbWVudFN0eWxlKCk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgeyByZXR1
cm4gbV9zdGF0ZS5lbGVtZW50KCk7IH0KKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVy
biBtX2RvY3VtZW50OyB9CiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBzY29wZVJlc29sdmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zY29wZVJlc29sdmVyLmdldCgpOyB9Ci0gICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBzdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0
aW9uKCkgeyByZXR1cm4gcGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2
b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fc3RhdGUu
Zm9udERpcnR5IHw9IHN0eWxlKCktPnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2
ZVpvb20oZmxvYXQgZikgeyBtX3N0YXRlLmZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRFZmZlY3Rp
dmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9zdGF0
ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoYik7IH0KLSAgICB2b2lk
IHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fc3RhdGUuZm9udERp
cnR5IHw9IHN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgIHZvaWQg
c2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9z
dGF0ZS5mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRh
dGlvbik7IH0KLSAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnBhcmVudE5vZGU7IH0KKyAgICBib29sIGhhc1BhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnBhcmVudE5vZGUoKTsgfQogCiAgICAgLy8gRklYTUU6IEl0IGNvdWxkIGJlIGJldHRl
ciB0byBjYWxsIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoKSBkaXJlY3RseSBh
ZnRlciB3ZSBmYWN0b3IgU3R5bGVSc29sdmVyIGZ1cnRoZXIuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg5MApAQCAtMjA3LDcgKzE5OSw2IEBAIHB1
YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShF
bGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVE
Tyk7CiAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7CiAgICAgUmVuZGVyU3R5bGUqIGxv
Y2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
UnVsZVNldChSdWxlU2V0Kik7CkBAIC0zMTQsOCArMzA1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlVG9BZGp1c3QsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgRWxlbWVudCopOwogCi0gICAgdm9pZCBhZGRNYXRjaGVkUnVsZShj
b25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX3N0YXRlLm1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7
IH0KLQogICAgIHN0cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxlUmFuZ2UoaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxlSW5kZXgoZmlyc3RSdWxl
SW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQogICAgICAgICBpbnQmIGZp
cnN0UnVsZUluZGV4OwpAQCAtMzg3LDcgKzM3Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzb3J0
TWF0Y2hlZFJ1bGVzKCk7CiAgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmKTsKIAotICAgIGJvb2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSk7CisgICAgYm9vbCBydWxlTWF0Y2hlcyhjb25zdCBSdWxl
RGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYpOwogICAgIGJvb2wg
Y2hlY2tSZWdpb25TZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVs
ZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKICAgICBlbnVtIFN0eWxlQXBwbGlj
YXRpb25QYXNzIHsKQEAgLTQzMiw3NSArNDIxLDE0MCBAQCBwdWJsaWM6CiAgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0YXRlKCkKLSAg
ICAgICAgOiBlbGVtZW50KDApCi0gICAgICAgICwgc3R5bGVkRWxlbWVudCgwKQotICAgICAgICAs
IHBhcmVudE5vZGUoMCkKLSAgICAgICAgLCBwYXJlbnRTdHlsZSgwKQotICAgICAgICAsIHJvb3RF
bGVtZW50U3R5bGUoMCkKLSAgICAgICAgLCByZWdpb25Gb3JTdHlsaW5nKDApCi0gICAgICAgICwg
c2FtZU9yaWdpbk9ubHkoZmFsc2UpCi0gICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VVRE8pCi0g
ICAgICAgICwgZWxlbWVudExpbmtTdGF0ZShOb3RJbnNpZGVMaW5rKQotICAgICAgICAsIGRpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKLSAgICAgICAgLCBlbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMoZmFsc2UpCi0gICAgICAgICwgbW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29s
dmluZ1N0eWxlKQotICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQot
ICAgICAgICAsIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCisgICAgICAg
IDogbV9lbGVtZW50KDApCisgICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCisgICAgICAgICwg
bV9wYXJlbnROb2RlKDApCisgICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQorICAgICAgICAsIG1f
cm9vdEVsZW1lbnRTdHlsZSgwKQorICAgICAgICAsIG1fcmVnaW9uRm9yU3R5bGluZygwKQorICAg
ICAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwgbV9wc2V1ZG9TdHlsZShO
T1BTRVVETykKKyAgICAgICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoTm90SW5zaWRlTGluaykKKyAg
ICAgICAgLCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludChmYWxzZSkKKyAgICAgICAgLCBt
X2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhmYWxzZSkKKyAgICAgICAgLCBtX21vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSkKKyAgICAgICAgLCBtX2FwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSh0cnVlKQorICAgICAgICAsIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZShmYWxzZSkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgICAgICwgaGFzUGVu
ZGluZ1NoYWRlcnMoZmFsc2UpCisgICAgICAgICwgbV9oYXNQZW5kaW5nU2hhZGVycyhmYWxzZSkK
ICNlbmRpZgotICAgICAgICAsIGxpbmVIZWlnaHRWYWx1ZSgwKQotICAgICAgICAsIGZvbnREaXJ0
eShmYWxzZSkKLSAgICAgICAgLCBoYXNVQUFwcGVhcmFuY2UoZmFsc2UpCi0gICAgICAgICwgYmFj
a2dyb3VuZERhdGEoQmFja2dyb3VuZEZpbGxMYXllcikgeyB9CisgICAgICAgICwgbV9saW5lSGVp
Z2h0VmFsdWUoMCkKKyAgICAgICAgLCBtX2ZvbnREaXJ0eShmYWxzZSkKKyAgICAgICAgLCBtX2hh
c1VBQXBwZWFyYW5jZShmYWxzZSkKKyAgICAgICAgLCBtX2JhY2tncm91bmREYXRhKEJhY2tncm91
bmRGaWxsTGF5ZXIpIHsgfQorCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGluaXRFbGVtZW50
KEVsZW1lbnQqKTsKKyAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50Kiwg
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VV
RE8sIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOworICAgICAgICB2b2lkIGNs
ZWFyKCk7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50LT5kb2N1bWVudCgpOyB9CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVudDsgfQorICAgICAgICB2b2lkIHNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQor
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgp
OyB9CisgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHRha2VTdHlsZSgpIHsgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOyB9CisKKyAgICAgICAgU3RhdGljQ1NTUnVsZUxpc3QqIGVuc3Vy
ZVJ1bGVMaXN0KCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHRha2VSdWxlTGlz
dCgpIHsgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOyB9CisKKyAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQor
ICAgICAgICB2b2lkIHNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgeyBt
X3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7IH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBSZW5kZXJT
dHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHls
ZTsgfQorCisgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgICAgICB2b2lkIHNldFNhbWVP
cmlnaW5Pbmx5KGJvb2wgaXNTYW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gaXNT
YW1lT3JpZ2luT25seTsgfQorICAgICAgICBib29sIGlzU2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7
IHJldHVybiBtX3NhbWVPcmlnaW5Pbmx5OyB9CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9TdHlsZTsgfQorICAgICAgICBFSW5zaWRlTGluayBl
bGVtZW50TGlua1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9Cisg
ICAgICAgIGJvb2wgZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQ7IH0KKyAgICAgICAgdm9pZCBzZXRFbGVtZW50
QWZmZWN0ZWRCeUNsYXNzUnVsZXMoYm9vbCBpc0FmZmVjdGVkKSB7IG1fZWxlbWVudEFmZmVjdGVk
QnlDbGFzc1J1bGVzID0gaXNBZmZlY3RlZDsgfQorICAgICAgICBib29sIGVsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1
bGVzOyB9CisgICAgICAgIHZvaWQgc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbW9kZSkg
eyBtX21vZGUgPSBtb2RlOyB9CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgICAgIAotcHVibGljOgorICAgICAgICB2b2lk
IHNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBpc0FwcGx5OyB9CisgICAgICAgIHZvaWQgc2V0QXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlID0gaXNBcHBseTsgfQorICAgICAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlOyB9CisgICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAg
ICAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcCYgcGVuZGluZ0ltYWdlUHJvcGVydGllcygpIHsg
cmV0dXJuIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgfQorI2lmIEVOQUJMRShDU1NfRklMVEVS
UykgJiYgRU5BQkxFKFNWRykKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50TWFwJiBwZW5kaW5n
U1ZHRG9jdW1lbnRzKCkgeyByZXR1cm4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOyB9CisjZW5kaWYK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIHZvaWQgc2V0SGFzUGVuZGluZ1NoYWRl
cnMoYm9vbCBoYXNQZW5kaW5nU2hhZGVycykgeyBtX2hhc1BlbmRpbmdTaGFkZXJzID0gaGFzUGVu
ZGluZ1NoYWRlcnM7IH0KKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nU2hhZGVycygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzUGVuZGluZ1NoYWRlcnM7IH0KKyNlbmRpZgorCisgICAgICAgIHZvaWQgc2V0
TGluZUhlaWdodFZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkgeyBtX2xpbmVIZWlnaHRWYWx1ZSA9IHZh
bHVlOyB9CisgICAgICAgIENTU1ZhbHVlKiBsaW5lSGVpZ2h0VmFsdWUoKSB7IHJldHVybiBtX2xp
bmVIZWlnaHRWYWx1ZTsgfQorICAgICAgICB2b2lkIHNldEZvbnREaXJ0eShib29sIGlzRGlydHkp
IHsgbV9mb250RGlydHkgPSBpc0RpcnR5OyB9CisgICAgICAgIGJvb2wgZm9udERpcnR5KCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGlydHk7IH0KKworICAgICAgICB2b2lkIGNhY2hlQm9yZGVyQW5k
QmFja2dyb3VuZCgpOworICAgICAgICBib29sIGhhc1VBQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVUFBcHBlYXJhbmNlOyB9CisgICAgICAgIEJvcmRlckRhdGEgYm9yZGVyRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyRGF0YTsgfQorICAgICAgICBGaWxsTGF5ZXIgYmFja2dy
b3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9CisgICAgICAgIENv
bG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9
CisKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJl
dHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1f
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgICAgIHZv
aWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFpvb20oZik7
IH0KKyAgICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkg
fD0gbV9zdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgICAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRUZXh0U2l6ZUFk
anVzdChiKTsgfQorICAgICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdN
b2RlKTsgfQorICAgICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24g
dGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFRleHRPcmllbnRh
dGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRh
KiwgMzI+JiBtYXRjaGVkUnVsZXMoKSB7IHJldHVybiBtX21hdGNoZWRSdWxlczsgfQorICAgICAg
ICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1
bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgogICAgICAgICAvLyBG
SVhNRShidWcgMTA4NTYzKTogdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmV2aWV3LCB0aGVzZSBtZW1i
ZXIKICAgICAgICAgLy8gdmFyaWFibGVzIGFyZSBwdWJsaWMuIEhvd2V2ZXIgd2Ugc2hvdWxkIGFk
ZCBtZXRob2RzIHRvIGFjY2VzcwogICAgICAgICAvLyB0aGVzZSB2YXJpYWJsZXMuCi0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0g
ICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQ7Ci0gICAgICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudE5vZGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZTsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGU7CisgICAgICAgIEVsZW1lbnQqIG1fZWxl
bWVudDsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOworICAgICAgICBTdHls
ZWRFbGVtZW50KiBtX3N0eWxlZEVsZW1lbnQ7CisgICAgICAgIENvbnRhaW5lck5vZGUqIG1fcGFy
ZW50Tm9kZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGU7CisgICAgICAgIFJl
bmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGU7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmc7Ci0gICAgICAgIGJvb2wgc2FtZU9yaWdpbk9ubHk7Ci0g
ICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOworICAgICAgICBSZW5kZXJSZWdpb24qIG1fcmVn
aW9uRm9yU3R5bGluZzsKKyAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OworICAgICAgICBQ
c2V1ZG9JZCBtX3BzZXVkb1N0eWxlOwogCi0gICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRMaW5r
U3RhdGU7CisgICAgICAgIEVJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZTsKIAotICAgICAg
ICBib29sIGRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKKyAgICAgICAgYm9vbCBtX2Rpc3Ry
aWJ1dGVkVG9JbnNlcnRpb25Qb2ludDsKIAotICAgICAgICBib29sIGVsZW1lbnRBZmZlY3RlZEJ5
Q2xhc3NSdWxlczsKKyAgICAgICAgYm9vbCBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsK
IAotICAgICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvOwotCi0gICAgICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6TW9kZSBtb2RlOworICAgICAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbV9tb2RlOwog
CiAgICAgICAgIC8vIEEgYnVmZmVyIHVzZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVs
ZXMgZm9yIGFuIGVsZW1lbnQsCiAgICAgICAgIC8vIGFuZCBhIHRlbXBvcmFyeSBidWZmZXIgdXNl
ZCBmb3IgbWVyZ2Ugc29ydGluZy4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+
IG1hdGNoZWRSdWxlczsKLSAgICAgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBydWxlTGlz
dDsKKyAgICAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOwor
ICAgICAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7CiAKLSAgICAgICAg
Ym9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZTsKKyAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGU7CiAKLSAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgcGVuZGluZ0ltYWdlUHJvcGVy
dGllczsKKyAgICAgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXAgbV9wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5n
U2hhZGVyczsKKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdTaGFkZXJzOwogI2VuZGlmCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgICAgICBQZW5kaW5nU1ZHRG9j
dW1lbnRNYXAgcGVuZGluZ1NWR0RvY3VtZW50czsKKyAgICAgICAgUGVuZGluZ1NWR0RvY3VtZW50
TWFwIG1fcGVuZGluZ1NWR0RvY3VtZW50czsKICNlbmRpZgotICAgICAgICBDU1NWYWx1ZSogbGlu
ZUhlaWdodFZhbHVlOwotICAgICAgICBib29sIGZvbnREaXJ0eTsKKyAgICAgICAgQ1NTVmFsdWUq
IG1fbGluZUhlaWdodFZhbHVlOworICAgICAgICBib29sIG1fZm9udERpcnR5OwogCi0gICAgICAg
IGJvb2wgaGFzVUFBcHBlYXJhbmNlOwotICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGE7Ci0g
ICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yOworICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOworICAgICAgICBCb3JkZXJE
YXRhIG1fYm9yZGVyRGF0YTsKKyAgICAgICAgRmlsbExheWVyIG1fYmFja2dyb3VuZERhdGE7Cisg
ICAgICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogICAgIH07CiAKICAgICBzdGF0aWMgUmVu
ZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2
YWlsYWJsZTsgfQpAQCAtNTEzLDE1ICs1NjcsMjMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwogCi0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQorICAg
IGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0lu
dExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogCiAgICAgQ1NTVG9TdHls
ZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNT
U09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckNTU09NV3JhcHBlcnM7IH0KLQorICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0
ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX3N0YXRlLnNldFpvb20oZik7IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBtX3N0YXRlLnNldFRleHRTaXplQWRqdXN0KGIpOyB9CisgICAg
dm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNl
dFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0aW9u
KFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50
YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQorICAgIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiMjlk
ODEyOWYzYzdiNWFmMjZjNmRkZjMyMzVlYmE0NWM1Y2E3ZWEzLi41N2ZjZTRlYTYyMTg0ZmY3Zjg4
YTM2OGQzOGI5MGY3Nzk4YTBhZjcxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDItMTMg
IFRha2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29tPgorCisgICAgICAgIFtSZWZhY3Rv
cmluZ10gU3R5bGVSZXNvbHZlcjo6U3RhdGUgc2hvdWxkIGhhdmUgbWV0aG9kcyB0byBhY2Nlc3Mg
aXRzIG1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDg1NjMKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICAq
IGluc3BlY3Rvci9zdHlsZXMvcmVnaW9uLXN0eWxlLWNyYXNoLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgUmViYXNlbGluZS4gU2luY2UgaW5zcGVjdG9yIGhhc24ndCBzdXBwb3J0ZWQgQ1NTIHJlZ2lv
biBzdHlsZXMgeWV0LAorICAgICAgICByZWdpb24tc3R5bGUtY3Jhc2guaHRtbCBoYXMgbm8gQ1NT
IHJlZ2lvbiBzdHlsZXMgYXMgaXRzIHJlc3VsdC4KKwogMjAxMy0wMi0xMiAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEVyYWRpY2F0ZSBmYXN0L2pzL2RmZy1wb2lz
b24tZnV6ei5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3Jl
Z2lvbi1zdHlsZS1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzL3JlZ2lvbi1zdHlsZS1jcmFzaC1leHBlY3RlZC50eHQKaW5kZXggZWY4ZDU0MDA5ZDU1MjYw
OGFhMjE1MjAzMzU5ZmQ2YjAxODVkZWQ2ZC4uZDllZGE2NDlmZDY2N2RiYTk2ODdiN2RjNTA2Mzhj
ZWZjYjBjM2RjOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yZWdp
b24tc3R5bGUtY3Jhc2gtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMvcmVnaW9uLXN0eWxlLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMTMsOSArMTMsNiBAQCBl
bGVtZW50LnN0eWxlICB7ICgpCiAKID09PT09PT09IE1hdGNoZWQgQ1NTIFJ1bGVzID09PT09PT09
CiBbZXhwYW5kZWRdIAotI3AxICB7IChyZWdpb24tc3R5bGUtY3Jhc2guaHRtbDo4KQotCi1bZXhw
YW5kZWRdIAogI3AxICB7IChyZWdpb24tc3R5bGUtY3Jhc2guaHRtbDo2KQogY29sb3I6ICNmZjAw
MDA7CiAKQEAgLTI4LDc0ICsyNSw0IEBAIGRpc3BsYXk6IGJsb2NrOwogLXdlYmtpdC1tYXJnaW4t
ZW5kOiAwcHg7CiAKIAotPT09PT09PT0gUHNldWRvIDo6Zmlyc3QtbGluZSBlbGVtZW50ID09PT09
PT09Ci1bZXhwYW5kZWRdIAotI3AxICB7IChyZWdpb24tc3R5bGUtY3Jhc2guaHRtbDo4KQotCi0K
LT09PT09PT09IFBzZXVkbyA6OmZpcnN0LWxldHRlciBlbGVtZW50ID09PT09PT09Ci1bZXhwYW5k
ZWRdIAotI3AxICB7IChyZWdpb24tc3R5bGUtY3Jhc2guaHRtbDo4KQotCi0KLT09PT09PT09IFBz
ZXVkbyA6OmJlZm9yZSBlbGVtZW50ID09PT09PT09Ci1bZXhwYW5kZWRdIAotI3AxICB7IChyZWdp
b24tc3R5bGUtY3Jhc2guaHRtbDo4KQotCi0KLT09PT09PT09IFBzZXVkbyA6OmFmdGVyIGVsZW1l
bnQgPT09PT09PT0KLVtleHBhbmRlZF0gCi0jcDEgIHsgKHJlZ2lvbi1zdHlsZS1jcmFzaC5odG1s
OjgpCi0KLQotPT09PT09PT0gUHNldWRvIDo6c2VsZWN0aW9uIGVsZW1lbnQgPT09PT09PT0KLVtl
eHBhbmRlZF0gCi0jcDEgIHsgKHJlZ2lvbi1zdHlsZS1jcmFzaC5odG1sOjgpCi0KLQotPT09PT09
PT0gUHNldWRvIGVsZW1lbnQgPT09PT09PT0KLVtleHBhbmRlZF0gCi0jcDEgIHsgKHJlZ2lvbi1z
dHlsZS1jcmFzaC5odG1sOjgpCi0KLQotPT09PT09PT0gUHNldWRvIDo6LXdlYmtpdC1zY3JvbGxi
YXIgZWxlbWVudCA9PT09PT09PQotW2V4cGFuZGVkXSAKLSNwMSAgeyAocmVnaW9uLXN0eWxlLWNy
YXNoLmh0bWw6OCkKLQotCi09PT09PT09PSBQc2V1ZG8gOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1
dHRvbiBlbGVtZW50ID09PT09PT09Ci1bZXhwYW5kZWRdIAotI3AxICB7IChyZWdpb24tc3R5bGUt
Y3Jhc2guaHRtbDo4KQotCi0KLT09PT09PT09IFBzZXVkbyA6Oi13ZWJraXQtaW5wdXQtcGxhY2Vo
b2xkZXIgZWxlbWVudCA9PT09PT09PQotW2V4cGFuZGVkXSAKLSNwMSAgeyAocmVnaW9uLXN0eWxl
LWNyYXNoLmh0bWw6OCkKLQotCi09PT09PT09PSBQc2V1ZG8gOjotd2Via2l0LXNsaWRlci10aHVt
YiBlbGVtZW50ID09PT09PT09Ci1bZXhwYW5kZWRdIAotI3AxICB7IChyZWdpb24tc3R5bGUtY3Jh
c2guaHRtbDo4KQotCi0KLT09PT09PT09IFBzZXVkbyA6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1i
dXR0b24gZWxlbWVudCA9PT09PT09PQotW2V4cGFuZGVkXSAKLSNwMSAgeyAocmVnaW9uLXN0eWxl
LWNyYXNoLmh0bWw6OCkKLQotCi09PT09PT09PSBQc2V1ZG8gOjotd2Via2l0LXNlYXJjaC1kZWNv
cmF0aW9uIGVsZW1lbnQgPT09PT09PT0KLVtleHBhbmRlZF0gCi0jcDEgIHsgKHJlZ2lvbi1zdHls
ZS1jcmFzaC5odG1sOjgpCi0KLQotPT09PT09PT0gUHNldWRvIDo6LXdlYmtpdC1zZWFyY2gtcmVz
dWx0cy1kZWNvcmF0aW9uIGVsZW1lbnQgPT09PT09PT0KLVtleHBhbmRlZF0gCi0jcDEgIHsgKHJl
Z2lvbi1zdHlsZS1jcmFzaC5odG1sOjgpCi0KLQotPT09PT09PT0gUHNldWRvIDo6LXdlYmtpdC1z
ZWFyY2gtcmVzdWx0cy1idXR0b24gZWxlbWVudCA9PT09PT09PQotW2V4cGFuZGVkXSAKLSNwMSAg
eyAocmVnaW9uLXN0eWxlLWNyYXNoLmh0bWw6OCkKLQotCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>